Mi consulta es la siguiente, necesito hacer 3 lista desplegables que se filtren dependiendo el valor de la anterior. Ejemplo : mi data cruda tiene los siguientes campos
Cliente Proyecto Orden
Cliente1 1proyectoA 334
Cliente1 1proyectoB 445
Cliente1 1prouectoA 567
Cliente2 2ProyectoC 199
Cliente2 2ProyectoA 134
Cliente2 2proyectoB 1234
en otra hoja tengo la columnas A,B,C con los nombres clientes, proyecto, orden, debajo de ello para todas las filas debe haber una lista despegable para cada columna, aqui en la primera lista solo me tiene que traer los clientes sin duplicados, osea cliente1 y cliente2, al elejir un cliente, la segunda lista me tiene que traer el filtro de todos los proyectos de ese cliente, osea cliente1 = 1proyectoA, 1proyectoB y al elegir un proyecto me filtre en la tercera lista las ordenes de ese proyecto, osea cliente1 = 1proyectoB = 445.
Esto se tiene que repetir para cada fila hasta el final de la pagina. Yo tengo un código que hace esto, pero solo lo hace para fila 9 y necesitaría modificar-lo, pero mis conocimientos son muy poco para no decir nulos de BVA, por eso pido su ayuda.
abajo el código de la macro
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A9:C9")) Is Nothing Then
With Target
If .Rows.Count > 1 Then Exit Sub
On Error Resume Next
Application.ScreenUpdating = False
Select Case .Offset(-1)
Case Is = "Cliente":
Columns("X:Z").Delete
Hoja3.Range("A:A").AdvancedFilter 2, , Range("Z1"), 1
uf = Range("Z" & Rows.Count).End(xlUp).Row
Columns("Z").Sort Range("Z1"), xlAscending, Header:=xlYes
With .Validation
.Delete
.Add Type:=xlValidateList, Formula1:="=Z2:Z" & uf
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = False
.ShowError = False
End With
Columns("X:AA").Hidden = True
Case Is = "Proyecto":
Columns("X:Z").Delete
pp = WorksheetFunction.Match(Range("A9"), Hoja3.Columns("A"), 0)
cpp = WorksheetFunction.CountIf(Hoja3.Columns("A"), Range("A9"))
With Hoja3
If cpp > 1 Then
.Range(.Cells(pp, "A"), .Cells(pp + cpp - 1, "B")).AdvancedFilter 2, , Range("Y1"), 1
Else
Range("Z2") = .Cells(pp, "B")
End If
End With
Hoja3.Range("A1:B1").Copy Range("Y1")
Range("Y1").CurrentRegion.Sort Range("Z1"), xlAscending, Header:=xlYes
uf = Range("Z" & Rows.Count).End(xlUp).Row
With .Validation
.Delete
.Add Type:=xlValidateList, Formula1:="=Z2:Z" & uf
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = False
.ShowError = False
End With
Columns("X:Z").Hidden = True
Case Is = "Orden":
Columns("X:Z").Delete
With Hoja3.Range("A1").CurrentRegion
.AutoFilter 1, Range("A9").Text
.AutoFilter 2, Range("B9").Text
.Copy Range("X1")
.AutoFilter
End With
Range("X1").CurrentRegion.Sort Range("Z1"), xlAscending, Header:=xlYes
uf = Range("Z" & Rows.Count).End(xlUp).Row
With .Validation
.Delete
.Add Type:=xlValidateList, Formula1:="=Z2:Z" & uf
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = False
.ShowError = False
End With
Columns("X:Z").Hidden = True
End Select
On Error GoTo 0
Application.ScreenUpdating = True
'SendKeys "%{down}"
End With
End If
End Sub
[/CODE]
Featured Replies
Archivado
Este tema está ahora archivado y está cerrado a más respuestas.
Buen Días
Mi consulta es la siguiente, necesito hacer 3 lista desplegables que se filtren dependiendo el valor de la anterior. Ejemplo : mi data cruda tiene los siguientes campos
Cliente Proyecto Orden
Cliente1 1proyectoA 334
Cliente1 1proyectoB 445
Cliente1 1prouectoA 567
Cliente2 2ProyectoC 199
Cliente2 2ProyectoA 134
Cliente2 2proyectoB 1234
en otra hoja tengo la columnas A,B,C con los nombres clientes, proyecto, orden, debajo de ello para todas las filas debe haber una lista despegable para cada columna, aqui en la primera lista solo me tiene que traer los clientes sin duplicados, osea cliente1 y cliente2, al elejir un cliente, la segunda lista me tiene que traer el filtro de todos los proyectos de ese cliente, osea cliente1 = 1proyectoA, 1proyectoB y al elegir un proyecto me filtre en la tercera lista las ordenes de ese proyecto, osea cliente1 = 1proyectoB = 445.
Esto se tiene que repetir para cada fila hasta el final de la pagina. Yo tengo un código que hace esto, pero solo lo hace para fila 9 y necesitaría modificar-lo, pero mis conocimientos son muy poco para no decir nulos de BVA, por eso pido su ayuda.
abajo el código de la macro