TL;DR —
Const VAT_RATE As Double = 0.19donne à une valeur fixe un nom verrouillé à la compilation. Là où une variable est une boîte que vous pouvez remplir à nouveau, une constante est une étiquette peinte dessus — lisible partout, repeignable nulle part tant que la macro tourne. Cette immuabilité est tout l'intérêt : elle transforme un nombre magique éparpillé dans huit formules en une source unique qui fait autorité. Tenter de réaffecter uneConstest une erreur de compilation (« Affectation à une constante non autorisée ») — et cette erreur est la fonctionnalité, pas une limite. Pour une famille de valeurs fixes apparentées (statuts, numéros de colonne), utilisez unEnumplutôt que de multiplesConstséparées.
Const VAT_RATE As Double = 0.19 ' un seul endroit, une seule vérité
Const MAX_ROWS As Long = 10000
Const REPORT_TAB As String = "Summary"
Sub ShowRate()
Debug.Print "VAT is " & VAT_RATE * 100 & "%" ' -> VAT is 19%
End Sub
Toute macro regorge de valeurs littérales : un taux de taxe, un numéro de ligne
d'en-tête, un nom de feuille, un seuil. Tapée directement dans le code, chacune
est un nombre magique — un 0.19 ou un 7 tout nu dont vous devez deviner le
sens et traquer la valeur quand elle change. Const est le remède, et c'est l'une
des améliorations de qualité les moins coûteuses que vous puissiez apporter à une
macro.
Ce que vous allez apprendre
- Pourquoi les nombres magiques sont un piège de maintenance, et comment
Constrègle cela en un seul endroit - Pourquoi réaffecter une
Constest une erreur de compilation — et pourquoi c'est exactement ce que vous voulez - La règle de la compilation : une
Constpeut être un littéral, pas un appel de fonction ni une valeur de cellule Public Constpour les valeurs que tout votre projet partage- Quand passer de multiples
Constà un seulEnum
Le modèle mental : une constante est une étiquette peinte dessus, pas une boîte que l'on remplit
Une variable et une constante se ressemblent, mais se comportent de façons opposées. Une variable est une boîte : vous y mettez une valeur, et vous pouvez la remplacer par une autre plus tard. Une constante est une étiquette peinte sur une valeur au moment de la compilation. Chacun peut lire l'étiquette depuis n'importe où dans sa portée — mais rien ne peut la repeindre pendant l'exécution du code. La valeur est figée.
Ce gel n'est pas une contrainte à contourner ; c'est la garantie que vous achetez.
Quand vous écrivez Const VAT_RATE = 0.19, vous dites à la fois au compilateur et
au prochain lecteur : ce nombre a un seul sens, il vit en un seul endroit, et il
ne changera pas dans votre dos. Tout ce qui fait la valeur des constantes découle
de cette promesse.
La règle qui fait ses preuves : les nombres magiques dérivent, pas les constantes
Voici le problème que Const résout. Supposons que 0.2 — un taux de TVA — soit
tapé directement dans huit formules différentes réparties dans vos macros :
' Nombre magique 0.2 éparpillé partout — changer le taux, c'est traquer les huit
gross = net * 1.2
vat = net * 0.2
' ...six autres endroits, chacun avec un 0.2 tout nu...
Maintenant le taux passe à 0.19. Vous devez tous les retrouver et les modifier.
Oubliez-en un seul et vous obtenez un total faux et silencieux — aucune
erreur, juste des chiffres qui ne tombent pas juste, dans un rapport et pas dans
un autre. Et six mois plus tard, un lecteur n'a aucune idée de savoir si ce 0.2
est une TVA, une remise ou une commission.
Une seule constante règle tout cela :
Const VAT_RATE As Double = 0.19 ' modifiez-le ici, une fois, et tous les usages suivent
gross = net * (1 + VAT_RATE)
vat = net * VAT_RATE
La valeur vit en un seul endroit, le nom en documente le sens, et un changement de
taux devient une modification d'une ligne qui ne peut pas rester à moitié faite.
Tout littéral qui apparaît plus d'une fois, ou dont le sens n'est pas évident
d'après le contexte, devrait être une Const.
La règle qui est en fait une fonctionnalité : on ne peut pas affecter à une Const
Essayez de modifier une constante et VBA refuse — à la compilation, avant même que la macro ne démarre :
Const TAX As Double = 0.2
Sub Oops()
TAX = 0.25 ' Erreur de compilation : Affectation à une constante non autorisée
End Sub
Les débutants voient parfois cette erreur comme un VBA capricieux. C'est l'inverse
: c'est le compilateur qui garantit que la valeur ne change jamais, ce qui est
toute la raison d'avoir déclaré une constante. Si vous vous surprenez à vouloir la
réaffecter, c'est qu'elle n'était jamais vraiment une constante — c'est une
variable qui change à l'exécution, alors déclarez-la avec Dim. La distinction
résume toute la décision : cette valeur change-t-elle pendant que la macro
tourne ? Si oui, Dim. Si non, Const.
La règle qui surprend : Const est évaluée à la compilation
Parce que l'étiquette est peinte au moment où vous compilez, une constante ne peut recevoir que quelque chose que le compilateur connaît déjà : un littéral, ou une expression bâtie à partir d'autres constantes. Elle ne peut pas être un appel de fonction, une valeur de feuille, ni quoi que ce soit de calculé pendant l'exécution de la macro.
' FONCTIONNE — un littéral, ou une expression de littéraux/d'autres constantes
Const PI As Double = 3.14159
Const TWO_PI As Double = 2 * PI
Const HEADER As String = "Report — " & "2026"
' ÉCHOUE — nécessite une évaluation à l'exécution, donc ce doit être une variable
Const TODAY As Date = Date ' Erreur de compilation : ce n'est pas une constante
Const RATE As Double = Range("A1").Value ' Erreur de compilation
Si la valeur ne peut être connue que pendant l'exécution de la macro — la date du
jour, le contenu actuel d'une cellule, le résultat d'une fonction — elle a sa
place dans une variable Dim que vous affectez à l'exécution, pas dans une
Const.
Portée : Const locale contre Public Const
Une Const suit les mêmes règles de portée qu'un Dim. Écrite à l'intérieur d'un
Sub, elle est locale à cette procédure. Écrite en haut d'un module avec
Public, elle devient une constante valable dans tout le projet, que chaque
module peut lire :
' Dans un module nommé « Config », au-dessus de toute procédure :
Public Const APP_NAME As String = "Monthly Close"
Public Const DATA_SHEET As String = "Raw"
Public Const HEADER_ROW As Long = 1
L'idiome qui passe à l'échelle, c'est un unique module Config qui rassemble
toutes les constantes valables pour l'application — noms de feuilles, seuils,
titre de l'application — de sorte qu'il n'y ait qu'un seul endroit où regarder
quand quelque chose doit changer. Gardez locales les constantes propres à une
procédure ; ne promouvez que celles qui sont réellement partagées.
Quand une seule valeur ne suffit pas : utilisez Enum pour une famille
Quand vous avez un groupe de constantes apparentées — statuts de commande,
positions de colonnes, types de rapport — un tas de Const séparées fonctionne,
mais se lit mal. Un Enum les nomme en tant qu'ensemble, les regroupe sous un
même type, et vous offre l'IntelliSense ainsi qu'un léger contrôle de type :
Enum OrderStatus
Pending = 1
Paid = 2
Shipped = 3
Cancelled = 4
End Enum
Sub Demo()
Dim s As OrderStatus
s = Paid
If s = Cancelled Then Exit Sub
End Sub
La règle empirique : Const pour une valeur isolée ; Enum pour une famille de
valeurs apparentées qui vont ensemble. Un Enum signale aussi l'intention — un
paramètre typé As OrderStatus indique au lecteur (et à l'éditeur) exactement
quelles valeurs sont légales.
Comment ExcelMaster aide
Les constantes, la discipline de portée et les Enum sont les habitudes qui
gardent maintenable une macro qui grossit — et ce sont des frais généraux que vous
portez sur chaque projet, bien avant d'arriver à la logique qui vous intéresse
vraiment.
ExcelMaster
vous laisse énoncer la règle au lieu de câbler la tuyauterie : « applique une TVA
de 19 % à la colonne D, signale tout ce qui est au statut Annulé, écris le total
dans la feuille Récapitulatif. » Il transforme cela en une logique fonctionnelle
avec le taux et les valeurs de statut en un seul endroit, si bien qu'un changement
est un changement à la description, pas une chasse à travers huit formules. Vous
déclarerez encore des Const dans les macros écrites à la main où vous voulez le
contrôle ; pour la tâche quotidienne, décrire la règle vaut mieux que d'entretenir
les nombres magiques qui la sous-tendent.
Questions fréquentes
Qu'est-ce qu'une constante en VBA ?
Une constante est une valeur nommée, fixée à la compilation, qui ne peut pas
changer pendant que la macro tourne. On la déclare avec Const, par exemple
Const VAT_RATE As Double = 0.19. Elle remplace un « nombre magique » éparpillé
par une source nommée unique : la valeur vit en un seul endroit et son sens est
documenté par son nom.
Quelle est la différence entre Const et Dim ?
Dim déclare une variable — une boîte dont vous pouvez changer la valeur à
l'exécution. Const déclare une constante — une valeur verrouillée à la
compilation, impossible à réaffecter. Utilisez Const pour tout ce qui ne change
jamais pendant que la macro tourne (un taux, un nom de feuille, un seuil) et Dim
pour tout ce qui change.
Puis-je modifier une Const à l'exécution ?
Non. Affecter une nouvelle valeur à une constante est une erreur de compilation
(« Affectation à une constante non autorisée »), et c'est justement cette garantie
qui justifie d'en utiliser une. Si une valeur doit changer pendant que la macro
tourne, ce n'est pas une constante — déclarez-la plutôt comme variable avec Dim.
Pourquoi Const x = Range("A1").Value échoue-t-il ?
Parce qu'une Const est évaluée à la compilation, elle ne peut recevoir qu'un
littéral ou une expression d'autres constantes — jamais quelque chose de calculé à
l'exécution comme une valeur de cellule, un résultat de fonction ou Date. Pour
cela, utilisez une variable Dim que vous affectez pendant que la macro tourne.
Qu'est-ce qu'un Enum en VBA et quand l'utiliser à la place de Const ?
Un Enum définit une famille de constantes nommées apparentées sous un même
type, par exemple des statuts de commande ou des numéros de colonne. Utilisez
plusieurs Const pour des valeurs isolées, mais optez pour un Enum quand les
valeurs forment un ensemble cohérent — il les regroupe, active l'IntelliSense et
vous permet de typer un paramètre As cet enum pour documenter quelles valeurs
sont valides.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — dernière vérification le 31/07/2026.
Guides associés : VBA Dim · VBA Data Types · VBA Sub · VBA Function · VBA If Then Else
