Accélerer l'execution d'une macro ?
Une fois que l'on devient familier avec VBA, on construit vite des macros un peu longues, et, tôt
ou tard, on se trouve confronté à un problème de vitesse d'execution.
Les macro fonctionnent bien, mais, si elles allaient un peu plus vite, ce serait encore mieux !
Pas de remède miracle, mais une série de petites précautions qui peuvent
tout changer :
- Il est généralement inutile de sélectionner la cellule sur laquelle on souhaite intervenir :
Plutôt que d'écrire
Range("D8").Select
ActiveCell.FormulaR1C1 = "5"
...comme nous y incite l'enregistreur de macros, il est plus efficace d'écrire :
Range("D8")=5
- De même, il est souvent inutile de sélectionner un onglet, voire un classeur :
Remplacer
Windows("Classeur2").Activate
Range("C9").Select
Sheets("Feuil3").Select
Range("C12").Select
ActiveCell.FormulaR1C1 = "toto"
Range("C13").Select
Windows("Classeur1").Activate
par Workbooks("Classeur2").Sheets("Feuil3").Range("C13") = "toto"
- Si on doit absolument sélectionner des feuilles, des plages..., il est préférable de
n'en rien voir : il suffit de démarrer la macro par Application.ScreenUpdating = False et de la terminer par Application.ScreenUpdating = True.
L'écran ne se met pas à jour à chaque modification de la feuille Excel, ce qui peut gagner beaucoup de temps.
Plus radical encore, on peut même masquer complètement l'application en cours avec
Application.Visible = False (et la faire réapparaître en fin de macro par Application.Visible = True).
- Autre source de perte de temps, les calculs dans les feuilles Excel.
Quand on remplit par VBA un tableau de données qui sert à faire des calculs dans la feuille Excel,
il vaut mieux éviter de calculer l'ensemble de la feuille (voire du... ou des classeurs) à chaque entrée de
nouvelle donnée.
Application.Calculation = xlCalculationManual permet d'éviter les calculs, Application.Calculation = xlCalculationAutomatic les rétablit.
Attention toutefois aux conséquences éventuelles du calcul retardé !
On peut également limiter le nombre de calculs effectués par formule dans la
feuille de calcul et privilégier les calculs réalisés par macro (seul le résultat est inscrit dans la feuille de calcul).
Enfin, il est bon de limiter, dans les feuilles de calcul, les formules compliquées consommatrices de temps (notamment les formules matricielles, les SI...).
- Enfin, construire la macro de manière à limiter le nombre de boucles (For Next, GoTo...) et les conditions (If...).
L'utilisation de fonctions de feuille de calcul permet souvent d'éviter des bouckles ou des conditions.
L'utilisation de fonctions API ou de macro Excel4, d'execution rapide, permet également de gagner du temps.