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

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
- Abre tu libro de excel
- Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
- Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja1)
- 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.

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
- Compartir respuesta
