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.
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