Chaque fois que vous mettez à jour une valeur de cellule, Excel passe par un processus pour recalculer le classeur. Lorsque vous travaillez directement dans Excel, vous voulez que cela se produise 99,9% du temps (l'exception étant si vous travaillez avec un classeur extrêmement volumineux). Cependant, cela peut vraiment ralentir votre code VBA. C'est une bonne pratique de définir vos calculs sur manuel au début des macros et de restaurer les calculs à la fin des macros. Si vous devez recalculer le classeur, vous pouvez demander manuellement à Excel de calculer.
Désactiver les calculs automatiques
Vous pouvez désactiver le calcul automatique avec une macro en la définissant sur xlmanual. Utilisez le morceau de code VBA suivant :
1 | Application.Calcul = xlManuel |
Réactiver les calculs automatiques
Pour réactiver le calcul automatique avec le paramètre xlAutomatic :
1 | Application.Calcul = xlAutomatique |
Je recommande de désactiver les calculs automatiques au tout début de votre procédure et de réactiver les calculs automatiques à la fin. Il ressemblera à ceci:
Désactiver l'exemple de macro de calculs automatiques
12345678 | Sub Auto_Calcs_Example()Application.Calcul = xlManuel'Faire quelque choseApplication.Calcul = xlAutomatiqueFin du sous-marin |
Calcul manuel
Lorsque les calculs automatiques sont désactivés, vous pouvez utiliser le Calculer commande pour forcer Excel à recalculer :
1 | Calculer |
Vous pouvez également demander à Excel de recalculer uniquement une feuille de calcul individuelle :
1 | Feuilles de calcul("feuille1").Calculer |
Vous pouvez également dire à VBA de ne recalculer qu'une plage (cliquez pour lire notre article sur les méthodes de calcul VBA)
Voici à quoi cela pourrait ressembler dans une macro :
12345678910111213 | Sub Auto_Calcs_Example_Manual_Calc()Application.Calcul = xlManuel'Faire quelque chose'RecalculerCalculer'Faire plus de chosesApplication.Calcul = xlAutomatiqueFin du sous-marin |
Paramètres VBA - Code d'accélération
Si votre objectif est d'accélérer votre code, vous devriez également envisager d'ajuster ces autres paramètres :
La désactivation de la mise à jour d'écran peut faire une énorme différence en termes de vitesse :
1 | Application.ScreenUpdating = Faux |
La désactivation de la barre d'état fera également une petite différence :
1 | Application.DisplayStatusBar = Faux |
Si votre classeur contient des événements, vous devez également désactiver les événements au début de vos procédures (pour accélérer le code et éviter les boucles sans fin !) :
1 | Application.EnableEvents = False |
Enfin, votre code VBA peut être ralenti lorsqu'Excel essaie de recalculer les sauts de page (Remarque : toutes les procédures ne seront pas impactées). Pour désactiver DisplayPageBreaks, utilisez cette ligne de code :
1 | ActiveSheet.DisplayPageBreaks = False |