Filtrar registros busqueda con 2 criterios. EXCEL VBA

Tengo un código que me permite buscar los datos de una empresa mediante un número único.

El problema que me encuentro ahora es que hay una empresa que tiene el mismo numero (esta una al lado de la otra pero en diferentes calles)
Con el código actual solo me busca por el número único (que este caso no es único).
Me gustaría poder añadir otro criterio a la hora de mostrar los resultados. Una vez se valide el filtro del número que pase otro filtro para el nombre.

La estructura que sigue es la siguiente: (número) + (tipologia) + (nombre)

El ejemplo es este:
504 - CC -TERRASSA - SANT LLORENC (calle Montcau)

504 - CC -TERRASSA - SANT LLORENC (calle Font de les Canyes)

En este caso si busco por numero me salen 2 opciones y cuando pulso encima de cada una me salen los mismos datos porque solo tiene en cuenta el filtro de número. Me gustaría que al introducir el numero salieran las dos opciones pero que cuando hicieras click solo te mostrara los resultados que coincidan con el numero y el nombre.

Este el codigo que carga el listbox donde muestra los resultados.
El listbox se carga si hay algun dato en el label "num_equipament_final" que es donde aparece el numero unico de la empresa

Private Sub list_equipaments_Click()
If Me.num_equipament_final.Caption = "" Then
    Else
    j2 = 1
    Set hojabase2 = ThisWorkbook.Sheets("Dades")
    filas2 = Range("num").CurrentRegion.Rows.Count
    For i2 = 1 To filas2
    If LCase(hojabase2.Cells(i2, j2).Offset(0, 0).value) = LCase(Me.num_equipament_final.Caption) Then
    Me.list_historial.AddItem hojabase2.Cells(i2, j2)
    Me.list_historial.List(Me.list_historial.ListCount - 1, 0) = Format(hojabase2.Cells(i2, j2).Offset(0, 10), "dd/mm/yyyy")
    Me.list_historial.List(Me.list_historial.ListCount - 1, 1) = hojabase2.Cells(i2, j2).Offset(0, 6)
    Me.list_historial.List(Me.list_historial.ListCount - 1, 2) = hojabase2.Cells(i2, j2).Offset(0, 7)
    Me.list_historial.List(Me.list_historial.ListCount - 1, 3) = hojabase2.Cells(i2, j2).Offset(0, 8)
    Me.list_historial.List(Me.list_historial.ListCount - 1, 4) = hojabase2.Cells(i2, j2).Offset(0, 9)
    If hojabase2.Cells(i2, j2).Offset(0, 13) <> "" Then
        Me.list_historial.List(Me.list_historial.ListCount - 1, 5) = Format(hojabase2.Cells(i2, j2).Offset(0, 13), "dd/mm/yyyy")
        Else
        Me.list_historial.List(Me.list_historial.ListCount - 1, 5) = "NO CONFIRMADA"
    diferencia_dies.Caption = ""
    End If
    Else
    End If
    Next i2
End If

lo que pretendo es que me filtre los datos  teniendo en cuenta 2 criterios, el numero y el nombre.
El numero se encuentra en num_equipament_final y el nombre nom_equipament_final

¿Cómo lo podría hacer?

2 Respuestas

Respuesta
1

Esto te puede ayudar

https://youtu.be/bDNE-MWb1q4

https://youtu.be/3LCDc_oxDGU

https://youtu.be/HqQRYceEx84 

En este ejemplo tienes un formulario que ordena por varios criterios y por cualquier cabecera de columna

https://youtu.be/5HXAywHlfNQ

Respuesta
1

Y cuando pulso encima de cada una

Tienes otro código para cuando "pulsas encima".

Puedes poner aquí también ese código.

list_equipaments, ¿Es un botón o es otro listbox o qué es?

Este es el formulario que tengo.

1- Se introduce algún dato para buscar, y los datos se muestran en el list_box (punto 2)

2- Al hacer click sobre el item seleccionado se copian los datos en los labels (punto 3)

3.- Al copiar los datos en el label se carga el listbox (punto 4)
El código que he pasado con anterioridad es el del listbox del punto 4 que se carga mediante el label llamado num_equipament_final (que es el numero 3, en este caso coincide también con el numero del paso)

Los listsbox se llaman list equipaments (el de la izquierda) y list historial (el de la derecha)

El listbox equipaments se carga en los combobox o el texbox de justo arriba (cada objeto tiene su código modificado)y el código esta situado en el evento CHANGE.
Este es el código para cargar el listbox equipaments, en concreto busca el numero y aparecen en el list equipaments

j = 1
Set hojabase = ThisWorkbook.Sheets("Equipaments")
filas = Range("Equipaments").CurrentRegion.Rows.Count
For i = 1 To filas
If LCase(hojabase.Cells(i, j).Offset(0, 0).Value) Like "*" & LCase(Me.num_equipament.Value) & "*" Then
Me.list_equipaments.AddItem hojabase.Cells(i, j)
Me.list_equipaments.List(Me.list_equipaments.ListCount - 1, 2) = hojabase.Cells(i, j).Offset(0, 2)
Me.list_equipaments.List(Me.list_equipaments.ListCount - 1, 3) = hojabase.Cells(i, j).Offset(0, 3)
Me.list_equipaments.List(Me.list_equipaments.ListCount - 1, 1) = hojabase.Cells(i, j).Offset(0, 1)
Else
End If
Next i

Este el codigo del textbox para buscar directamente el nombre y que aparezca en list equipaments los resultados

j = 1
Set hojabase = ThisWorkbook.Sheets("Equipaments")
filas = Range("Equipaments").CurrentRegion.Rows.Count
For i = 1 To filas
If LCase(hojabase.Cells(i, j).Offset(0, 2).Value) Like "*" & LCase(Me.nom_equipament.Value) & "*" Then
Me.list_equipaments.AddItem hojabase.Cells(i, j)
Me.list_equipaments.List(Me.list_equipaments.ListCount - 1, 2) = hojabase.Cells(i, j).Offset(0, 2)
Me.list_equipaments.List(Me.list_equipaments.ListCount - 1, 3) = hojabase.Cells(i, j).Offset(0, 3)
Me.list_equipaments.List(Me.list_equipaments.ListCount - 1, 1) = hojabase.Cells(i, j).Offset(0, 1)
Me.municipi.Value = hojabase.Cells(i, j).Offset(0, 4)
Else
End If
Next i

No puedo reproducir el problema que tienes.

En el ejemplo de la imagen en el listbox list_equipaments, no veo números repetidos.

Además, la carga del list_equipaments la haces de la hoja "Equipaments" pero cuando cargas el list_historial lo haces de la hoja "Dades", son diferentes hojas, ¿entonces en dónde está la duplicidad de datos?

Tengo que ver los datos de las hojas. Podrías enviarme una copia de tu libro con datos de prueba y me dices qué datos debo capturar para que aparezca la duplicidad y qué datos te gustaría mostrar en cada control (listbox, label, etc.)

Mi correo [email protected]

Ya te he enviado el correo, muchas gracias.
Es un poco caótico el código y te pido disculpas por el caos.

El listbox se carga con los datos de todas las empresas que estane en la hoja EQUIPAMENTS.

El segundo listbox busca la empresa seleccionada en la hoja DADES que es donde están todos los datos que se van introduciendo. La finalidad de ese listbox es mostrar los envíos que se han realizado a la empresa seleccionada en el primer listbox.
El problema como podrás comprobar lo tengo al introducir el numero 504. Es una empresa que tiene el mismo numero pero 2 direcciones diferentes

504 - CC -TERRASSA - SANT LLORENC (calle Montcau)

504 - CC -TERRASSA - SANT LLORENC (calle Font de les Canyes)

El segundo listbox, al cargarse solo con el criterio del numero, carga los 2 los resultados de las 2 empresas y es en este donde me gustaría añadir este segundo criterio del nombre.

De nuevo muchas gracias por tu tiempo y por tu ayuda

Perdona se me olvido nombrar que el nombre del form que estamos hablando es FORMULARI

Cambia esta línea

    If LCase(hojabase2.Cells(i2, j2).Offset(0, 0).value) = LCase(Me.num_equipament_final.Caption) Then

Por esta

    If LCase(hojabase2.Cells(i2, j2).Offset(0, 0).Value) = LCase(Me.num_equipament_final.Caption) And _
      LCase(hojabase2.Cells(i2, "C").Offset(0, 0).Value) = LCase(Me.nom_equipament_final.Caption) Then

Gracias Dante, había probado cosas pero no me funcionaban, ahora si que funciona correctamente.

Gracias de nuevo

Me alegra ayudarte. ! Gracias! Por comentar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas