🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Const dans Excel — nommez vos nombres magiques (et pourquoi la valeur ne peut pas dériver)

|

VBA Const dans Excel — nommez vos nombres magiques (et pourquoi la valeur ne peut pas dériver)

TL;DRConst VAT_RATE As Double = 0.19 donne à 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 une Const est 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 un Enum plutôt que de multiples Const sé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 Const règle cela en un seul endroit
  • Pourquoi réaffecter une Const est une erreur de compilation — et pourquoi c'est exactement ce que vous voulez
  • La règle de la compilation : une Const peut être un littéral, pas un appel de fonction ni une valeur de cellule
  • Public Const pour les valeurs que tout votre projet partage
  • Quand passer de multiples Const à un seul Enum

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