TL;DR — Placez
Option Explicittout en haut de chaque module et VBA refusera d'exécuter toute macro qui utilise une variable que vous n'avez jamais déclarée. Sans elle, une faute de frappe commetotalSaiesn'est pas une erreur — VBA crée en silence une nouvelle variable vide, votre total revient à0, et rien ne vous prévient. C'est une directive, pas du code d'exécution : elle s'exécute à la compilation, si bien que l'erreur fait surface avant qu'une seule ligne ne s'exécute. Activez une fois Tools > Options > Require Variable Declaration pour qu'elle soit ajoutée automatiquement à chaque nouveau module.
Option Explicit ' <- toujours la premiere ligne du module
Sub Report()
Dim totalSales As Long
totalSales = 100
MsgBox totalSaies ' faute de frappe ! Avec Option Explicit : "Variable not defined" - ca ne s'executera pas
End Sub ' Sans elle : MsgBox affiche un vide/0 et personne ne le sait jamais
Ce que vous allez apprendre
- Le modèle mental — VBA invente une variable pour chaque nom que vous tapez
- Le bug de la faute de frappe silencieuse, et comment une seule ligne en élimine toute la catégorie
- Pourquoi elle vaut par module, et le réglage qui l'ajoute pour vous
- Quoi faire quand Variable not defined s'allume partout dans votre vieux code
- Pourquoi elle force la déclaration mais pas les types de données (une confusion fréquente)
- L'avis : le seul réglage à activer avant d'écrire une ligne
Le modèle mental : VBA invente des variables dans votre dos
Par défaut, VBA traite tout nom qu'il n'a jamais vu comme une demande de créer une nouvelle variable,
sur-le-champ, de type Variant, contenant Empty. Cela semble pratique. C'est un piège. Cela signifie que
VBA ne peut pas faire la différence entre une variable que vous vouliez utiliser et une variable que vous
avez mal orthographiée — les deux ne sont qu'« un nom qu'il n'a pas vu », donc les deux sont créées, en
silence.
Option Explicit retire cette commodité. Avec elle en haut du module, la règle s'inverse : chaque
variable doit être déclarée (avec Dim, Private, Public, Static, Const, ou en paramètre) avant
d'être utilisée. Tapez un nom que vous n'avez jamais déclaré et le compilateur s'arrête sur Variable not
defined — avant que la macro ne s'exécute. Vous avez échangé un peu de frappe contre la promesse du
compilateur que chaque nom de votre code est un nom voulu.
Trois éléments que la macro n'exécute jamais
Option Explicit appartient à une petite famille : trois éléments que vous tapez et que la macro en cours
d'exécution n'exécute jamais. Ils façonnent la source et la compilation, pas l'exécution — et c'est
pourquoi les débutants les négligent et pourquoi les négliger fait mal.
| Élément | Ce qu'il fait à votre source | Ce qu'il coûte à l'exécution |
|---|---|---|
' commentaire |
Laisse des notes et désactive du code que le compilateur supprime | Rien — il ne s'exécute jamais |
_ continuation de ligne |
Découpe une longue instruction sur plusieurs lignes | Rien — l'analyseur l'efface |
Option Explicit |
Force chaque nom à être déclaré | S'exécute à la compilation, donc les fautes de frappe meurent avant que la macro démarre |
Deux des trois sont effacés avant la compilation ; Option Explicit est celui qui agit — il ordonne au
compilateur de surveiller vos noms. C'est celui des trois au meilleur rapport bénéfice/effort, parce que le
bug qu'il attrape est le plus coûteux : celui qui produit une réponse fausse au lieu d'une erreur.
Le bug qu'il élimine : la faute de frappe qui renvoie zéro
Voici tout l'argument en faveur d'Option Explicit en huit lignes. Sans lui :
Sub Totals()
Dim revenue As Currency
revenue = 5000
' ...quarante lignes plus loin...
MsgBox "Revenue: " & revanue ' faute de frappe : revAnue
End Sub
revanue n'a jamais été déclaré, donc VBA le crée comme un Variant vide. La boîte de message affiche
Revenue: — vide — et il n'y a aucune erreur, aucun avertissement, aucun texte en rouge. Sur un vrai
rapport, c'est un chiffre faux livré à quelqu'un qui lui fait confiance. C'est de loin la cause la plus
fréquente du « ma macro donne la mauvaise réponse mais ne plante pas », et elle reste entièrement invisible
jusqu'à ce que quelqu'un remarque que le total est faux.
Ajoutez une ligne et la même faute de frappe devient un mur infranchissable :
Option Explicit
Sub Totals()
Dim revenue As Currency
revenue = 5000
MsgBox "Revenue: " & revanue ' Compile error: Variable not defined (revanue surligne)
End Sub
La macro ne démarre même pas. Le compilateur surligne revanue et nomme le problème. Une correction de dix
secondes au lieu d'une erreur silencieuse, déjà livrée.
Elle vaut par module, alors laissez le réglage l'ajouter pour vous
Option Explicit ne protège que le module où il se trouve. Ajoutez-le à Module1 et Module2 reste
grand ouvert. Un nouveau module que vous insérez demain n'en a aucun. Compter sur vous-même pour le taper
en haut de chaque module est exactement le genre de discipline qui lâche le jour de rush où vous en avez le
plus besoin.
Alors ne comptez pas sur vous-même. Dans l'éditeur VBA, ouvrez Tools > Options > Editor et cochez
Require Variable Declaration. Dès lors, chaque nouveau module que vous insérez reçoit Option Explicit sur sa première ligne, automatiquement. C'est un clic unique qui fait du choix sûr le choix par
défaut réel — la première chose à régler sur toute machine où vous écrivez du VBA.
Une réserve à connaître : ce réglage n'affecte que les modules créés après que vous l'avez coché. Les modules qui existent déjà gardent ce qu'ils avaient, vous ajoutez donc encore la ligne aux anciens modules à la main.
L'activer dans du vieux code : le mur de rouge, c'est justement le but
Ajoutez Option Explicit à un module rempli de variables non déclarées et la première compilation
s'illumine comme un standard téléphonique — Variable not defined sur nom après nom. Ce n'est pas la
directive qui fait des difficultés ; c'est elle qui vous montre chaque endroit où votre vieux code avançait
à l'aveugle. Chaque nom surligné est soit une variable à déclarer, soit une faute de frappe que vous
n'aviez jamais attrapée.
Traitez-les une par une : déclarez les vraies (Dim customerName As String — voyez
VBA Dim pour la marche à suivre), et corrigez les fautes de frappe. C'est fastidieux
une fois et sûr pour toujours. Si un module est énorme, ajoutez la ligne, compilez, et laissez l'éditeur
vous conduire à chaque nom non déclaré avec Debug > Compile. Vous n'ajoutez pas du travail ; vous
encaissez des bugs qui étaient déjà là.
Elle force la déclaration, pas les types de données
Une méprise fréquente : les gens pensent qu'Option Explicit rend VBA fortement typé. Ce n'est pas le cas.
Il vous force à déclarer une variable, mais une déclaration sans type reste un Variant :
Option Explicit
Dim count ' valide sous Option Explicit - mais c'est un Variant
Dim count As Long ' voila ce que vous voulez vraiment - une variable typee
Dim count satisfait Option Explicit (le nom est déclaré) mais ne vous donne rien de la vitesse ni de la
sûreté de type d'As Long. Option Explicit bouche le trou du nom non déclaré ; choisir de vrais types
(As Long, As String, As Range) est une habitude distincte et tout aussi précieuse, traitée dans
VBA Data Types. Activez la première, puis pratiquez la seconde.
L'avis : c'est le premier réglage à activer
Il n'existe aucun argument honnête contre Option Explicit. Le coût, c'est quelques lignes Dim que vous
devriez écrire de toute façon ; le retour, c'est l'immunité contre le bug le plus chronophage de VBA — la
faute de frappe silencieuse qui renvoie zéro et part en production. Tout développeur VBA expérimenté active
Require Variable Declaration sur une nouvelle machine avant d'écrire quoi que ce soit, et considère un
module sans Option Explicit comme inachevé.
Si vous ne retenez qu'une chose de cet ensemble, que ce soit celle-ci : cochez le réglage maintenant, ajoutez la ligne aux modules que vous avez déjà, et ne passez plus jamais un après-midi à traquer un total faux qui se révèle être une variable mal orthographiée. C'est l'assurance la moins chère du langage.
Quand la garantie voulue porte sur toute la macro, pas sur une variable
Option Explicit garantit que vos noms sont réels. Il ne peut pas garantir que votre logique l'est.
Quand l'enjeu est un chiffre destiné à un client, vous voulez encore quelque chose qui vérifie que le
résultat est juste, pas seulement que les variables existent.
ExcelMaster prend un objectif
en langage courant — « rapproche ces deux feuilles et signale chaque ligne où les totaux divergent » —
écrit le code, sauvegarde votre classeur, l'exécute, et vous rend les lignes qui échouent au contrôle. Vous
décrivez le résultat attendu ; il fait le travail et vous montre où la réalité et l'attente se séparent —
un niveau de sûreté qu'aucune directive seule ne peut vous donner.
Foire aux questions
Que fait Option Explicit en VBA ?
Il vous force à déclarer chaque variable avant de l'utiliser. Avec Option Explicit en haut d'un module,
tout nom que vous n'avez jamais déclaré déclenche une erreur de compilation Variable not defined, si bien
que les fautes de frappe et les variables non déclarées sont attrapées avant que la macro ne s'exécute, au
lieu de devenir en silence des variants vides.
Où placer Option Explicit ?
Sur la toute première ligne d'un module, au-dessus de chaque Sub et Function, dans la section
Declarations du module. Il ne s'applique qu'à ce module, il va donc en haut de chaque module que vous
voulez protéger.
Comment ajouter Option Explicit automatiquement ?
Dans l'éditeur VBA, ouvrez Tools > Options > Editor et cochez Require Variable Declaration. VBA insère
alors Option Explicit en haut de chaque nouveau module que vous créez. Il ne l'ajoute pas aux modules qui
existent déjà — ceux-là, vous les mettez à jour à la main.
Pourquoi ai-je Variable not defined après avoir ajouté Option Explicit ?
Parce que le module contient des variables que vous n'avez jamais déclarées — souvent des fautes de frappe,
parfois des noms que vous avez simplement oublié de Dim. Le compilateur surligne chacune. Déclarez les
vraies variables (par exemple Dim total As Long) et corrigez les mal orthographiées ; chaque erreur est
un bug latent que la directive vient d'exposer.
Option Explicit force-t-il les types de données ?
Non. Il force la déclaration, pas le typage. Dim count le satisfait mais reste un Variant. Pour
obtenir la sûreté de type et la vitesse, vous ajoutez vous-même un type — Dim count As Long — ce qui est
une bonne habitude distincte.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 06/09/2026.
Guides associés : VBA Comment · VBA Line Continuation · VBA Dim · VBA Data Types · VBA Debug.Print
