Filtrar Listbox con 4 combobox de manera independiente

Necesito de su ayuda por favor... Tengo un listbox y 4 combobox para poder filtrar, en este momento estoy haciéndolo funcionar de manera básica, comparando que los campos a buscar COINCIDAN TODOS para filtrar, bueno, mi consulta es la siguiente...
¿Cómo puedo filtrarlos de manera independiente? ¿Es decir que no necesariamente tenga que llenar todos los combobox para que me arroje coincidencia?

Adjunto mi código por si alguien pudiera ayudarme...

Private Sub CommandButton1_Click()
Dim h2, h1, j, i, e, rut, dv, numrut, nbrelibro, guion, mes, ano, fini, csv, escritorio, l1, l2, f, Fila, k, g
Sheets("machchile").Activate
Sheets("tempo").Activate
Sheets("tempo").Range("a2:o" & Sheets("tempo").Range("a" & Rows.Count).End(xlUp).row + 1).Select
Selection.ClearContents
If DTPicker1 > DTPicker2 Then
MsgBox "¡ LA FECHA INICIAL NO PUEDE SER MAYOR QUE LA FECHA FINAL !", vbExclamation, "Mach Chile Limitada"
Else
If ComboBox1 = "" Then
MsgBox "¡ DEBE SELECCIONAR PROVEEDOR !", vbExclamation, "Mach Chile Limitada"
Else
Set h2 = Sheets("tempo")
Set h1 = Sheets("machchile")
If ComboBox1 <> "" Then
j = h1.Range("a" & Rows.Count).End(xlUp).row
For i = 1 To h1.Range("a" & Rows.Count).End(xlUp).row
k = h2.Range("a" & Rows.Count).End(xlUp).row + 1
If h1.Cells(i, "a") <> "" And h1.Cells(i, "h") = ComboBox1 And h1.Cells(i, "b") = ComboBox2 And h1.Cells(i, "a") >= DTPicker1 And h1.Cells(i, "a") <= DTPicker2 And h1.Cells(i, "f") = ComboBox3 And h1.Cells(i, "g") = ComboBox4 Then
h2.Cells(k, "a") = h1.Cells(i, "a")
h2.Cells(k, "b") = h1.Cells(i, "b")
h2.Cells(k, "c") = h1.Cells(i, "c")
h2.Cells(k, "d") = h1.Cells(i, "d")
h2.Cells(k, "e") = h1.Cells(i, "f")
h2.Cells(k, "F") = h1.Cells(i, "G")
h2.Cells(k, "g") = h1.Cells(i, "h")
h2.Cells(k, "h") = h1.Cells(i, "j")
h2.Cells(k, "i") = h1.Cells(i, "k")
h2.Cells(k, "j") = h1.Cells(i, "l")
h2.Cells(k, "k") = h1.Cells(i, "m")
h2.Cells(k, "l") = h1.Cells(i, "n")
h2.Cells(k, "m") = h1.Cells(i, "o")
h2.Cells(k, "n") = h1.Cells(i, "p")
h2.Cells(k, "o") = h1.Cells(i, "q")

Else
j = j + 1
End If
Next
If Sheets("Tempo").Range("a2") = "" Then
MsgBox "NO SE HAN ENCONTRADO COINCIDENCIAS", vbInformation, "Mach Chile Limitada"
Else
ListBox1.RowSource = "Tempo!a2:o" & Sheets("Tempo").Range("a" & Rows.Count).End(xlUp).row + 1
End If
End If
End If
End If
End Sub

Espero puedan ayudarme... Muchas gracias! (Y)

1 Respuesta

Respuesta
1

H o l a:

Te anexo la macro reestructurada  para filtrar por los combos.

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("machchile")
    Set h2 = Sheets("tempo")
    h2.Range("A2:O" & h2.Range("a" & Rows.Count).End(xlUp).Row + 1).ClearContents
    If DTPicker1 > DTPicker2 Then
        MsgBox "¡ LA FECHA INICIAL NO PUEDE SER MAYOR QUE LA FECHA FINAL !", vbExclamation, "Mach Chile Limitada"
        Exit Sub
    End If
    '
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    u = h1.Range("a" & Rows.Count).End(xlUp).Row
    h1.[A1].AutoFilter
    With h1.Range("A1:Q" & u)
        .AutoFilter Field:=1, Criteria1:=">=" & Format(DTPicker1, "mm/dd/yyyy"), _
             Operator:=xlAnd, Criteria2:="<=" & Format(DTPicker2, "mm/dd/yyyy")
        If ComboBox1 <> "" Then .AutoFilter Field:=8, Criteria1:=ComboBox1
        If ComboBox2 <> "" Then .AutoFilter Field:=2, Criteria1:=ComboBox2
        If ComboBox3 <> "" Then .AutoFilter Field:=6, Criteria1:=ComboBox3
        If ComboBox4 <> "" Then .AutoFilter Field:=7, Criteria1:=ComboBox4
    End With
    '
    k = 2
    For i = 2 To u
        If h1.Rows(i).EntireRow.Hidden = False Then
            h2.Cells(k, "a") = h1.Cells(i, "a")
            h2.Cells(k, "b") = h1.Cells(i, "b")
            h2.Cells(k, "c") = h1.Cells(i, "c")
            h2.Cells(k, "d") = h1.Cells(i, "d")
            h2.Cells(k, "e") = h1.Cells(i, "f")
            h2.Cells(k, "F") = h1.Cells(i, "G")
            h2.Cells(k, "g") = h1.Cells(i, "h")
            h2.Cells(k, "h") = h1.Cells(i, "j")
            h2.Cells(k, "i") = h1.Cells(i, "k")
            h2.Cells(k, "j") = h1.Cells(i, "l")
            h2.Cells(k, "k") = h1.Cells(i, "m")
            h2.Cells(k, "l") = h1.Cells(i, "n")
            h2.Cells(k, "m") = h1.Cells(i, "o")
            h2.Cells(k, "n") = h1.Cells(i, "p")
            h2.Cells(k, "o") = h1.Cells(i, "q")
            k = k + 1
        End If
    Next
    '
    If h2.Range("A2") = "" Then
        MsgBox "NO SE HAN ENCONTRADO COINCIDENCIAS", vbInformation, "Mach Chile Limitada"
    Else
        ListBox1.RowSource = h2.Name & "!A2:O" & h2.Range("A" & Rows.Count).End(xlUp).Row + 1
    End If
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    Application.ScreenUpdating = True
End Sub

En VBA no es necesario declarar las variables, todas las variables se declaran en automático com tipo Variant; solamente en algunos casos es necesario declararlas.


La macro está diseñada suponiendo que en la fila1 tienes tus encabezados, prueba y me comentas.


:) 
Saludos. D a n t e A m o r. Recuerda valorar la respuesta. G r a c i a s
:) 

Definitivamente genial !!!

El codigo funciona excelente y lo mejor de todo es que es casi 1/4 del que tenia yo y que apenas funcionaba de uno por uno... ahora puedo usar los filtros de manera independiente o combinada, en fin... filtrar como yo quiera... no tengo palabras...

Grande Maestro !!! Mil gracias!!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas