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

VBA Option Explicit dans Excel — transformer une faute de frappe silencieuse en erreur de compilation bruyante

|

VBA Option Explicit dans Excel — transformer une faute de frappe silencieuse en erreur de compilation bruyante

TL;DR — Placez Option Explicit tout 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 comme totalSaies n'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