Una macro que me ayude a buscar un dato o un registro en todo el libro y traerme los datos de la hoja de donde este.

Que tal amigos expertos me podrían ayudar con una macro que me busque un dato de una celda en las distintas celdas del libro y que cuando la encuentre me traiga los datos de esa hoja y me los pegue en la hoja donde se espera el resultado.

1 Respuesta

Respuesta
2

Te anexo la macro, escribe el dato en la celda B3, ejecuta la macro, si encontró el dato te pondrá en la celda C3 el nombre de la hoja y en D3 la celda; si no lo encuentra, te pondrá en C3 el texto "El dato buscado no existe"

Sub BuscarDato()
'Por.Dante Amor
    Set h1 = ActiveSheet
    For Each h In Sheets
        If h.Name <> h1.Name Then
            Set b = h.Cells.Find(h1.Range("B3"), lookat:=xlWhole)
            If Not b Is Nothing Then
                existe = True
                hoja = h.Name
                celda = b.Address
                Exit For
            End If
        End If
    Next
    If existe Then
        [C3] = hoja
        [D3] = celda
    Else
        [C3] = "El dato buscado no existe"
        [D3] = ""
    End If
End Sub

Saludos.Dante Amor

Si es lo que necesitas.

Es buena esa macro pero me gustaría que la macro me busque la palabra o registro en las hojas del libro y me escriba los datos que tenga en la hoja que se encontró, ya que en las hojas hay como una receta de cada producto y quisiera que esta base o receta de materia prima me la arroje en la hoja principal, espero y me ayudes.

Saludos.

Puedes poner un ejemplo de lo tienes en la hojas.

Procura detallar el ejemplo de lo que quieres.

Pon imágenes de tus hojas para que sea más clara tu explicación.

la pagina principal seria así: y quisiera que cuando escriban el código del producto en la celda B9 busquen en las hojas y me pegue la receta a partir de la celda A15 hasta E35.

y abajo se muestran las hojas que tienen las recetas de diferentes productos que muestra la base de la receta así y lo que quisiera que pegara a la hoja principal y dependería de cada receta de producto.

Así está mejor.

Para terminar la macro dime lo siguiente:

1. Lo que voy a buscar es la clave, ¿correcto?

2. Cuántas recetas hay en una hoja, ¿puede haber varias o solamente hay una receta?

3. La clave de la receta en las hojas, ¿siempre está en la celda D1?

1-Si lo que se buscaría es la clave del producto, y si empre la encontraríamos en la misma celda D1.

2-Seria una receta por cada hoja, o si se puede hacer de las dos formas mucho mejor para poder usar cualquiera.

Pon la siguiente macro en los eventos de tu hoja1:

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Target.Address = "$B$9" Then
        For Each h In Sheets
            If h.[D1] = Target Then
                existe = True
                hoja = h.Name
                Exit For
            End If
        Next
        u = Range("A" & Rows.Count).End(xlUp).Row
        If u < 16 Then u = 16
        Range("A16:E" & u).ClearContents
        If existe Then
            u2 = Sheets(hoja).Range("A" & Rows.Count).End(xlUp).Row
            Sheets(hoja).Range("A3:E" & u2).Copy
            [A16].PasteSpecial Paste:=xlValues
        Else
            MsgBox "Esa clave no existe"
        End If
        Target.Select
    End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja1)
  4. Del lado derecho copia la macro

Cada que modifiques la celda B9 de la hoja1, en automático la macro buscará la clave. Solamente buscará una receta por hoja.


Saludos. Dante Amor

Recuerda valorar la respuesta.

Bien era eso lo que deseaba pero ahora, veo que cuando no hay ningún código me aparece parte del texto de arriba y quisiera que eso no sucediera te mando el pantallazo.

Te anexo la macro actualizada

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    Application.ScreenUpdating = False
    u = Range("A" & Rows.Count).End(xlUp).Row
    If u < 16 Then u = 16
    Range("A16:E" & u).ClearContents
    If Target = "" Then Exit Sub
    If Target.Address = "$B$9" Then
        For Each h In Sheets
            If h.[D1] = Target Then
                existe = True
                hoja = h.Name
                Exit For
            End If
        Next
        If existe Then
            u2 = Sheets(hoja).Range("A" & Rows.Count).End(xlUp).Row
            Sheets(hoja).Range("A3:E" & u2).Copy
            [A16].PasteSpecial Paste:=xlValues
        Else
            MsgBox "Esa clave no existe"
        End If
        Target.Select
    End If
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta.

¡Gracias! Bien ahora si ya quedo te lo agradezco saludos.

Una ultima cosa porque doy enter en otra celda diferente a los campos de la base y me borra los datos de la receta.

Cambia la macro por esta

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Target.Address = "$B$9" Then
        u = Range("A" & Rows.Count).End(xlUp).Row
        If u < 16 Then u = 16
        Range("A16:E" & u).ClearContents
        If Target = "" Then Exit Sub
        Application.ScreenUpdating = False
        For Each h In Sheets
            If h.[D1] = Target Then
                existe = True
                hoja = h.Name
                Exit For
            End If
        Next
        If existe Then
            u2 = Sheets(hoja).Range("A" & Rows.Count).End(xlUp).Row
            Sheets(hoja).Range("A3:E" & u2).Copy
            [A16].PasteSpecial Paste:=xlValues
        Else
            MsgBox "Esa clave no existe"
        End If
        Target.Select
    End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas