Accelerer un code

Bonjour

si des fois cela peut vous servir , voici quelqes lignes qui boosterons votre code

sub increas_speed()

Dim xlCalc As XlCalculation

 xlCalc = Application.Calculation

    Application.Calculation = xlCalculationManual

    On Error GoTo CalcBack

    'ici votre code 

    Application.Calculation = xlCalc

    Exit Sub
CalcBack:
Application.Calculation = xlCalc
End Sub

j'ai testé ca a l'air pas mal , la difference est nette

Edit Amadéus: Sujet transféré dans la rubrique "Cours et astuces"

Szlut rocket4 et le forum

Personnellement, je trouve que ta formulation permet de ne pas trop ralentir un code... pas de l'accélérer !

Pour l'accélérer, j'essaie d'utiliser le bon algorithme, le bon raisonnement, de limiter les plages de travail, de sortir de la macro dès que j'ai effectué le traitement voulu et de ne pas utiliser les instructions qui le ralentissent, comme Select/Activate.

A+

Hello,

Je déterre ce post, car à une époque j'ai étudié ce post pour mes travaux, en fait ça n'accélère le code que si la macro fait et utilise des formules calculs sur le classeur.

Dans ce cas là, l'accélération est plus ou moins notable, en fonction du nombre de formules de votre classeur, car vous désactivez le travail de recalcule auto d'Excel.

Sinon il n'y a pas d'effets si vous ne calculer pas sur Excel, mais en VBA ou que vous ne réalisez que des actions mécaniques de copier/coller par exemple.


Application.Calculation = xlCalculationManual => Définit dans l'onglet formule, le mode de calcul par défaut : Manuel à la demande.

En mode normal, le classeur recalcule automatiquement, donc si on prend le code :

xlCalc = Application.Calculation et Application.Calculation = xlCalc

Cela donne => Application.Calculation = Application.Calculation

Soit un retour au mode de calcul par défaut => Application.Calculation = xlCalculationAutomatic

Autant écrire directement : Application.Calculation = xlCalculationAutomatic

En l'état du code proposé à l'époque, il s'agit de désactiver en début de SUB, le calcul auto., pour le réactiver en sortie de SUB.


Dans le cas du 1er post, pour une désactivation du recalcule, en modifiant l'option, le plus simple c'est de faire ça :

Sub increas_speed()
'A placer en début de SUB
Application.Calculation = xlCalculationManual

'L'ensemble de votre code ......  range("A1").select

'A placer à la fin de la SUB et avant chaque sortie de macro
Application.Calculation = xlCalculationAutomatic
End Sub

Après si vous ne souhaitez pas désactiver totalement la fonction recalcule, vous pouvez utiliser l'option de choix de calcul manuel avec la méthode Calculate, qui permet aussi de limiter le calcul au Classeur/Feuille/Plage cellule/Cellule, ainsi, bien qu'en mode manuel, vous effectuerez le calcul une seul fois, dans un espace limité et seulement sur votre action calculate.

Sub increas_speed()
'A placer en début de SUB
Application.Calculation = xlCalculationManual

'L'ensemble de votre code ......  range("A1").select

'Force le calcul d'Excel sur la seule formule cellule A1, pour reprendre la solution dans la suite du code
Range("a1").Calculate

'Suite de votre code ......  range("A1").select

'A placer à la fin de la SUB et avant chaque sortie de macro
Application.Calculation = xlCalculationAutomatic
End Sub

Tableau des options possibles de Calculation :

Nom Valeur Description

xlCalculationAutomatic -4105 Excel contrôle le recalcul.

xlCalculationManual -4135 Le calcul est effectué sur demande de l'utilisateur.

xlCalculationSemiautomatic 2 Excel contrôle le recalcul, mais ignore des modifications apportées aux tableaux.

https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xlcalculation.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1


Application.Calculate, méthode

Pour calculer Exemple

tous les classeurs ouverts Application.Calculate (ou simplement Calculate)

une feuille de calcul particulière Worksheets(1).Calculate

une plage déterminée Worksheets(1).Rows(2).Calculate

https://msdn.microsoft.com/en-us/library/office/ff195517.aspx


Voilà, c'était pour préciser l'utilité du code et du sujet

Rechercher des sujets similaires à "accelerer code"