Buscar contenido de celda en otra hoja

Llevo un montón de tiempo intentando crear una macro, y no lo consigo.

Tengo un libro con muchas hojas particularizadas para cada cliente ("1, 2, 3, 4, ..."), donde en la celda combinada b1:c1, pongo el código de cliente, además de una hoja con el listado general de clientes enumerados. ("listado")

Estoy intentando crear una macro de forma que cuando estoy en la hoja de cualquier cliente, al ejecutar la macro, me busque dicho código en la hoja "listado", y se me posicione en dicha celda. El rango de celdas de la hoja "listado" donde hay que buscar es en la columna A, desde la fila 3 hacia abajo hasta la primera fila en blanco que encuentre.

¿Podéis ayudarme? Lo único que encuentro son búsquedas en listados a partir de textos introducidos en inputbox. Y yo lo quiero es que sea a partir de una celda concreta (siempre la misma: b1:c1, de cada hoja (una hoja para cada cliente).

1 respuesta

Respuesta
1

Te mando mi solución, sigue mis instrucciones:

Copia esta macro en archivo y ejecútala estando en cualquiera de los hojas de los clientes y navegará a la hoja listado posicionándose en su código correspondiente:

Sub prueba()
'Por luismondelo
valor = Range("b1").Value
Set busca = Sheets("listado").Range("a3:a" & Sheets("listado").Range("a65000").End(xlUp).Row).Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
busca.Select
End If
End Sub

recuerda finalizar y puntuar

Hola experto y muchas gracias por tu respuesta.

Sin embargo, no me funciona. Se me para en "busca.select"

Dice error 1004, en el método select de la clase range

¿Qué puede pasar?

Gracias.

Utiliza la macro así

Sub prueba()
'Por luismondelo
valor = Range("b1").Value
Set busca = Sheets("listado").Range("a3:a" & Sheets("listado").Range("a65000").End(xlUp).Row).Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
ubica = busca.address
range(ubica).Select
End If
End Sub

recuerda finalizar

Te mando un saludo

Gracias de nuevo por tu rapidez.

Ahora sí me funciona.

¿Pero cómo hago para volver a la hoja de la que partí? El caso es que necesito copiar unos datos de ella en la fila localizada en el "listado"?

Creo que sabiendo cómo vuelvo a esa hoja, el resto lo sabré hacer yo, y no te molestaré más.

Saludos!

Entonces la macro sería algo así:

En mi ejemplo estoy copiando el rango B2:F2 a la hoja listado en la linea del buscado.

Sub prueba()
'Por luismondelo
valor = Range("b1").Value
Set busca = Sheets("listado").Range("a3:a" & Sheets("listado").Range("a65000").End(xlUp).Row).Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
ubica = busca.address
range("b2:f2").copy destination:=sheets("listado").range(ubica).offset(0,1)
End If
End Sub

Fenómeno!

Las dos últimas cosas para terminar.

¿Cómo hago para que lo que copia sean los valores y no las fórmulas?

Y ¿cómo hago para ocultar la hoja cliente?

Gracias.

Para copiar solo los valores sería asi:

Sub prueba()
'Por luismondelo
valor = Range("b1").Value
Set busca = Sheets("listado").Range("a3:a" & Sheets("listado").Range("a65000").End(xlUp).Row).Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
ubica = busca.address
range("b2:f2").copy
sheets("listado").select
range(ubica).offset(0,1).pastespecial:=xlvalues
End If
End Sub

Para ocultar la hoja listado puedes usar esta sentencia:

sheets("listado").hidden=true

Gracias.

Pero me expresé mal. la hoja que quiero ocultar al finalizar es la del cliente en particular, no la hoja listado.

¿Cómo lo hago?

La macro quedaría así:

Sub prueba()
'Por luismondelo
valor = Range("b1").Value
Set busca = Sheets("listado").Range("a3:a" & Sheets("listado").Range("a65000").End(xlUp).Row).Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
ubica = busca.address
range("b2:f2").copy
sheets("listado").select
range(ubica).offset(0,1).pastespecial:=xlvalues
End If
sheets("cliente").visible = false
End Sub

Perdona mi falta de claridad, pero es que hay muchas de hojas clientes, y por tanto no me vale una macro en que haya que escribir el nombre de la hoja cada vez.

Tiene que ser una macro qeu oculte la última hoja de cliente abierta.

Muchas ggracias.

¿Y cuál es la última hoja de cliente abierta?

¿La última hoja de la derecha?

¿Estaremos situados en ella?

Es la que tenemos abierta, y desde la que copiamos los datos en la hoja listado.

Si recuerdas, lo que quería hacer era: desde la hoja del cliente activo, buscar en la hoja listado el nombre del cliente (columna A), y pegar junto a él una serie de datos (a modo de resumen de la hoja del cliente activo).

Te recuerdo que la primera columna del listado, junto a los datos a pegar, lleva el nombre de la hoja del cliente que en ese momento estamos tratando...

Gracias.

Prueba ahora:

La macro se ejecuta estando en cualquiera de las hojas de cliente

Sub prueba()
'Por luismondelo
valor = Range("b1").Value
Set busca = Sheets("listado").Range("a3:a" & Sheets("listado").Range("a65000").End(xlUp).Row).Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
ubica = busca.address
range("b2:f2").copy
sheets("listado").select
range(ubica).offset(0,1).pastespecial:=xlvalues
End If
activesheet.visible = false
End Sub

Hola de nuevo,

EM da un error de sintaxis en:

range(ubica).offset(0,1).pastespecial:=xlvalues

Se está resistiendo...

Te da un error porque no ha encontrado el valor que busca. Te dejo la macro para que no salte el error

Sub prueba()
'Por luismondelo
on error resume next
valor = Range("b1").Value
Set busca = Sheets("listado").Range("a3:a" & Sheets("listado").Range("a65000").End(xlUp).Row).Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
ubica = busca.address
range("b2:f2").copy
sheets("listado").select
range(ubica).offset(0,1).pastespecial:=xlvalues
End If
activesheet.visible = false
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas