Cómo creo el siguiente macro?

Tengo un libro con varias hojas. Lo que necesito es que al ingresar un nombre en la hoja 1 (en la celda E3 por ejemplo), lo busque en el resto de las hojas del libro (las siguientes 9 hojas), en todas dentro del rango B7:F38.

Si lo encuentra, necesito que lo pegue en la misma celda pero de la hoja 1. Por ejemplo, si al ingresar el nombre "juan" en la celda E3 de la hoja 1, lo encuentra en la D7 de la hoja 2 y en la C19 de la hoja 3, que luego copie esa información y la pegue en las mismas celdas que lo encontró, D7 y C19, pero de la hoja 1.

Necesito que el procedimiento funcione para cualquier nombre que se escriba en la celda de búsqueda en la hoja 1 (E3 en el ejemplo)

1 respuesta

Respuesta
2

[Hola 

Valorar ++excelente para finalizar

si tienes dudas consulta


Te paso la macro 

Sub buscar()
    p = False
    Set h1 = Sheets("Hoja1")
    For Each h In ThisWorkbook.Sheets
        If h.Name <> "Hoja1" Then
        h.Select
            Set b = h.Range("B7:F38").Find(h1.[E3], Lookat:=xlWhole)
            If Not b Is Nothing Then
                p = True
                h.Range(b.Address).Copy h1.Range(b.Address)
                Exit For
            End If
        End If
    Next h
    h1.Select
    If p = False Then MsgBox "el dato no existe": Exit Sub
End Sub

Hola, muchas gracias por la respuesta.

Por algún motivo no funciona. No sale ningún error pero luego al ejecutarla no pasa nada. 

Qué puede ser? 

Muchas gracias nuevamente

Saludos

Valorar ++excelente que está en la parte inferior para finalizar


Te paso la macro con algunos ajustes y el archivos con la macro en funcionamiento

Sub buscar()
    p = False
    Set h1 = Sheets("Hoja1")
    '
    If h1.[E3] = "" Then
    MsgBox "Ingrese un nombre a buscar"
    h1.[E3].Select
    Exit Sub
    End If
    '
    For Each h In ThisWorkbook.Sheets
        If h.Name <> "Hoja1" Then
        h.Select
            Set b = h.Range("B7:F38").Find(h1.[E3], Lookat:=xlPart)
            If Not b Is Nothing Then
                p = True
                h.Range(b.Address).Copy h1.Range(b.Address)
                MsgBox "Nombre encontrado en la hoja: " & h.Name
                Exit For
            End If
        End If
    Next h
    h1.Select
    If p = False Then MsgBox "el nombre no existe": h1.[E3].Select: Exit Sub
End Sub

'


Link de descarga

https://www.dropbox.com/s/jjohp9sgy6fqi5c/Prueba.xlsm?dl=0 

Hola, perdón por la demora en la respuesta, y desde ya muchísimas gracias!

Sigo teniendo un inconveniente, y es que utilizando el archivo con la macro en funcionamiento me pasa que los nombres pueden estar indistintamente en cualquiera de las hojas y en varias al mismo tiempo (nunca coincidiendo en la celda), pero si lo encuentra por ejemplo en la hoja 2, no sigue buscando en las siguientes.

Cómo puedo solucionar esto?

Muchas gracias nuevamente

Saludos!

valora la respuesta como ++excelente saludos..

va la macro actualizada

Sub buscar()
    p = False
    Set h1 = Sheets("Hoja1")
    '
    If h1.[E3] = "" Then
    MsgBox "Ingrese un nombre a buscar"
    h1.[E3].Select
    Exit Sub
    End If
    '
    For Each h In ThisWorkbook.Sheets
        If h.Name <> "Hoja1" Then
        h.Select
            Set r = h.Range("B7:F38")
            Set b = r.Find(h1.[E3], Lookat:=xlPart)
            If Not b Is Nothing Then
                p = True
                ncell = b.Address
                Do
                    b.Select
                    h.Range(b.Address).Copy h1.Range(b.Address)
                    Set b = r.FindNext(b)
                Loop While Not b Is Nothing And b.Address <> ncell
            End If
        End If
    Next h
    h1.Select
    If p = False Then MsgBox "el nombre no existe": h1.[E3].Select: Exit Sub
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas