Como hacer que mi macro sea más ágil en cuanto a tiempos. (Excel Macros)

Estoy trabajando en lo ultimo con el proyecto que actualmente estoy realizando, tengo ya todos mis procesos y relativamente ya hace todo lo que requiero. El detalle que ahora tengo es que se me ha vuelo un tanto lenta al momento de querer usar ciertos procesos de este proyecto. Ya he buscado información acerca de que puedo hacer, pero los consejos que vienen ya los he hecho y aun así no veo cambio. Si alguien pudiera ayudarme a identificar que procesos puedo cambiar para lograr la agilidad se los agradecería, espero una respuesta.

1 Respuesta

Respuesta
1

Para mejorar la macro tendría que conocerla y hacer pruebas con los datos que tienes.

Envíame tu archivo con la macro y me explicas cómo la debo ejecutar y en qué momento se hace lenta.

Gracias por su respuesta, le he enviado ahora el correo con mi archivo. :)

En el código tienes 6 ciclos que van fila por fila haciendo algo. Cada ciclo empieza en la fila 8 ó 9 y va hasta el final del archivo.

Lo que se puede hacer es poner todo en un solo ciclo. Esto debe mejorar 5 veces el tiempo de la macro. Además los ciclos están utilizando DO WHILE, voy a poner un FOR, para que sea más rápido.

Corrijo el código, lo pruebo y cuando lo tenga listo te lo envío.

me parece bien, en cuanto a los ciclos, unos las manejo para la hoja llamada AVANCE DE ACTIVIDADES y otros para la de AVANCE POR DEPARTAMENTOS. habrá un inconveniente en esto al momento de querer simplificar?

Si son 2 hojas entonces tendrán que ser 2 ciclos uno por cada hoja. Cuando tenga un avance te lo envío para que lo revises.

ok, me agrada la idea, gracias..

Saludos igual :)

Los 3 ciclos para la hoja de actividades quedaron en un ciclo:

Sub pasos1()
'Por.Dante Amor
    Sheets("AVANCE DE ACTIVIDADES").Select
    For i = Range("C" & Rows.Count).End(xlUp).Row To 8 Step -1
        If Cells(i, "A") = "" And Cells(i, "B") = "" Then
            'Eliminar Filas en blanco
            Rows(i).Delete
        Else
            'Eliminar Valores de C a G
            If Cells(i, "A") <> "" And Cells(i, "B") = "" Then
                Range(Cells(i, 3), Cells(i, 7)).ClearContents
            Else
                'Comparacion para poner en rojo
                If Cells(i, 6) > Cells(i, 7) Then
                    Range(Cells(i, 6), Cells(i, 7)).Interior.ColorIndex = 3
                End If
            End If
        End If
    Next
End Sub


Los otros 3 ciclos para la hoja departamentos, también quedaron en un ciclo:

    u = Range("D" & Rows.Count).End(xlUp).Row
    Range("A8:H8").AutoFilter
    ActiveSheet.Range("A8:H" & u).AutoFilter Field:=2, Criteria1:="="
    ActiveSheet.Range("A8:H" & u).AutoFilter Field:=3, Criteria1:="="
    Rows("9:" & u).Delete Shift:=xlUp
    Range("A8:H8").AutoFilter
    u = Range("D" & Rows.Count).End(xlUp).Row
    For i = 8 To Range("D" & Rows.Count).End(xlUp).Row
        If Cells(i, "B") <> "" Then Cells(i, "A") = Cells(i, "B")
        If Cells(i, "C") <> "" Then Cells(i, "A") = Cells(i, "C")
        If Cells(i, 7) > Cells(i, 8) Then
            Range(Cells(i, 7), Cells(i, 8)).Interior.ColorIndex = 3
        End If
    Next

En mis pruebas la macro tarda 3 segundos.

Revisa los resultados y me comentas.


Ya la revise, cargue un reporte nuevo y me tarda 13 segundos.

Cuando usted escoge una hoja con el combobox también tarda 3 segundos?. a mi me tarda 13 segundos, igual que cuando cargo un reporte nuevo.

Perdón, en cargar un archivo nuevo si mejoro. Pero cuando elijo con el combobox, me tarda 12.47 seg :(

En ambos procesos me tarda 3 segundos.

Tal vez tengas que agregar más memoria a tu máquina.

Y también hay que revisar otras cosas que hay en la macro, por ejemplo, la hoja departamentos, tiene 80,000 líneas, no sé en que momento una de las macros ocupa tanto espacio.

Por lo pronto solamente hay 2 ciclos de los 6 que tenías.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas