Jump to content

Filtrar listbox utilizando un combo box dinámico


Go to solution Solved by JSDJSD,

Recommended Posts

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

Link to post
Share on other sites

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

Link to post
Share on other sites
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

Link to post
Share on other sites
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.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

Important Information

Privacy Policy