Filtrar datos excel VBA con listbox
Tengo la siguiente hoja de datos para 5 vehículos:http://www.ayudaexcel.com/foro/attachments/ejemplo-jpg.56994/y un código que busca según 5 criterios... Que me es efectivo para buscar los datos en función del texto introducido en el textbox:
Private Sub TXT_BUSCAR_Change()
Me. ListBox1. Clear
Sheets(ComboBox1. Value). Activate ' el combobox1 value es el nombre de la hoja de cada vehículo
If Me.TXT_BUSCAR.Value = Empty Then
MsgBox "Escriba un dato para buscar"
Me.ListBox1.Clear
Me.TXT_BUSCAR.SetFocus
Exit Sub
End If
items = Sheets(ComboBox1.Value).UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
For i = 3 To items
' EL LCASE OBLIGA A QUE EXCEL PONGA TODOS LOS DATOS QUE LEE EN MINUSCULA
' PARA COMPARARLOS ADECUADAMENTE
If LCase(Cells(i, 1).Value) Like "*" & LCase(Me.TXT_BUSCAR.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, 4)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Format(Cells(i, 8), "$#,##0;($#,##0)")
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Cells(i, 10)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Format(Cells(i, 9), "$#,##0;($#,##0)")
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Cells(i, 11)
' FIJATE QUE EL CODIGO ES EL MISMO SOLO CAMBIA EL 1 POR EL 2 EN LA PRIMERA LINEA
' ASI BUSCA EN LA SEGUNDA COLUMNA
ElseIf LCase(Cells(i, 2).Value) Like "*" & LCase(Me.TXT_BUSCAR.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, 4)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Format(Cells(i, 8), "$#,##0;($#,##0)")
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Cells(i, 10)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Format(Cells(i, 9), "$#,##0;($#,##0)")
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Cells(i, 11)
ElseIf LCase(Cells(i, 3).Value) Like "*" & LCase(Me.TXT_BUSCAR.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, 4)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Format(Cells(i, 8), "$#,##0;($#,##0)")
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Cells(i, 10)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Format(Cells(i, 9), "$#,##0;($#,##0)")
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Cells(i, 11)
ElseIf LCase(Cells(i, 9).Value) Like "*" & LCase(Me.TXT_BUSCAR.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, 4)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Format(Cells(i, 8), "$#,##0;($#,##0)")
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Cells(i, 10)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Format(Cells(i, 9), "$#,##0;($#,##0)")
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Cells(i, 11)
ElseIf LCase(Cells(i, 10).Value) Like "*" & LCase(Me.TXT_BUSCAR.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, 4)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Format(Cells(i, 8), "$#,##0;($#,##0)")
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Cells(i, 10)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Format(Cells(i, 9), "$#,##0;($#,##0)")
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Cells(i, 11)
ElseIf LCase(Cells(i, 11).Value) Like "*" & LCase(Me.TXT_BUSCAR.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, 4)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Format(Cells(i, 8), "$#,##0;($#,##0)")
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Cells(i, 10)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Format(Cells(i, 9), "$#,##0;($#,##0)")
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Cells(i, 11)
End If
Next i
'Me.TXT_BUSCAR.SetFocus
'Me.TXT_BUSCAR.SelStart = 0
Me.TXT_BUSCAR.SelLength = Len(Me.TXT_BUSCAR.Text
End Sub
sin embargo cuando doy click para que localice la celda no logro que localice en función de la celda 1 que lo que hace es concatenar el nombre de la empresa y la fecha de la factura (no siempre tengo el numero de la factura a tiempo), al hacer click lo que hace es abrir otro formulario donde arrastra la información de esa fila, y funciona siempre y cuando haya factura, pero no logro que busque en función de la celda concatenada a1 que en este caso sería la más adecuada, pues contiene siempre información. Lo otro es que no logro que ignore las celdas vacias porque en cuanto encuentra la primera se queda en esa fila.
El resto del código de busqueda es así:
Private Sub ListBox1_Click()
Sheets(ComboBox1.Value).Range("c3").Activate
Cuenta = Me.ListBox1.ListCount
Set Rango = Range("A1").CurrentRegion
For i = 0 To Cuenta - 1
If Me.ListBox1.Selected(i) Then
Valor = Me.ListBox1.List(i, 1)
Rango.Find(What:=Valor, LookAt:=xlWhole, After:=ActiveCell).Activate
End If
Next i
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MODIFICAR.busquedaactiva2
MODIFICAR.ComboBox2.Value = BUSQUEDA.ComboBox1.Value
MODIFICAR.Show
Unload Me
End Sub
El código de inicio es este de la userform
Private Sub UserForm_Initialize()
ComboBox1.List = Array("SWX 114", "VLG 222", "VUT 592", "VLV 289", "ZNN 875", "TRF 834")
'Le digo cuántas columnas
ListBox1.ColumnCount = 8
'Asigno el ancho a cada columna
ListBox1.ColumnWidths = "70 pt;70 pt;200 pt;70 pt;70 pt;70 PT;220 PT;2 pt"
End Sub
Me podrían ayudar... Me encuentro algo desesperado y lo necesito de manera urgente... !