Excel - Necesito ayuda sobre macro lenta

 
Vista:
sin imagen de perfil
Val: 179
Ha aumentado su posición en 2 puestos en Excel (en relación al último mes)
Gráfica de Excel

Necesito ayuda sobre macro lenta

Publicado por Jose (80 intervenciones) el 10/11/2020 16:31:09
Hola,
Tengo una plantilla y funcióna todo muy bien.
El problema que tengo: una macro va muy lento.
He seguido y buscado información en varios canales sobre el tema "la macro va muy lento" pero ningúna solución no me ha arreglado el problema.
Os explico:
He utilizado algunos tips para optimizar las macros como lo siguiente:
Al principio de la macro:
1
2
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Al final de la macro:
1
2
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Sin efecto sobre el problema que tengo.
El problema ocure en la hoja "LISTADO" cuando introduzco la fecha en la celda "K7" para obtenere el listado de los desayunos para la fecha deseada.
No entiendo porque tarda tanto y por que ocurre esto.
No soy capaz de dar con la solución.
Adjunto el documento.
Gracias.
Saludos,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Luis
Val: 227
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Necesito ayuda sobre macro lenta

Publicado por Luis (36 intervenciones) el 11/11/2020 09:03:18
Hola, a mi no me parece tan lenta, es verdad que repites muchas veces las mismas instrucciones pero apenas demoran tiempo, solo como consejo primero llama a la función de ordenar y después a la de calcular, aunque tampoco creo que te mejore tanto.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 179
Ha aumentado su posición en 2 puestos en Excel (en relación al último mes)
Gráfica de Excel

Necesito ayuda sobre macro lenta

Publicado por Jose (80 intervenciones) el 11/11/2020 14:24:36
Hola Luis,
Gracias por tu tiempo.
Ire repasando los detalles que me comentas.
Espero lograr lo que me propongo aplicando tu consejos aun que lo dudo mucho.
En futuro esta hoja tendra miles de datos y si ahora me tarda de media 5 segundos, no quiero pensar en cuanto tarda si la lsita aumentara cada día.
Gracias.
Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Necesito ayuda sobre macro lenta

Publicado por JUAN PABLO (62 intervenciones) el 03/06/2021 18:59:34
es por el metodo que usas yo utilizaria el filtro avanzado con VBA es mas rapido asumo que a esta fecha ya lo debes haber solucionado
slds
JPP
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Nolberto
Val: 84
Ha aumentado su posición en 6 puestos en Excel (en relación al último mes)
Gráfica de Excel

Necesito ayuda sobre macro lenta

Publicado por Nolberto (121 intervenciones) el 22/06/2021 02:08:39
Usar las opciones .Select, Copy, CopyToRange hace que el procesamiento de datos sea lento.

Es mejor usar for each, ir comprobando tus condiciones y cuando se cumplan simplemente escribes los datos de las columnas que correspondan hacia la otra hoja con .value, algo así.

1
2
3
4
5
6
7
8
Dim rng as Range
 
Set rng =  Hoja2.Range("A1:K1000")
For each r in rng
    if r = 10 and r.offset(0,3) = "test" then
        Hoja1.Range("A" & sFila).value = r.offset(0,3).value
    end if
Next r

Tambien puedesa usar el ciclo for simple, pero primero conviertes el rango de datos en una matriz, con el for recorres la matriz y cundo se cumplan las condiciones pasas los datos de esta manera:

1
2
3
4
5
6
7
8
Dim matriz() as Variant
 
matriz = Hoja2.Range("A1:K1000").value
For i = 1 to ubound(matriz)
     if matriz(i,1) = 10 and matriz(i,4) = "test" then
        Hoja1.Range("A" & sFila).value = matriz(i,4)
    end if
Next i

trabajar un rango con for each o una matriz de datos con for es abismalmente mas rápido que hacerlo con .Select y Copy
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Necesito ayuda sobre macro lenta

Publicado por Antoni Masana (2477 intervenciones) el 22/06/2021 15:17:48
Como comentan los compañeros no la veo lenta la macro pero todo depende del procesador que tenga cada uno.
Po lo que he deducido de lo que hace la macro yo lo haría de otra forma y seguro que es mucho más rápida.

Me explico:
Cuatro punteros:
uno para el rango B:H
una para el rango K:M
una para el rango N:P
una para el rango Q:S

Y un bucle para recorren el primer rango.
la fecha de la columna F es igual a la fecha de K7 pues lo copio en el rango que toque en función del valor de la columna G

Y olvídate de filtros, ordenar rangos y autofiltros.

Haciendo la macro he visto una cosa que te falta y hace la macro muy lenta porque se llama a si misma muchas veces:

En la macro Private Sub Worksheet_Change(ByVal Target As Range) debes poner al inicio

1
Application.EnableEvents = False

y al final

1
Application.EnableEvents = True

Te adjunto el libro con la macro modificada, ya me contaras si va más rápida.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 179
Ha aumentado su posición en 2 puestos en Excel (en relación al último mes)
Gráfica de Excel

Necesito ayuda sobre macro lenta

Publicado por Jose (80 intervenciones) el 02/07/2021 18:47:13
Cuanto tiempo Antoni,
Como siempre tus aportes me han servido muchísimo.
Agradezco de nuevo tu tiempo y tu ayuda.
Cuídate mucho.
Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 179
Ha aumentado su posición en 2 puestos en Excel (en relación al último mes)
Gráfica de Excel

Necesito ayuda sobre macro lenta

Publicado por Jose (80 intervenciones) el 02/07/2021 18:50:07
Hola Nolberto,
Encantado de conocerte y gracias por tu aporte.
Iré practicando la recomendación que me recomiendas "for each".
Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar