Mejorar el rendimiento de macro de crear gráfico

Necesito mejorar el rendimiento de macro de crear gráfico, todos los datos de la tabla son a través de fórmulas y demora 27 segundos.

macro

Sub graficandoSeries()
'x Elsamatilde
Range("J11").Select
    ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmooth).Select
    Application.CutCopyMode = False
    'se establece cuál será la ultima serie
    x = 1
    If Range("B3") <> "" Then x = Range("A3").End(xlToRight).Column
    'se agregan las series al gráfico
    For i = 2 To x
    'se arman los rangos para asignarlos a cada serie
        If Cells(4, i) <> "" Then
            ini = 4
        Else
            ini = Cells(3, i).End(xlDown).Row
        End If
        'se establece la última fila de datos según col i
        y = Cells(ini, i).End(xlDown).Row
        rgoy = Range(Cells(ini, i), Cells(y, i)).Address    ' $B$4:$B$20
        rgox = Range(Cells(ini, 1), Cells(y, 1)).Address    ' $A$4:$A$20
    'se crea la serie
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.FullSeriesCollection(i - 1).Name = "=Blad1!" & Cells(3, i).Address
        ActiveChart.FullSeriesCollection(i - 1).XValues = "=Blad1!" & rgoy  '$B$4:$B$20
        ActiveChart.FullSeriesCollection(i - 1).Values = "=Blad1!" & rgox   '$A$4:$A$20
        'las sgtes series se establecen en eje secundario
        If i > 2 Then ActiveChart.FullSeriesCollection(i - 1).AxisGroup = 2
    Next i
        'ubicación de leyeda y configuración de ejes
        ActiveChart.SetElement (msoElementLegendBottom)
        ActiveChart.SetElement (msoElementSecondaryValueAxisNone)
    Range("J7").Select
End Sub

2 Respuestas

Respuesta
3

Intenta con las siguientes instrucciones para ver si mejora algo...

  Application.ScreenUpdating = False
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual
  '
  'el código
  '
  Application.ScreenUpdating = True
  Application.EnableEvents = True
  Application.Calculation = xlCalculationAutomatic
Respuesta
1

Al inicio coloca la instrucción de negrita para pasar el cálculo a manual:

Sub graficandoSeries()

'x Elsamatilde

Range("J11").Select

Application.Calculation = xlCalculationManual

Y antes del End Sub, éstas otras, de paso un mensaje para notificar el finalizado.

Application.Calculation = xlCalculationAutomatic

MsgBox "Fin del proceso.", , "Información"

End Sub

Si tenés algunas macros en los eventos de hojas también debieras colocar:

Application.EnableEvents = False  al inicio y con True antes del End.

No tengo ninguna macro estimada Elsa

Bien, como seleccionas una celda al inicio y otra vez al final, si tuvieses una macro en el evento Selection podría ejecutarse también. Entonces no hace falta inhabilitar los eventos.

Te quedaría entonces al inicio:

Sub graficandoSeries()
'x Elsamatilde
Range("J11").Select
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Y al final, pasas nuevamente el cálculo a automático. El mensaje es opcional.

Application.Calculation = xlCalculationAutomatic
MsgBox "Fin del proceso.", , "Información"
End Sub

Sdos!

Le puedo enviar el archivo y adecuar la macro modifiqué la filas y columnas ahí vi el problema 

Si, puedes. Creo que ya tenés mis correos sino los encontrarás en mi sitio que dejo al pie.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas