Hola
Espero me puedan ayudar
Tengo un archivo en Excel con dos hojas en una esta la bases de datos de toda la información a elegir en la hoja 2 Plantilla mi problema radica en la elección de País, Departamento y Municipio ya que se requiere que al elegir me muestre el nombre pero me refleje su código, para esto tiene un macro que cumple tal función pero a la hora de elegir en los Departamentos no me hace el filtro para que me muestre solo los Departamentos del País seleccionado si no que me muestra el listado de todos lo países.
La columna O "MUNICIPIO", depende de la columna Q "Departamentos" y esta depende de la columna O "País".
Trate de hacer una validación con INDIRECTO Y BUSCARV, modifique macro pero no funciono
Gracias
mira este envío del foro http://www.necesitomas.com/lista-verificacion-filtro
Si puedes adjuntar el archivo de ejemplo para ver lo que estás intentando hacer ...
------
Ya sé Excel, pero necesito más.
Hola
Te adjunto el archivo.
Gracias
Cuando estableces la validación de las celdas para el departamento, siempre le pasas el nombre "DEPARTAMENTOS" en vez del nombre del país que es el rango donde tienes los departamentos de cada país.
Así que modifica esa línea donde llamas a
Call PonerCodigo(Target, noms(i))
para los departamentos debes sustituir noms(i) y buscar el nombre del país
------
Ya sé Excel, pero necesito más.
Hola
Entoces el cambio lo debo hacer en este macro? o en que parte?
Sub PonerCodigo(Target, rango)
'
Set b = Sheets("Bancos y Departamentos").Range(rango).Find(Target, lookat:=xlWhole)
If Not b Is Nothing Then
cod = b.Offset(0, -1)
Application.EnableEvents = False
With Target.Validation
.Delete
Target.Value = cod
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & rango
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
Hola
Ya he cambiado el código, pero solo me esta arrojando los datos del primer pais que es Colombia, que es lo que me falta o lo estoy haciendo mal .
En la validación pongo =INDIRECTO(BUSCARV(P2,COD_PAIS,2,0)) pero automaticamente se cambia =Colombia
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Target.Row = 1 Then Exit Sub
'
Application.EnableEvents = False
If Intersect(Target, Range("Z1:Z5000")) Is Nothing Then
Target = UCase(Target)
Else
Target = LCase(Target)
End If
'
cols = Array("D", "P", "Q", "AD", "AE", "AJ", "AM", "AW")
noms = Array("GRUPOCUENTA", "PAISES", "COLOMBIA", "ARGENTINA", "ALEMANIA", "AUSTRALIA", "AUSTRIA", "BELICE", "BRASIL", "BULGARIA", "CHILE", "CHINA", "TIPOSAP", _
"CLASEIMPUESTO", "BANCOS", "CLASECUENTA", "GRUPOTESORERIA")
For i = LBound(cols) To UBound(cols)
If Not Intersect(Target, Columns(cols(i))) Is Nothing Then
Call PonerCodigo(Target, noms(i))
Exit For
End If
Next
Application.EnableEvents = True
If Left(Target.Address, 3) = "$P$" Then
Range("Q" & Target.Row) = ""
Range("O" & Target.Row) = ""
ElseIf _
Left(Target.Address, 3) = "$Q$" Then
Range("O" & Target.Row) = ""
End If
End Sub
¿En qué momento le estás diciendo el país elegido?
Ahora simplemente tienes un bucle que recorre las matrices con las columans, cualdo llega al item 3, que en tu matriz de columnas es la Q, simplemente toma el elemento 3 de la matriz columns, que es Colombia. Siempre elige colombia.
Cuando estés en el item 3, o cuando la columna sea la Q, debes buscar el país
por ejemplo pon un IF para comprobarlo y tomar una cosa u otra:
If i = 3 Then
rangoValidacion= paiselegido 'aquí tienes que buscar el nombre del país elegido
Else
RangoValidacion = noms(i)
End If
Call PonerCodigo(Target, RangoValidacion)
------
Ya sé Excel, pero necesito más.
Hola
Ya he cambiado el código, pero solo me esta arrojando los datos del primer pais ej: COLOMBIA, no se que es lo que me falta o lo estoy haciendo mal .
En la validación pongo =INDIRECTO(BUSCARV(P2,COD_PAIS,2,0)) pero automaticamente se cambia =Colombia
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Target.Row = 1 Then Exit Sub
'
Application.EnableEvents = False
If Intersect(Target, Range("Z1:Z5000")) Is Nothing Then
Target = UCase(Target)
Else
Target = LCase(Target)
End If
'
cols = Array("D", "P", "Q", "AD", "AE", "AJ", "AM", "AW")
noms = Array("GRUPOCUENTA", "PAISES", "COLOMBIA", "ARGENTINA", "ALEMANIA", "AUSTRALIA", "AUSTRIA", "BELICE", "BRASIL", "BULGARIA", "CHILE", "CHINA", "TIPOSAP", _
"CLASEIMPUESTO", "BANCOS", "CLASECUENTA", "GRUPOTESORERIA")
For i = LBound(cols) To UBound(cols)
If Not Intersect(Target, Columns(cols(i))) Is Nothing Then
Call PonerCodigo(Target, noms(i))
Exit For
End If
Next
Application.EnableEvents = True
If Left(Target.Address, 3) = "$P$" Then
Range("Q" & Target.Row) = ""
Range("O" & Target.Row) = ""
ElseIf _
Left(Target.Address, 3) = "$Q$" Then
Range("O" & Target.Row) = ""
End If
End Sub
te respondí al comentario anónimo de más arriba
------
Ya sé Excel, pero necesito más.
hola
si, que pena pense que por se anónimo no se publicaría, voy probar gracias a ver si soy capaz de hacer que funcione, gracias.