Limitar las operaciones de una macro

Tengo un excel con una macro que desarrollaste el año pasado y como todos los días recalcula los datos que cada día introduzco se ha vuelto muy lenta la hoja excel. Para el calculo diario necesito los datos de los últimos 5 días y los datos calculados anteriormente solo necesito guardarlos para el histórico a efectos de hacer estudios estadísticos.

No se si me he expresado de manera correcta, pídeme aclaración de lo que creas oportuno.

Respuesta
1

Puedes enviarme tu archivo y me explicas qué haces día con día, para revisar cómo mejorar el desempeño del archivo.

Te recuerdo que tienes pendiente por valorar esta respuesta:

Macro para copiar celdas con condiciones

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “jrsan” y el título de esta pregunta.

S a l u d o s . D a n t e   A m o r

Hola Dante,

Ya he enviado el correo

Un saludo

Javier

Te anexo la macro con las siguientes actualizaciones:

1. Primero, debes seleccionar una celda con la fila a partir de la cual quieres que se inicie el proceso.

2. Cuando inicia la macro te va a preguntar si el número de fila para iniciar es correcto, si presionas que "Sí", la macro inicia; si presionas "No", la macro se detiene.

3. Agregué un contador que te aparecerá en la parte inferior izquierda de la ventana de excel para indicarte en cuál número de fila está procesando del total de filas a procesar.

Sub copiar()
'Por.DAM
    Set h1 = Sheets("Diario")
    Set hh = Sheets("HOJAS")
    u = h1.Range("A" & Rows.Count).End(xlUp).Row
    f = ActiveCell.Row
    res = MsgBox("Es correcto empezar desde la fila: " & f, vbYesNo, "ADVERTENCIA")
    If res = vbNo Then Exit Sub
    '
    Application.ScreenUpdating = False
    Application.StatusBar = False
    For i = f To u
        Application.StatusBar = "Procesando registro: " & i & " de: " & u
        Set b = hh.Columns("A").Find(h1.Cells(i, "K"))
        If Not b Is Nothing Then
            hoja = hh.Cells(b.Row, "B")
            Set h2 = Sheets(hoja)
            For j = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
                If h1.Cells(i, "A") = h2.Cells(j, "A") And _
                   h1.Cells(i, "B") = h2.Cells(j, "D") And _
                   h1.Cells(i, "I") = h2.Cells(j, "B") And _
                   h1.Cells(i, "K") = h2.Cells(j, "C") Then
                    h1.Range("B" & i & ":H" & i).Copy h2.Cells(j, "H")
                    h1.Cells(i, "L") = h2.Cells(j, "T")
                    h1.Cells(i, "M") = h2.Cells(j, "S")
                End If
            Next
        End If
    Next
    Application.StatusBar = False
    Application.ScreenUpdating = True
    MsgBox "Copia termianda", vbInformation, "COPIAR"
End Sub

Otras recomendaciones para que tu archivo no sea tan grande y tarde tanto tiempo en abrir.

- Elimina las hojas que no ocupes.

- Elimina las filas donde tienes fórmulas, pero las fórmulas no reportan resultados ya que las filas están vacías, entonces vuelve a poner las fórmulas solamente cuando tengas los datos en la fila.

- Si una hoja tiene filas hacia abajo que no ocupas, copia solamente los datos a una nueva hoja. Elimina la hoja original, renombra la nueva hoja con el nombre de la original. Nota: Revisa si la hoja original no tiene fórmulas que apunten a otra hoja, en tal caso tendrías que rehacer las fórmulas.

1 respuesta más de otro experto

Respuesta
1

Somos varios los que colaboramos en este foro y en esta categoría... y respondemos varias consultas por día lo que nos dificulta recordar un nombre o una consulta del año pasado... podrías indicar a quién va dirigida esta consulta?

Sdos.

Elsa

Buenos dias Elsa,

Me dirigia a Dante Amor.

Gracias

Javier R.

Bien, no olvides indicarlo en la misma consulta para evitar confusiones.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas