Busqueda de datos con filtro personalizado

A los miembros de este foro, en una oportunidad me brindo su apoyo la amiga Elsa Matilde con esta macro el cual permite filtrar la búsqueda de un trabajador "Hoja1" mediante su DNI en desde la pestaña PLANILLA, para lo cual adjunto imagen de la secuencia de la búsqueda que detallo a continuación:

Los DNI en consulta que están en la data son: 18024160 -18023319 - 18024615 y este DNi 18024308 NO ESTO EN LA BASE DE DATOS.

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'se controla lo ingresado en A1,
'si queda vacía no se ejecuta sino se filtra hoja PLANILLA
If Target.Address(False, False) <> "A4" Then Exit Sub
If Target.Value = "" Then Exit Sub
'se limpia la hoja de datos anteriors
Range("B4:G" & Range("B" & Rows.Count).End(xlUp).Row).ClearContents
'se selecciona la celda destino para la copia
Range("B4").Select
'se guarda el dato ingresado para filtrarla la hoja Planilla
dato = Target.Value
Set hpl = Sheets("PLANILLA")
'se guarda cuál es la última fila con datos
fini = hpl.Range("C" & Rows.Count).End(xlUp).Row
'se quitan posibles filtros anteriores y se los establece en fila 7
If hpl.AutoFilterMode = True Then hpl.AutoFilterMode = False
hpl.Range("B7:AR7").AutoFilter
hpl.Range("$B$8:$AR$" & Range("B" & Rows.Count).End(xlUp).Row).AutoFilter Field:=1, _
Criteria1:=dato
'se copia las col C:G de tabla resultante en hoja1
hpl.Range("C8:G" & fini).SpecialCells(xlCellTypeVisible).Copy Destination:=ActiveSheet.Range("B4")
'se copia la col AR de la tabla resultante en col G de hoja1
hpl.Range("AR8:AR" & fini).SpecialCells(xlCellTypeVisible).Copy Destination:=ActiveSheet.Range("G4")
'se muestran todos los datos quedandose en Hoja1
hpl.ShowAllData
ActiveSheet.Range("B4").Select
End Sub

Pestaña donde se encuentra toda la información para la búsqueda:

Acá en la Celda A4 permite ingresar el DNI a buscar desde la pestaña PLANILLA

Muestra información solicitada:

Aquí ya tengo el problema, es que cuando se busca al trabajador que no esta en esta base de datos, emite este error:

Y luego de descuadra la cabecera o se borra a través del error de la imagen anterior

Pero si ingreso ya un DNI que esta en la data, muestra nuevamente la información solicitada.

2 respuestas

Respuesta
2

Si el título de la tabla se encuentra en fila 7 y datos a partir de fila 8, coloca estas instrucciones después del filtrado:

hpl.Range("$B$7:$AR$" & hpl.Range("B" & Rows.Count).End(xlUp).Row).AutoFilter Field:=1, _
Criteria1:=dato
Final = hpl.Range("C" & Rows.Count).End(xlUp).Row
'se copia las col C:G de tabla resultante en hoja1
If Final > 7 Then hpl.Range("C8:G" & Final).SpecialCells(xlCellTypeVisible).Copy Destination:=ActiveSheet.Range("E4")

Desconozco si esta macro sufrió modificaciones pero creo que debieras ajustar la línea donde marco con negrita:

hpl.Range("$B$8:$AR$" & hpl.Range("B" & Rows.Count).End(xlUp).Row).AutoFilter Field:=1, _
Criteria1:=dato

Buenas noches amiga Elsa, hice el cambio respectivo, pero sigo con el mismo error cuando ingreso un DNI el cual no esta dentro de base de datos, adjunto imagen

y cuando un DNI que si esta en la lista, se vuelve a descuadrar:

y cuando a digitar el mismo DNI, si muestra la información, pero sin la cabecera

Crees que seria factible en brindarme tu email, para asi poder enviarte el archivo original.

Gracias, por la ayuda.

Mis correos aparecen en mi sitio que dejo al pie. El buscador aquí me cambia un poco pero sería

Cibersoft punto ar arroba gmail punto com

No olvides adjuntar la macro y recordame tu alias o motivo de consulta.

Hola Elsa, envíe el archivo al email indicado.

[email protected]

Canon Sata

Las respuestas que te envié resolvían tu consulta ;)

Dejo aquí el código marcado con las últimas líneas y te estoy enviando el libro ejecutado.

hpl.Range("$B$8:$AR$" & hpl.Range("B" & Rows.Count).End(xlUp).Row).AutoFilter Field:=1, _
Criteria1:=dato
'se busca el fin del rango filtrado para saber si hay datos
Final = hpl.Range("C" & Rows.Count).End(xlUp).Row
'se copia las col C:G de tabla resultante en hoja1
If Final > 7 Then
    hpl.Range("C8:G" & Final).SpecialCells(xlCellTypeVisible).Copy Destination:=ActiveSheet.Range("B4")
'se copia la col AR de la tabla resultante en col G de hoja1
    hpl.Range("AR8:AR" & Final).SpecialCells(xlCellTypeVisible).Copy Destination:=ActiveSheet.Range("G4")
End If
'se muestran todos los datos quedandose en Hoja1
hpl.ShowAllData
ActiveSheet.Range("B4").Select
End Sub

Sdos!

Buenas noches Elsa, realice los cambios indicados y también descargue el archivo enviado y puede visualizar una pestaña con el nombre Registro encontrado y dentro de esa hoja podre filtrar todos los datos que quiero buscar con DNI y siempre se altera en la pestaña Registro encontrado, con un DNI inexistente. Por lo que primero usaré la pestaña hoja1 para verificar si está o no.

Gracias.

Lamento que la hoja dejada como copia de Hoja1 te haya confundido. Esa hoja (Registro encontrado) no tiene la macro con el ajuste... fue ejecutada con tu macro original y con el nro de doc que habías dejado.

La única macro que debes conservar es la de la Hoja1.

Sdos!

Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas