Saltar al contenido

Filtrar listbox utilizando un combo box dinámico


Recommended Posts

publicado

Estimados, esperando que todos se encuentren muy bien en estos días dificiles, les escribo para que puedan ayudarme con vuestro conocimiento respecto al tema del título: Requiero realizar un filtro en un combo box en base a un list box, el cual debe actualizarse cada vez que se ingresa nueva información a la plantilla.

He estado trabajando en base a unos códigos que un canal de excel ha colgado en internet. El tema es han explicado como filtrar un listbox en base a un text box y se me ha ocurrido la idea de hacerlo a través de un combo box. Resultado: No he podido imaginarme como.

Mi primera duda es: Como puedo asignar un RowSource a una columna que va aumentando la cantidad de datos que incluye pero que tampoco se repitan

Mi Segunda duda: Como enlazar el listbox con el combo box, escasamente lo he intentado en el archivo que les adjunto, sin ningún resultado. Lo que busco es filtrar por el número de licitación al cual está asignado cada grupo de limpieza.

Espero puedan ayudarme con la tarea que intento llevar a cabo. Estaré atento a las dudas que aparezcan y a aclarar si es que consideran que mi punto no se entiende.

 

Agradecido de vuestra ayuda,

Saludos desde Chile.

Felipe.

 

 

listbox-combobox.xlsm

publicado

Estimado @JSDJSD, agradezco mucho tu colaboración!

En parte, soluciona una de mis dudas, ya que me has ayudado a lograr que se enlace el filtro por combo box y se filtre en el list box, y que además el combo box sea dinámico cada vez que se agregan nuevos datos.

Me falta otra duda por solucionar: Es muy probable que el nombre de la persona se vuelva a repetir, y solo cambiará la fecha, licitación y programa. En ese caso, he notado que el filtro comienza a repetir los nombres cada vez que vuelven a incluirse en la columna B.

Conoces de algún método en el que se puedan quitar los duplicados para garantizar una búsqueda eficaz? 

Te adjunto el archivo en donde he repetido los mismos nombres.

PS: Noté además, que en el listado del combo box aparece "Persona" como un nombre. Eso lo quitamos con un Offset, verdad? Voy a ver si lo voy solucionando mientras.

Gracias!listbox-comboboxPrueba(1).xlsm

publicado

Estimado @JSDJSD hoy apenas tuve la oportunidad de sentarme y corroborar que si, es exactamente lo que buscada, muchas gracias!! Lo ensayaré en mi archivo y estudiaré que es lo que me faltaba de conocimiento para practicarlo por mi mismo. AGRADECIDO.

publicado

No olvides agradecer a quien te ayuda o intenta ayudar, y en este foro es mediante el corazoncito que hay en la parte inferior derecha

 

publicado
En 19/7/2020 at 1:04 , JSDJSD dijo:

No olvides agradecer a quien te ayuda o intenta ayudar, y en este foro es mediante el corazoncito que hay en la parte inferior derecha

 

JSDJSD intentand adaptar tu aporte a una necesidad

Private Sub ComboBox1_Change()
Dim Filas, i, ii As Integer

With Hoja2
    Filas = .Range("C" & Rows.Count).End(xlUp).Row
    ListBox1.RowSource = ""
    If ComboBox1.Value = "" Then Exit Sub
    ListBox1.AddItem
    For i = 6 To Filas
        If .Cells(i, 6) = ComboBox1 Then
            Me.ListBox1.AddItem .Cells(i, 1)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = .Cells(i, 1).Offset(0, 1) ' Aqui hay que configurar la columa (Columna 2)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = .Cells(i, 1).Offset(0, 2)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = .Cells(i, 1).Offset(0, 3)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = .Cells(i, 1).Offset(0, 4)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = .Cells(i, 1).Offset(0, 5)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = .Cells(i, 1).Offset(0, 6)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = .Cells(i, 1).Offset(0, 7)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = .Cells(i, 1).Offset(0, 8)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 9) = .Cells(i, 1).Offset(0, 9)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 10) = .Cells(i, 1).Offset(0, 10)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 11) = .Cells(i, 1).Offset(0, 11)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 12) = .Cells(i, 1).Offset(0, 12)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 13) = .Cells(i, 1).Offset(0, 13)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 14) = .Cells(i, 1).Offset(0, 14)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 15) = .Cells(i, 1).Offset(0, 15)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 16) = .Cells(i, 1).Offset(0, 16)
        Else
        'No hacer nada
        End If
    Next i

    For ii = 0 To 4
        ListBox1.List(0, ii) = .Cells(1, ii + 1)
    Next ii

End With

End Sub


Private Sub UserForm_Initialize()


With Me.ListBox1
    .ColumnCount = 16
    .ColumnWidths = "20 pt; 120 pt; 50 pt; 60 pt"
    .RowSource = "'" & Hoja2.Name & "'!A5:P" & Hoja2.Range("A" & Rows.Count).End(xlUp).Row
End With

 ComboBox1.RowSource = "'" & Hoja2.Name & "'!C5:C" & Hoja2.Range("C" & Rows.Count).End(xlUp).Row



End Sub

No he sido capaz de comprender esta parte:

For ii = 0 To 4
        ListBox1.List(0, ii) = .Cells(1, ii + 1)
    Next ii

Podrías corregir mis errores.

 

Saludos

JB

publicado
Hace 6 horas, Jose BN dijo:

No he sido capaz de comprender esta parte:


For ii = 0 To 4
        ListBox1.List(0, ii) = .Cells(1, ii + 1)
    Next ii

Este ciclo es simplemente para poner el encabezado en el listbox.

con respecto a lo de adaptar sube tu archivo y comenta lo que necesitas.

publicado
Hace 1 hora, JSDJSD dijo:

Este ciclo es simplemente para poner el encabezado en el listbox.

con respecto a lo de adaptar sube tu archivo y comenta lo que necesitas.

aJSDJSD djunto el archivo.

 

Saludos

CONSUTA LISTBOX.xlsm

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.