Lista desplegable con contenido condicional - versión con Vba

viernes, octubre 17, 2014

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 comments:

carlos 17 octubre, 2014 15:31  

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

Jorge Dunkelman 17 octubre, 2014 19:31  

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.

Mauricio Montaño 20 octubre, 2014 03:39  

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

Jorge Dunkelman 20 octubre, 2014 07:09  

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?

Mauricio Montaño 22 octubre, 2014 17:02  

Exactamente a eso me refiero. Gracias por responder.

Jorge Dunkelman 22 octubre, 2014 17:47  

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.

Anónimo,  23 junio, 2016 18:29  

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.

Jorge Dunkelman 24 junio, 2016 17:38  

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

Publicar un comentario

Google+ Followers

Seguidores

Google+ Badge

Términos Legales

  © Blogger template On The Road by Ourblogtemplates.com 2009

Back to TOP