Macro con filtros avanzados para copiar y pegar de diferentes hojas a una sola

Estoy en búsqueda de alguien que me pueda ayduar a corregir mi error en este macro, la idea es que según el número sap, de producto por así decirlo filtre varias tablas en varias hojas y lo pegue en una sola, el problema es que al hacerlo no logo que la información se copie una debajo de la otra si no encima, porque no sé como setear el rango siguiente para que pegue justo debajo del anterior, osea la siguiente fila vacía pero no he podido, no me deja, intenté con la función de Range("C1000", "E1000").End(xlUp).Select pero no he podido hacer que funcione, si alguien pudiera colaborarme por favor, no soy programador es solo un proyecto del trabajo. Adjunto una imagen, quisiera que después de buscar y pegar en la hoja, la siguiente se pegue debajo de la que acaba de pegarse, es una imagen de ejemplo.

El código que tengo es

Application.CutCopyMode = False
Application.CutCopyMode = False
Sheets("Hoja2").Range("Tabla1[#All]").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("Hoja1!Criteria"), copytorange:=Range("C6:E6"), _
Unique:=False
Range("C1000", "E1000").End(xlUp).Select
ActiveCell.Offset(1, -2).Range("C1").Select
Application.CutCopyMode = False
Application.CutCopyMode = False
Sheets("Hoja3").Range("Tabla2[#All]").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("Hoja1!Criteria"), copytorange:=Range("C6:E6") _
, Unique:=False

1 respuesta

Respuesta
3

[Hola Emilio y bienvenido a todoexpertos.

Prueba lo siguiente:

Sub copiardatos()
  Dim lr As Long
  '
  Range("C6:G" & Rows.Count).ClearContents
  lr = 6
  Sheets("Hoja2").Range("Tabla1[#All]").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range("Hoja1!Criteria"), CopyToRange:=Range("C" & lr), Unique:=False
  lr = Range("C" & Rows.Count).End(3).Row + 1
  Sheets("Hoja3").Range("Tabla2[#All]").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range("Hoja1!Criteria"), CopyToRange:=Range("C" & lr), Unique:=False
End Sub

Nota: Cuando copias con el filtro avanzado, también se copian los encabezados.

Prueba y comenta...

Hola  Dante!, muchas gracias he probado y está perfecto, obviamente  con lo de la copia de los encabezados no hay de otra. 

He probado con el código que comentaste y funciona perfecto, ahora quisiera entender un par de cosas para aplicarlo a el archivo oficial, cuando pones que lr=6 ¿por qué específicamente es igual a 6? y por que en 

lr = Range("C" & Rows.Count).End(3).Row + 1 es igual a 3 el valor en paréntesis.

De nuevo muchas gracias, no sabes cuanto te agradezco ya tengo algo que puedo copiar, estudiar y aplicar. 

Te respondo tus dudas:

lr=6 ¿por qué específicamente es igual a 6?

Lr es una variable para almacenar un número de fila, en este caso vale 6, para que empiece a poner los datos en la fila 6 de la hoja.


lr = Range("C" & Rows.Count).End(3).Row + 1

En la variable lr se almacena el último valor con datos de la columna "C".

El (3) entre paréntesis es la forma abreviada de xlUp, es decir, que del total de registros de la hoja (rows. Count), se dirija hacia arriba con (xlUp) ó (3), de la columna "C", obtenga el número de fila (. Row) y le sume 1. De esa manera obtenemos la siguiente fila disponible.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas