La Web del Programador: Comunidad de Programadores
https://www.lawebdelprogramador.com/foros/Excel/1290185-Copiar-filas-de-varias-hojas-con-condicion-en-otra-diferente.html

Copiar filas de varias hojas con condicion en otra diferente

Copiar filas de varias hojas con condicion en otra diferente

Publicado por Gonzalo (6 intervenciones) el 14/10/2011 14:29:37
Hola,
Llevo investigando por internet y todavía no se si es posible hacer lo siguiente con Excel, os cuento:

Tengo 3 hojas con diferentes columnas e informacion, y quiero añadir en una cuarta hoja solo los registros que sean del mes de agosto (tengo un campo fecha en las 3).
De la primera pestaña quiero 11 campos, de la segunda 10 y de la tercera 3 (q coinciden en nombre con los de la primera pestaña)

He intentando hacerlo con consolidados, haciendo macros y con VBA y empiezo a pensar que no se puede hacer.. Lo he hecho de forma manual, es decir, filtrando y con copy/paste a la 4 pestaña, pero mi objetivo es hacerlo automaticamente, para que copie solo los reg's de las 3 pestñas que contengan el mes mayor.


Podríais echarme una mano.. o al menos, si me decís que es imposible intentaría otras opciones.

Muchas gracias por todo y un saludo!!!!
Imágen de perfil de JuanC

Copiar filas de varias hojas con condicion en otra diferente

Publicado por JuanC (1237 intervenciones) el 14/10/2011 16:06:01
obvio que con macros/VBA se puede...

Saludos, desde Baires, JuanC

Copiar filas de varias hojas con condicion en otra diferente

Publicado por Gonzalo (6 intervenciones) el 14/10/2011 22:08:10
Tendrías algun ejemplo tanto de copiar a otra hoja como de recuperar las fechas cuyo mes+año es el superior de las filas que se tienen en todas las hojas.

Gracias de nuevo
Imágen de perfil de JuanC

Copiar filas de varias hojas con condicion en otra diferente

Publicado por JuanC (1237 intervenciones) el 14/10/2011 22:19:18
amigo, es imposible un ejemplo que se adapte a tu trabajo...
copiar datos es tan simple como asignar un valor a un rango:
Hoja2.Range("A1").Value = Hoja1.Range("B10").Value
deberías hacer algún que otro bucle, algunas condiciones con fechas y poco más...

Saludos, desde Baires, JuanC

Copiar filas de varias hojas con condicion en otra diferente

Publicado por Gonzalo (6 intervenciones) el 17/10/2011 12:55:13
Gracias por contestarme. Lo estoy haciendo de la siguiente forma, con VBA, haciendo un bucle de la hoja 5 y copiando los registros que estan entre los rangos y solo los campos que me interesan en la hoja 6. Funciona pero, de esta manera lo encuentro inviable pues en tratar 5000 reg's tarda más de media hora. He añadido la funcion Application.ScreenUpdating para que no dé pantallazos, ha bajado algo el tiempo pero sigue siendo muy elevado.

Habría forma de optimizarlo ? Muchas gracias por el interés.



Application.ScreenUpdating = False

fechadesde = Fdesde.Value
fechahasta = Fhasta.Value
Sheets(5).Select
Range("A2").Select

x = 2

For i = 2 To 5000
numinci = Cells(i, 1)
If numinci <> "" Then
linnego = Cells(i, 2)
resumen = Cells(i, 3)
notas = Cells(i, 4)
canalentrada = Cells(i, 5)
fechaapertura = Cells(i, 6)
fecharesolucion = Cells(i, 7)
familia = Cells(i, 8)
elemento = Cells(i, 9)
sintoma = Cells(i, 10)
prioridad = Cells(i, 11)
If fechaapertura >= fechadesde And fechaapertura <= fechahasta Then
Sheets(6).Select
Cells(x, 1) = numinci
Cells(x, 2) = linnego
Cells(x, 3) = resumen
Cells(x, 4) = notas
Cells(x, 5) = canalentrada
Cells(x, 6) = fechaapertura
Cells(x, 7) = fecharesolucion
Cells(x, 8) = familia
Cells(x, 9) = elemento
Cells(x, 10) = sintoma
Cells(x, 11) = prioridad
x = x + 1
Sheets(5).Select
End If
End If
Next i

End Sub
Imágen de perfil de JuanC

Copiar filas de varias hojas con condicion en otra diferente

Publicado por JuanC (1237 intervenciones) el 17/10/2011 13:58:56
fijate si con unos pequeños cambios mejora...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Dim s6 As Worksheet, s5 As Worksheet
Dim j%
 
Set s5 = Sheets(5)
Set s6 = Sheets(6)
 
Application.ScreenUpdating = False
Application.EnableEvents = False
 
fechadesde = Fdesde.Value
fechahasta = Fhasta.Value
s5.Activate
Range("A2").Select
 
x = 2
 
For i = 2 To 5000
    numinci = s5.Cells(i, 1)
    If numinci <> "" Then
       If fechaapertura >= fechadesde And fechaapertura <= fechahasta Then
          For j = 1 To 11
              s6.Cells(x, j) = s5.Cells(i, j)
          Next
       x = x + 1
       End If
    End If
Next i
Application.ScreenUpdating = True
Application.EnableEvents = True


Saludos, desde Baires, JuanC

Copiar filas de varias hojas con condicion en otra diferente

Publicado por Gonzalo (6 intervenciones) el 17/10/2011 15:50:06
Lo he puesto igual que tú con esta salvedad :

numinci = s5.Cells(i, 1)
If numinci <> "" Then
fechaapertura = s5.Cells(i, 6) <<=====
If fechaapertura >= fechadesde And fechaapertura <= fechahasta Then

pero no se optimiza, me sigue tardando más de media hora en llegar a contar 5000 registros.

Muchas gracias, sigo haciendo pruebas...
Imágen de perfil de JuanC

Copiar filas de varias hojas con condicion en otra diferente

Publicado por JuanC (1237 intervenciones) el 17/10/2011 16:39:38
no puede tardar tanto... tiene q existir otro problema ajeno al código...

Copiar filas de varias hojas con condicion en otra diferente

Publicado por Gonzalo (6 intervenciones) el 17/10/2011 17:17:13
Sigo haciendo pruebas para aislar el problema. Creo que estoy cerca, resulta que la hoja origen de donde leo la info y recupero los registros que están entre los rangos, es una hoja obtenida por una consulta de datos externos a otra excel habiendo unido dos hojas.

He hecho una prueba rapida, creandome una hoja nueva, haciendo un copy y un paste a la nueva hoja de solo los valores, y teniendo ésta como origen va muy rapido, pero me queda confirmar todo.

Creo que añadiendo a la macro, la creacion de este nuevo worksheet, el copy y pegar solo valores, y q la macro lea solo de esta, va a ser suficiente.

Te diré algo, y muchas gracias por tu ayuda

Copiar filas de varias hojas con condicion en otra diferente

Publicado por Gonzalo (6 intervenciones) el 18/10/2011 17:09:35
Bueno, a menos que te parezca muy extraño lo que te voy a decir, he seguido el siguiente proceso y sigue funcionando excesivamente lento.

- Puesto que mi hoja origen era una hoja creada con Obtener datos externos-Msquery-excel files, he creado una nueva con una copy/paste especial solo de los valores, para tener una hoja lo más simplificada posible.

- Ese ha sido mi origen y sigue tardando mucho tiempo.

-Si una vez copiados esos datos, borro del xlsm la hoja de los datos importados, la carga con los datos filtrados a la nueva pagina practicamente no tarda.

- La conclusión a la que llego es que, existiendo hojas con info obtenidos desde msquery, aunque estas no estén implicadas en el proceso de copia entre hojas, se ralentiza mucho el proceso.

-Ahora me toca idear alguna manera que pueda generar esa hoja resumen, en este mismo excel, pues esas hojas con datos cargados con msquery, me hacen falta.

Un saludo y gracias por todo