pasar datos a otra hoja

07/09/2007 - 08:03 por Cecilia | Informe spam
Hola de nuevo a todos
Tengo un archivo Excel que tiene 6 hojas, la primera contiene datos de
diferentes áreas y lo que quiero es que distinguiendo las áreas, envíe
las filas correspondientes por areas a las demás hojas.
Yo había creado un icono para cada área con la siguiente macro (el
ejemplo sería para el área de frescos):
Sub Area1()
'
' Area1 Macro
' Macro grabada el 29/01/07 por Cecilia
'
Sheets("Cajas").Select
Range("A4:D4").Select
Selection.AutoFilter
Selection.AutoFilter Field:=4, Criteria1:="Frescos"
Range("A4").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("1").Select
Range("A4").Select
ActiveSheet.Paste
Range("A5").Select
Selection.End(xlDown).Select
Sheets("Cajas").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A5").Select
Selection.End(xlDown).Select
Sheets("1").Select
End Sub
Me funciona correcto, es justo lo que quiero hacer, pero el problema
que me surje es que en la página de "Cajas" que es donde estan
alimentadas todas las áreas el volumen ya es muy grande (se usan + o
-
600 filas al mes, ahora mismo va por la fila 4978) y la macro que
hasta ahora era válida, ahora es lentísima (creo que por el volumen
de
datos). Quizás se pueda modificar algo en esta misma macro o crear
otra, pero lo desconozco, no estoy muy suelta en esto.
Muchas gracias.
Un saludo
Cecilia

Preguntas similare

Leer las respuestas

#1 Juan M
07/09/2007 - 17:15 | Informe spam
Hola Cecilia,

La macro que has puesto no debería debería tardar demasiado debido al
volumen de datos, aun así se puede mejorar su rendimiento si evitas
seleccionar los rangos, las hojas...

Te paso una posible mejora de tu código,

Cometas el resultado?

Un saludo,
Juan

Inicio Código

Sub Area1()
Application.ScreenUpdating = False
With Worksheets("Cajas")
.Range("A4:D4").AutoFilter
.Range("A4").AutoFilter Field:=4, Criteria1:="Frescos"
.Range("A4:D" & .Range("A4").End(xlDown).Row).Copy _
Destination:=Worksheets("Hoja2").Range("A1")
.Range("A4").AutoFilter
End With
End Sub

Fin Código

Consulta original





"Cecilia" escribió
Hola de nuevo a todos
Tengo un archivo Excel que tiene 6 hojas, la primera contiene datos de
diferentes áreas y lo que quiero es que distinguiendo las áreas, envíe
las filas correspondientes por areas a las demás hojas.
Yo había creado un icono para cada área con la siguiente macro (el
ejemplo sería para el área de frescos):
Sub Area1()
'
' Area1 Macro
' Macro grabada el 29/01/07 por Cecilia
'
Sheets("Cajas").Select
Range("A4:D4").Select
Selection.AutoFilter
Selection.AutoFilter Field:=4, Criteria1:="Frescos"
Range("A4").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("1").Select
Range("A4").Select
ActiveSheet.Paste
Range("A5").Select
Selection.End(xlDown).Select
Sheets("Cajas").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A5").Select
Selection.End(xlDown).Select
Sheets("1").Select
End Sub
Me funciona correcto, es justo lo que quiero hacer, pero el problema
que me surje es que en la página de "Cajas" que es donde estan
alimentadas todas las áreas el volumen ya es muy grande (se usan + o
-
600 filas al mes, ahora mismo va por la fila 4978) y la macro que
hasta ahora era válida, ahora es lentísima (creo que por el volumen
de
datos). Quizás se pueda modificar algo en esta misma macro o crear
otra, pero lo desconozco, no estoy muy suelta en esto.
Muchas gracias.
Un saludo
Cecilia
Respuesta Responder a este mensaje
#2 Alfredo_espinosa
07/09/2007 - 18:32 | Informe spam
Tu macro tiene muy mal desempeño por la forma de programar, te recomiendo lo
sigueinte:
Primero detecta exactamente los datos que quieres pasar, pero no por filtro,
a menos que sean demasiados.
Luego usa ciclos FOR para pasar los datos a la posición exacta en la otra
hoja.
No uses Select, haz la referencia directa a la hoja y rango, por ejemplo:
Para tomar un valor usa: Valor=Sheets("Cajas").Range("A4")
Para asignar un valor usa: Sheets("1").Range("A5")=Valor
Si quieres meter una lectura/escritura en un ciclo, no uses Range, mejor usa
Cells

De esta manera no usas las funciones de la interfaz de Excel y todo los
programas tu, es mucho más eficiente.


"Cecilia" escribió:

Hola de nuevo a todos
Tengo un archivo Excel que tiene 6 hojas, la primera contiene datos de
diferentes áreas y lo que quiero es que distinguiendo las áreas, envíe
las filas correspondientes por areas a las demás hojas.
Yo había creado un icono para cada área con la siguiente macro (el
ejemplo sería para el área de frescos):
Sub Area1()
'
' Area1 Macro
' Macro grabada el 29/01/07 por Cecilia
'
Sheets("Cajas").Select
Range("A4:D4").Select
Selection.AutoFilter
Selection.AutoFilter Field:=4, Criteria1:="Frescos"
Range("A4").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("1").Select
Range("A4").Select
ActiveSheet.Paste
Range("A5").Select
Selection.End(xlDown).Select
Sheets("Cajas").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A5").Select
Selection.End(xlDown).Select
Sheets("1").Select
End Sub
Me funciona correcto, es justo lo que quiero hacer, pero el problema
que me surje es que en la página de "Cajas" que es donde estan
alimentadas todas las áreas el volumen ya es muy grande (se usan + o
-
600 filas al mes, ahora mismo va por la fila 4978) y la macro que
hasta ahora era válida, ahora es lentísima (creo que por el volumen
de
datos). Quizás se pueda modificar algo en esta misma macro o crear
otra, pero lo desconozco, no estoy muy suelta en esto.
Muchas gracias.
Un saludo
Cecilia


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida