Filtrar datos desde otra hoja

Tengo una hoja de excel--hoja 1 donde voy ingresando información de equipos médicos con datos como, activo fijo, equipo, marca, serie, modelo, empresa... Quiero que desde otra hoja--hoja 2 cuando escriba en una celda el nombre de la empresa me filtre todos los equipos que pertenecen a esa empresa.. Anexo dos imágenes con la información.. Muchas gracias

1 Respuesta

Respuesta
1

En el Editor, seleccioná el objeto HOJA2 y allí copiá el siguiente código:

Private Sub Worksheet_Change(ByVal Target As Range)
'se controla lo ingresado en B4
    If Target.Address <> "$B$4" Then Exit Sub
'se borran datos de filtrado anterior
    On Error Resume Next
    If Range("A" & Rows.Count).End(xlUp).Row > 6 Then
        Range("A7:E" & Range("A" & Rows.Count).End(xlUp).Row).ClearContents
    End If
'se filtra y se vuelca en esta hoja
    Call filtraOtraHoja(Target.Value)
End Sub

Luego insertá un módulo y allí copiá el siguiente código. Recordá de ajustar el nombre de las hojas si hiciera falta y el inicio del rango en Hoja1 ya que no se ven tus encabezados y asumí que se inicia en A1.

Sub filtraOtraHoja(dato)
'x Elsamatilde
With Sheets("Hoja1")
'establecer fin de rango para filtrar... la tabla inicia en A1
    filas = .[A1].CurrentRegion.Rows.Count
'se filtra el rango de hoja1
    .Range("$A$1:$G$" & filas).AutoFilter Field:=7, Criteria1:=dato
    'se evalúa si hay datos filtrados.
    x = .Range("A" & Rows.Count).End(xlUp).Row
    If x = 1 Then
        MsgBox "No hay datos filtrados", , "Información"
    Else
        .Range("A2:E" & x).SpecialCells(xlCellTypeVisible).Copy Destination:=[A7]
    End If
End With
End Sub

Si te queda alguna duda solicitame y/o enviame aclaraciones... sino no olvides valorar esta respuesta aunque luego recibas respuestas posteriores :)

En videos 35 y 36 de mi canal podrás encontrar desarrollados otros ejemplos con Filtros.

Elsa muchísimas gracias por la respuesta,,, como puedo hacer para hacer lo mismo pero las columnas donde esta la información no están seguidas en la hoja 1 ej. Equipos columna A, marca columna DE, serie, columna F. Y como hacer para que me quite el filtro si no tengo ningún dato en la celda de empresa.

En tu imagen se ven las col en la misma posición... ;(

Cambia las instrucciones de copiado por éstas otras. Ajusta las letras de columna si hiciera falta.

    Else
        .Range("A2:A" & x).SpecialCells(xlCellTypeVisible).Copy Destination:=[B7]   'equipos ... revisar y ajustar letras de columna
        .Range("D2:D" & x).SpecialCells(xlCellTypeVisible).Copy Destination:=[C7]   'marca   ... revisar y ajustar letras de columna
        .Range("F2:F" & x).SpecialCells(xlCellTypeVisible).Copy Destination:=[D7]   'serie   ... revisar y ajustar letras de columna

Estas mismas líneas podrás repetirlas para copiar otras columnas.

Con respecto a la falta de resultados. Agrega, a la instrucción del mensaje, la siguiente línea:

        MsgBox "No hay datos filtrados", , "Información"
        .Range("$A$1:$G$" & filas).AutoFilter Field:=7

PD) El foro no está enviando aviso ni de respuestas enviadas ni de la solicitud de aclaraciones por parte de Uds. Si te queda alguna duda enviame un correo (aparecen en mi sitio y en mi canal) para no demorar tanto el trámite.

Hola Elsa buenos días, ya me esta funcionando bien para la parte de filtro con el criterio que pongo en la busqueda de la hoja 2..A lo que me refiero no es a la falta de resultados si no que cuando hago un filtro en la hoja 2 y cambio el criterio de búsqueda... En la hoja 1 que es donde tengo los datos me quedan filtrados y debo ir y quitar el filtro manualmente para poder ver todos los datos.. Lo único que me hace falta es que cuando no tenga ningún criterio de búsqueda en la hoja2, en l hoja1 me muestre todos los datos y no tener que ir a seleccionar para mostrar los datos. Anexo imagen de como me queda la hoja1 luego de una busqueda..

Qué pena no haberme enviado un correo... el sitio no nos informa cuando los usuarios solicitan/envían aclaraciones.

Espero que luego de esta respuesta ya quede finalizada y valorada ;)

Se pueden quitar los filtros:

1 - al finalizar el copiado (al final de la macro Sub filtraOtraHoja)

      End With
      Sheets("Hoja1").ShowAllData
      End Sub

2 - o al finalizar la macro del evento Change:

'se filtra y se vuelca en esta hoja
    Call filtraOtraHoja(Target.Value)
    Sheets("Hoja1").Showalldata
End Sub

Te recuerdo que si la hoja queda protegida por alguna instrucción que hayas agregado, para ejecutar esta instrucción primero la tenés que desproteger.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas