TL;DR —
Application.Calculation = xlCalculationManualdit à Excel de cesser de recalculer après chaque écriture et de différer tout le recalcul en une seule passe. Sur un classeur chargé de formules, c'est l'interrupteur qui rend vraiment une macro rapide — bien plus que la mise à jour de l'écran. Mais c'est le levier le plus dangereux de VBA : laissez-le en manuel par erreur et les formules cessent tout simplement de se mettre à jour, sans aucun indice visuel, si bien que le classeur affiche des nombres périmés et faux. Sauvegardez l'état, rétablissez-le dans un gestionnaire d'erreurs, et ne laissez jamais cela au hasard :
Sub FastCalc()
Dim savedCalc As XlCalculation
savedCalc = Application.Calculation ' memoriser ce qu'il ETAIT
Application.Calculation = xlCalculationManual ' cesser de recalculer apres chaque ecriture
On Error GoTo CleanExit
' ... des milliers d'ecritures, aucun recalcul entre-temps ...
Application.Calculate ' forcer un seul recalcul quand vous avez besoin des resultats
CleanExit:
Application.Calculation = savedCalc ' retablir l'etat SAUVEGARDE, pas Automatic aveuglement
End Sub
Chaque fois que votre macro écrit dans une cellule, Excel recalcule toute la chaîne de dépendances que cette cellule alimente. Sur un classeur aux formules lourdes, ce recalcul — et non l'écran — est le vrai goulot d'étranglement. Le mode manuel laisse des milliers d'écritures se poser d'abord et ne recalcule qu'une seule fois. Ce guide repose sur une seule idée — Calculation est l'interrupteur qui achète la vitesse, et celui que vous ne pouvez jamais vous permettre de laisser désactivé, car sa défaillance est invisible. Saisissez cette asymétrie et vous le traiterez avec le respect qu'il exige.
Ce que vous allez apprendre
- Le modèle mental — chaque écriture déclenche un recalcul complet ; le mode manuel le diffère en une seule passe
- Pourquoi c'est le vrai gain de vitesse sur les classeurs chargés de formules (et pas ScreenUpdating)
- La règle qui compte le plus — un état manuel résiduel affiche des nombres périmés sans le moindre avertissement
- Forcer un recalcul en plein milieu avec
Application.Calculatequand une étape ultérieure a besoin d'un résultat - Rétablir l'état sauvegardé, pas coder
xlCalculationAutomaticen dur - L'
error 1004que vous obtenez en réglant Calculation sans classeur ouvert
Le modèle mental : chaque écriture déclenche un recalcul
Le comportement par défaut d'Excel est xlCalculationAutomatic : dès qu'une cellule change, Excel
recalcule chaque formule qui en dépend, de façon transitive. En interactif, c'est exactement ce que
vous voulez — vous tapez un nombre et les totaux se mettent à jour. Mais à l'intérieur d'une macro qui
écrit 10 000 cellules, Excel exécute le recalcul complet des dépendances jusqu'à 10 000 fois, et sur un
vrai modèle chaque passe peut toucher des milliers de formules.
Application.Calculation = xlCalculationManual rompt ce lien. Les écritures se posent dans les
cellules, mais Excel ne recalcule pas tant que vous ne le lui demandez pas (ou que l'utilisateur
n'appuie pas sur F9). Vous faites toute l'écriture à bas coût, puis vous déclenchez un seul recalcul
à la fin.
Application.Calculation = xlCalculationManual
Range("A1:A10000").Value = someArray ' 10000 valeurs ecrites, zero recalcul
Application.Calculate ' un seul recalcul, une seule fois
Les trois états sont xlCalculationAutomatic, xlCalculationManual et xlCalculationSemiautomatic
(automatique sauf pour les tables de données). Pour les macros, seuls les deux premiers vous importent.
Pourquoi c'est le vrai gain de vitesse
Il existe une hiérarchie des interrupteurs de vitesse des macros, et les gens les saisissent dans le
mauvais ordre. ScreenUpdating est le plus connu, mais il ne supprime
que les redessins de l'écran. Sur un classeur plein de VLOOKUP, de SUMIFS, ou de fonctions
volatiles comme OFFSET et INDIRECT, le redessin est négligeable à côté du recalcul. Désactivez
ScreenUpdating seul et une macro limitée par le calcul accélère à peine ; désactivez Calculation et
elle peut passer de plusieurs minutes à quelques secondes. Si vous ne réglez qu'un seul interrupteur
sur un classeur chargé de formules, réglez celui-ci. Les deux ensemble — plus l'écriture de tableaux
entiers au lieu d'une boucle cellule par cellule — forment la recette classique de la macro rapide.
La règle qui compte le plus : un état manuel résiduel est silencieux
Voici pourquoi Calculation est l'interrupteur dangereux. Quand
ScreenUpdating est laissé désactivé, vous le voyez — l'écran est
figé. Quand Calculation est laissé en manuel, vous ne voyez rien. Le classeur paraît tout à fait
normal. Mais chaque formule est figée à sa dernière valeur calculée. Quelqu'un modifie une entrée, le
total ne change pas, et soit il s'en aperçoit bien plus tard, soit — pire — il ne s'en aperçoit pas, et
il envoie un rapport bâti sur des nombres périmés.
C'est l'état résiduel le plus dommageable de tout VBA, précisément parce qu'il n'y a aucun symptôme jusqu'à ce que quelqu'un se fie à un chiffre faux. La discipline est donc plus stricte que pour les interrupteurs cosmétiques : rétablissez-le toujours, et rétablissez-le dans un gestionnaire d'erreurs, pour qu'un plantage en plein milieu ne puisse pas bloquer le classeur en manuel.
' FRAGILE - si la boucle plante, le calcul reste bloque en manuel et chaque
' formule du classeur cesse silencieusement de se mettre a jour :
Application.Calculation = xlCalculationManual
DoRiskyWork
Application.Calculation = xlCalculationAutomatic ' jamais atteint en cas d'erreur
Le correctif est le motif CleanExit du TL;DR : On Error GoTo CleanExit, et rétablissement dans
l'étiquette. Voir VBA On Error pour le traitement complet.
Rétablir l'état sauvegardé, pas un Automatic codé en dur
Presque tous les tutoriels terminent la macro par Application.Calculation = xlCalculationAutomatic.
C'est un bug déguisé. L'utilisateur a peut-être délibérément mis le classeur en mode manuel — les
modèles lourds sont souvent laissés en manuel pour qu'ils ne recalculent pas à chaque frappe. Votre
macro s'exécute, et voilà que vous avez basculé son classeur en automatique en silence, déclenchant
justement les lents recalculs qu'il évitait.
Le bon motif consiste à sauvegarder ce que vous avez trouvé et à le rétablir :
Dim savedCalc As XlCalculation
savedCalc = Application.Calculation ' peut etre Manual ou Automatic
Application.Calculation = xlCalculationManual
' ... travail ...
Application.Calculation = savedCalc ' laisser le classeur tel que vous l'avez trouve
Une macro doit rendre l'environnement dans l'état qu'elle a emprunté, pas dans celui qu'elle a présumé. C'est la même habitude de « sauvegarde et rétablissement » qui tient à distance le scintillement des appels imbriqués de ScreenUpdating.
Forcer un recalcul quand une étape ultérieure a besoin d'un résultat
Le mode manuel a un second piège qui n'a rien à voir avec son rétablissement. Si votre macro écrit des formules puis lit les résultats que ces formules produisent, les lectures seront périmées — les formules n'ont pas encore recalculé.
Application.Calculation = xlCalculationManual
Range("B1").Formula = "=SUM(A1:A100)"
Debug.Print Range("B1").Value ' perime - B1 n'a pas encore recalcule
Application.Calculate ' recalculer maintenant
Debug.Print Range("B1").Value ' correct
Chaque fois qu'une étape ultérieure dépend d'une valeur qu'une écriture antérieure aurait dû calculer,
appelez d'abord Application.Calculate (toute l'application), ActiveSheet.Calculate (une feuille) ou
Range.Calculate (une plage). En mode manuel, les résultats ne sont frais que jusqu'à votre dernier
appel à Calculate.
L'error 1004 sans classeur ouvert
Un dernier piège : Application.Calculation ne peut être défini que lorsqu'un classeur est ouvert. Le
définir depuis un complément ou une routine de démarrage alors qu'aucun classeur n'existe lève
l'error 1004 d'exécution. Si votre code s'exécute tôt dans le cycle de vie d'Excel, protégez-le avec
If Workbooks.Count > 0 Then avant de toucher la propriété.
Comment ExcelMaster aide
Calculation offre le plus grand gain de vitesse des trois interrupteurs et porte le plus grand
risque. L'utiliser correctement suppose de sauvegarder l'état antérieur, de forcer un recalcul quand
une étape ultérieure lit le résultat d'une formule, de rétablir l'état sauvegardé dans un gestionnaire
d'erreurs, et de savoir qu'il peut lever l'error 1004 sans classeur ouvert. Manquez l'un de ces
points et vous obtenez soit un plantage, soit — pire — un classeur rempli de nombres périmés en
silence.
ExcelMaster gère le motif
complet à votre place. Décrivez le travail — « recalcule ce modèle après avoir mis à jour les
hypothèses » — et il passe en mode manuel, effectue les écritures, appelle Application.Calculate
exactement là où un résultat est nécessaire, et rétablit l'état de calcul de départ à l'intérieur d'un
gestionnaire CleanExit. Le classeur revient exactement tel que l'utilisateur l'a laissé, en plus
rapide seulement.
Questions fréquentes
Que fait Application.Calculation = xlCalculationManual ?
Cela empêche Excel de recalculer les formules automatiquement après chaque changement. Les écritures se
posent toujours dans les cellules, mais aucune formule ne recalcule tant que vous n'appelez pas
Application.Calculate ou que l'utilisateur n'appuie pas sur F9. Sur un classeur chargé de formules,
c'est le plus grand gain de vitesse à la portée d'une macro, car il remplace des milliers de recalculs
par un seul.
Pourquoi mes formules ont-elles cessé de se mettre à jour après l'exécution d'une macro ?
Presque à coup sûr, la macro a mis Application.Calculation = xlCalculationManual sans le rétablir —
souvent parce qu'elle a planté avant la ligne de rétablissement. Le classeur est maintenant en mode
manuel, si bien que les formules conservent leur dernière valeur calculée sans aucun indice visuel.
Mettez Application.Calculation = xlCalculationAutomatic (ou appuyez sur F9), et dans votre code
rétablissez le réglage dans un gestionnaire d'erreurs pour qu'il ne puisse plus rester bloqué.
Dois-je remettre Calculation à Automatic ou à son état précédent ?
Rétablissez son état précédent. Sauvegardez d'abord la valeur (savedCalc = Application.Calculation)
et remettez-la à savedCalc à la fin. Coder xlCalculationAutomatic en dur écrase en silence les
utilisateurs qui gardent délibérément un modèle lourd en mode manuel, en forçant les lents recalculs
qu'ils évitaient.
Comment forcer un recalcul en VBA en mode manuel ?
Appelez Application.Calculate pour tout recalculer, ActiveSheet.Calculate pour une feuille, ou
SomeRange.Calculate pour une plage. Vous en avez besoin chaque fois qu'une étape ultérieure lit une
valeur qu'une écriture de formule antérieure aurait dû produire — en mode manuel, ces cellules restent
périmées jusqu'à ce que vous recalculiez.
Pourquoi ai-je l'error 1004 en définissant Application.Calculation ?
Parce que Application.Calculation ne peut être défini que lorsqu'un classeur est ouvert. Si votre
code s'exécute au démarrage ou depuis un complément avant qu'aucun classeur n'existe, l'affectation
lève l'error 1004 d'exécution. Protégez-la avec If Workbooks.Count > 0 Then avant de définir la
propriété.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — dernière vérification le 17/08/2026.
Guides associés : VBA ScreenUpdating · VBA EnableEvents · VBA On Error · VBA Range · VBA WorksheetFunction
