viernes, octubre 17, 2014

Lista desplegable con contenido condicional - versión con Vba

Supongamos este escenario:

tenemos una lista que asocia nombres con valores

donde los nombres se repiten.

Queremos crear una lista desplegable que muestre los valores asociados al nombre que eliljamos en la celda G2 de este ejemplo


Vamos a mostrar como está construido este modelo.

Comenzamos por mostrar la columna A que están oculta. Esta columna contiene un rango dinámico donde ponemos los valores asociados al nombre que aparece en la celda G2.


El rango D1:E14 que contiene los nombres y sus valores está definido como Tabla.
La columna A contiene los valores asociados al nombre introducido en la celda G2.
Para poner estos valores usamos un evento de tipo Change

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$G$2" Then
        Range("tblNombreValor[#All]").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("G1:G2"), CopyToRange:=Range("A1"), Unique:=False
    End If
 
End Sub


El código usa la funcionalidad Filtro Avanzado (Datos - Ordenar y Filtrar - Avanzadas) que nos permite filtrar una tabla y copiar los resultados a otro rango.

Definimos un nombre que se refiere a este rango dinámicamente con esta fórmula

=Hoja1!$A$2:INDICE(Hoja1!$A:$A,CONTARA(Hoja1!$A:$A))


Ahora definimos una validación de datos en la celda H2 con la opción Lista y el nombre definido ListValores en la casilla Origen


Con esto concluimos la construcción del modelo. El archivo del ejemplo se puede descargar aquí.

En cuanto al formato condicional para señalar las filas del nombre introducido en G2, usamos la opción Formula con esta definición



8 comentarios:

  1. Me ha picado un poco la curiosidad de conseguir el mismo efecto sin necesidad de macros... y aquí te dejo el enlace para que puedas echarle un vistazo:

    https://dl.dropboxusercontent.com/u/11736924/Desplegable%20condicional%20sin%20macros.xlsx

    ResponderBorrar
  2. Hola Carlos,
    excelente, gracias por compartir. Yo había publicado una solución distinta en el pasado (el planteo era un poco distinto, fijate en esta nota en el blog).
    La única limitación que le veo es que la tabla auxiliar debe tener una cantidad de filas introducidas de antemano.

    ResponderBorrar
  3. Hola Jorge:

    De verdad te felicito por esta nota, es fantástica. Solo tengo una inquietud.

    ¿Cómo se hacer que funcione sin necesidad de escribir el nombre de la persona sino usando una lista desplegable o mejor un control de formulario?

    Gracias por compartir esta nota

    ResponderBorrar
  4. Hola Mauricio, no me queda claro. ¿Te refieres a elegir el nombre de una lista desplegable o de un control de formulario y pasarlo a la celda?

    ResponderBorrar
  5. Exactamente a eso me refiero. Gracias por responder.

    ResponderBorrar
  6. En en blog hay varias notas sobre el tema. En la nube de etiquetas (en la columna derecha del blog), apretando "Listas desplegables" puedes ver todas las notas sobre el tema.

    ResponderBorrar
  7. Buenas tardes.
    Me llamo Sara, en primer lugar muchísimas gracias por el blog.
    Respecto a mi consulta, me gustaría saber si es posible usar en columna listas desplegable condicionadas (he de decir que utilicé el método de Carlos -1ºcomentario- porque fui incapaz de conseguirlo con Vba, una que es muy torpe!!!).
    Me explico mejor, quiero tener un listado de envíos, una especie de formulario.
    Saco una lista enorme de clientes (hoja1) y en el formulario/lista (hoja2) tengo que introducir a mano los datos de los envíos (paquetes, kg, dimensiones, etc) pero quiero usar las listas desplegables para que simplemente con introducir el número del cliente me aparezcan todas sus direcciones de envío y de ahí que al escoger una de ellas me rellene todos los datos de envío, pero tengo que conseguir un listado de envíos.
    He sabido hacerlo para una sola lista desplegable (como ya he comentado usando el método de Carlos), mi problema es cómo hacer que en una sola hoja toda una columna sean listas desplegables con el mismo fin.
    Espero haberme explicado.
    Gracias de antemano.
    SARA.

    ResponderBorrar
  8. Hola Sara, fijate la que pongo en el elnlace Ayuda (en la parte superior del blog) y ponte en contacto conmigo por mail privado.

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.