Lista depenediente con Validación de datos y filtro

10 envíos / 0 nuevos
Último envío
asrainocturna
Imagen de asrainocturna
Offline
última acción: Hace 7 años 7 meses
alta: 21/08/2016 - 21:48
Puntos: 55
Lista depenediente con Validación de datos y filtro

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

Etiquetas: 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 7 horas 40 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
mira este envío del foro http

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.

asrainocturna
Imagen de asrainocturna
Offline
última acción: Hace 7 años 7 meses
alta: 21/08/2016 - 21:48
Puntos: 55
HolaTe adjunto el archivo

Hola

Te adjunto el archivo.

Gracias

AdjuntoTamaño
File m7.xlsm142.82 KB
pacomegia
Imagen de pacomegia
Offline
última acción: Hace 7 horas 40 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Cuando estableces la

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.

visitante (no verificado)
Imagen de visitante
Hola Entoces el cambio lo

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

visitante (no verificado)
Imagen de visitante
HolaYa he cambiado el código,

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

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 7 horas 40 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
¿y cómo sabe si es Colombia o es otro país?

¿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.

asrainocturna
Imagen de asrainocturna
Offline
última acción: Hace 7 años 7 meses
alta: 21/08/2016 - 21:48
Puntos: 55
HolaYa he cambiado el código,

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

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 7 horas 40 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
te respondí al comentario

te respondí al comentario anónimo de más arriba 

 

------
Ya sé Excel, pero necesito más.

asrainocturna
Imagen de asrainocturna
Offline
última acción: Hace 7 años 7 meses
alta: 21/08/2016 - 21:48
Puntos: 55
holasi, ya vi la respuesta,

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.