Lista desplegable multiple

oscar_igor

New Member
Joined
Apr 7, 2003
Messages
22
Hola a todos:
Mi duda es la siguiente, tengo una lista desplegable la cual esta en un cuadro de dialogo y esta lista esta vinculada a un rango el cual me da como seleccion un numero determinado de clientes, la pregunta es ¿como hacer para que esta lista sea dinamica? el problema esta cuando son menos clientes en la lista aparece en blanco y cuando son mas obviamente no aparecen.
De antemano gracias
 

Excel Facts

Convert text numbers to real numbers
Select a column containing text numbers. Press Alt+D E F to quickly convert text to numbers. Faster than "Convert to Number"
el rango actual es a1:a50 el siguiente mes es a1:a60 y el pasado mes fue de a1:a45, como comentaba en este ultimo caso no se ingresan valores pero como el rango esta seleccionado aprecen los datos en blanco y eln el primer mes faltan de incluir.
Saludos
 
Upvote 0
Bueno, lo siguiente parece funcionar bien.

Asumiendo que el nombre del rango es MiRango, se debe cambiar la definición así:

=Hoja1!$A$1:INDICE(Hoja1!$A:$A,COINCIDIR(REPETIR("z",255),Hoja1!$A:$A))

Asumo que la hoja donde están los datos es Hoja1.

Bueno, ahora si el ComboBox ya está "amarrado" a MiRango, ya debería estar funcionando todo...
 
Upvote 0
Perfecto!!!!!!!!!!!!!!!
El error estaba en que el rango es el que era variable.
Mil gracias nuevamente.
Saludos
:D
 
Upvote 0
Hola, he estado intentando aplicar la solucion de este post, ya que tengo un problema similar, pero no consigo saber como se hace exactamente. Podrías detallarmelo un poco mas?

Muchas gracias
 
Upvote 0
Esto es lo que analicé, ojalá te sirva para comprender la formula y donde ponerla:

La lista está en un cuadro de diálogo (formulario entiendo)
La lista tiene la propiedad RowSource vinculada a MiRango

Lo siguiente es suposición mía: debe asignarse el resultado de la fórmula a la variable MiRango para que cada vez que se ejecute el formulario reajuste el tamaño del rango.

Mis limitados conocimientos no me permiten aconsejarte en que parte del formulario poner el código. Ojalá Juan Pablo nos pueda orientar.

Lo que sigue es el desgloce de las fórmulas que empleó, cabe señalar que aún no entiendo cómo es que funciona REPETIR(), aunque ya lo vi funcionar.

MiRango = Hoja1!$A$1:INDICE(Hoja1!$A:$A,COINCIDIR(REPETIR("z",255),Hoja1!$A:$A))

INDICE(matriz,num_fila,num_columna)
COINCIDIR(valor_buscado,matriz_buscada)
REPETIR(texto,num_de_veces)

-*- Escribe esto en una celda

=COINCIDIR(REPETIR("z",255),Hoja1!$A:$A)
Y ve funcionar esta parte de la formula al rellenar la columna A con cualquieras letras, el resultado es el numero del último renglon ocupado OJO: SOLO FUNCIONA CON LETRAS, NO CON NUMEROS.
 
Upvote 0
Hola, lo siento... se me había olvidado responder :P

Bueno, a ver si esto nos sirve:

Primero, en un libro nuevo, tengo una hoja, Hoja1, con una lista de nombres, que es la que utilizaré.

En A1 de esa hoja pongo el título (Solo por ponerlo !), Nombres. En A2, y hacia abajo, comienzo a poner los nombres que me interesan:

Juan
Pablo
Alberto
Natalia
Monica
etc.

Esta lista es la que será "dinámica", es decir, añadiré (Y borraré) nombres más adelante, por lo que la lista tiene que ser "inteligente"...

Presiono Ctrl F3, para abrir el diálogo de Definir Nombre. Ahí, pongo MiRango como el nombre, y en "Se refiere a:" la fórmula

=Hoja1!$A$2:INDICE(Hoja1!$A:$A, COINCIDIR(REPETIR("z", 255), Hoja1!$A:$A))

¿qué hace esta fórmula? bueno, crea un rango así, desde Hoja1!A2 (Que es el primer nombre), hasta el último texto que se encuentre en la columna A. Esto se hace con el INDICE(COINCIDIR()) así:

REPETIR("z", 255) es, alfabéticamente, el texto "más" grande que se puede tener, así que

COINCIDIR(textomuygrande, Hoja1!A:A)

me devuelve su ubicación dentro de la columna A. Para números se utiliza

9.9999999999999E+307

en vez de REPETIR(), porque es el número más grande que se puede tener en Excel.

Como COINCIDIR me devuelve el número de la FILA donde está el texto, utilizo INDICE para que me cree una "referencia" hacia esa celda... mejor dicho, la función INDICE no devuelve un valor, sino que devuelve un Rango ! por eso puedo utilizarlo así:

=INDICE(...):INDICE(...)

o como en este caso, desde una posición conocida hasta la desconocida:

=A1:INDICE(...)

Listo, después de hacer clic en "Agregar", tenemos nuestro rango dinámico creado.

Ahora, vamos a crear el formulario (Userform). Presionamos Alt + F11 para ir al editor de Visual Basic (VBE en Inglés). Ahí, vamos a Insertar | Userform

Nos sale un Userform vacío. Ahora, ahí, vamos a agregar un ComboBox, este tendrá el nombre ComboBox1 que es el que se le asigna por defecto...

Con este ComboBox seleccionado, presionamos F4, para que nos aparezca la ventana de propiedades. Ahí hay una propiedad que se llama RowSource que es un string (texto) que corresponde a la ubicación donde están los datos que aparecerán en el ComboBox. Como nuestra lista está en el rango MiRango, escribimos 'MiRango' sin las comillas ahí.

Listo, ahora hacemos un click en el Userform para activarlo, y presionamos F5 para "ejecutar" el formulario y verlo "funcionando". Ahí debe aparecer el combobox, inicialmente vacío, pero si se hace clic en la flecha para mostrar las opciones, deben aparecer todos los nombres que tenemos en la lista.

Para cerrar el formulario se debe hacer click en la "x". Si se quiere, agreguen o borren nombres a la lista y ejecuten nuevamente el Userform, para ver que funcione...

Saludos !
 
Upvote 0
Gracias Juan Pablo :pary:

Encontré especialmente útil la parte de cómo implementarlo con números, verás, en mi trabajo se manejan grupos de cuentas bancarias que totalizan 1400 y diariamente varía en número por las cancelaciones y nuevas aperturas, ahora con algunos arreglos puedo ayudar a facilitar su administración.

Por cierto que Oscar_Igor fue tan amable de contestarme un mensaje y me proporcionó copia de su archivo como lo implementó.

Mi gratitud para los dos.
 
Upvote 0

Forum statistics

Threads
1,215,092
Messages
6,123,063
Members
449,090
Latest member
fragment

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top