Macro buscar copiar y pegar

Hola Elsa
Basándome en una macro realizada por ti para otra respuesta, la he adaptado a mi hoja y me funciona, pero necesitaría varias cosas:
1º que me aclararas algunas lineas (las pongo en negrita y cursiva)
2º necesito que al principio me quite los filtros si los hay de la hoja1 (no he sido capaz de poner la instrucción)
3º que pueda ejecutarla en cualquier hoja, actualmente está para que se ejecute en la hoja2 y necesito que se ejecutara en cualquier hoja del libro.
La hoja con datos tiene 1100 lineas y 28 columnas
Te adjunto la macro
Gracias y saludos
Sub Rectángulo1_AlHacerClic()
'limpia rango de datos anteriores
Application.ScreenUpdating = False
ActiveSheet.Range("A1:AB100").Clear  'BORRA DONDE SE VA A COPIAR
crit = ActiveSheet.Range("AD4").Value    ' EL DATO A BUSCAR LO TOMA DE AD4
Sheets("Hoja1").Select 'SELECCIONA LA HOJA1
ActiveSheet.Range("AB4").Select
Selection.AutoFilter
'ajustar rango total a filtrar. Field:= indica la col a filtrar
ActiveSheet.Range("$A$1:$F$70").AutoFilter Field:=2, Criteria1:=crit '(da lo mismo el rango que ponga funciona igual)
'copia el rango filtrado y lo lleva a la hoja 2, a partir de A1
ActiveSheet.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
Sheets("Hoja2").Select
ActiveSheet.Range("A1").Select 
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveSheet.Range("A1").Select
End Sub

1 respuesta

1
Respuesta de
Hola:
Te aclaro las líneas en negrita:
Sheets("Hoja1").Select 'SELECCIONA LA HOJA1
ActiveSheet.Range("AB4").Select     'alguna celda hay que seleccionar al entrar a la hoja, da lo mismo cuál sea
---------------------------------------
'ajustar rango total a filtrar. Field:= indica la col a filtrar
ActiveSheet.Range("$A$1:$F$70").AutoFilter Field:=2, Criteria1:=crit
aquí solo estás filtrando ese rango, te sugiero ajustarlo o dejarlo vacío.
F es la col 6. Tengo entendido que tenés 28. Si no hay col vacías entre ellas, solo seleccioná en línea negrita anterior alguna celda de la fila1 y que esté en el rango de las 28 col
ActiveSheet.Range("A1").Select
Selection.AutoFilter Field:=2, Criteria1:=crit
---------------------------------
'copia el rango filtrado y lo lleva a la hoja 2, a partir de A1
ActiveSheet.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
Esta línea indica que se copien solo las celdas visibles, es decir las filtradas.
-----------------------------
Application.CutCopyMode = False    'quita el modo de copiado, el parpadeo en las celdas copiadas
 
ActiveSheet.Range("A1").Select      'vuelve a la celda A1 de la hoja activa, que según líneas anteriores es la hoja2

Para trabajar con cualquier hoja, solo debes reemplazar sus nombres por ActiveSheet (cuando se trata de la hoja desde donde se llamó a la rutina) y de alguna manera tenés que indicarle la 2da hoja.
Espero te sirvan estas aclaraciones. Podes obtener más información básica en mi página de macros y además te recomiendo mi manual de Programación VBA.
Sdos
Elsa



Muchas gracias Elsa por las aclaraciones.
Me faltaría, como te decía, cómo quitar los filtros de la hoja donde busco si es que los tuviera puestos.
Gracias
Con esta instrucción los colocás en col B
Selection.AutoFilter Field:=2, Criteria1:=crit
Entonces con esta otra los quitás:
Selection.AutoFilter Field:=2
Sdos
Elsa
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas del tema Microsoft Excel o hacer tu propia pregunta: