TL;DR — Terminez une ligne par un espace et un trait de soulignement
_et VBA traite la ligne physique suivante comme faisant partie de la même instruction. L'analyseur efface le_et joint les lignes avant la compilation, si bien qu'elle ne change que la façon dont votre source se lit — jamais ce qui s'exécute. Trois règles font trébucher tout le monde : l'espace avant_est obligatoire, rien (pas même un commentaire) ne peut le suivre, et vous ne pouvez pas couper à l'intérieur d'une"string"— vous fermez le guillemet, ajoutez& _, et continuez.
' Une seule instruction logique, etalee sur trois lignes lisibles
Workbooks.Open Filename:="C:\Reports\Q3.xlsx", _
ReadOnly:=True, _
UpdateLinks:=False
' Une longue chaine : fermez le guillemet, joignez avec & _, continuez
MsgBox "The report finished at " & _
Format(Now, "hh:mm") & " with no errors."
Ce que vous allez apprendre
- Le modèle mental — un élément de source que l'analyseur efface avant la compilation
- Les trois éléments qui n'agissent que sur la source, et où se place la continuation parmi eux
- L'espace obligatoire, et pourquoi rien ne peut suivre le trait de soulignement
- Le piège des chaînes — pourquoi vous ne pouvez pas couper à l'intérieur des guillemets
- Pourquoi un commentaire tue silencieusement une continuation
- Le trait de soulignement contre le deux-points — découper une instruction contre en joindre plusieurs
- L'avis : la continuation est faite pour les humains, alors servez-vous-en comme tel
Le modèle mental : un élément que l'analyseur efface
VBA n'a aucune limite de longueur de ligne — une instruction peut faire 500 caractères et s'exécuter
parfaitement. Le caractère de continuation de ligne n'existe donc que pour une seule raison : vous. Un
espace suivi d'un trait de soulignement _ à la fin d'une ligne dit à l'analyseur : « cette instruction
n'est pas finie ; la ligne physique suivante la continue ». Avant même que le compilateur ne voie votre
code, l'analyseur retire le _, colle les lignes ensemble, et compile une seule instruction logique.
C'est tout le modèle mental, et il explique chaque règle ci-dessous. Parce que _ est un élément de mise
en page de la source, consommé avant la compilation, il doit se placer là où l'analyseur s'attend à ce que
l'instruction marque une pause — à une coupure naturelle, avec un espace devant, et avec vraiment rien
après. C'est de la ponctuation pour le lecteur, pas une instruction pour la machine.
Trois éléments que la macro n'exécute jamais
La continuation de ligne est l'un des 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 :
| É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 avant la compilation |
| 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 |
Le commentaire et la continuation sont tous deux effacés avant la compilation — du pur formatage de source. Cette nature commune est aussi la raison de leur conflit, comme le montre le piège du commentaire plus bas.
Règle 1 : un espace avant le trait de soulignement, rien après
La continuation est composée de deux caractères dans un ordre fixe — l'espace, puis le trait de soulignement — et elle doit être la dernière chose sur la ligne.
' CORRECT - un espace avant _, et il termine la ligne
total = price + _
tax
' FAUX - pas d'espace avant le trait de soulignement
total = price +_
tax ' Compile error / unexpected token
' FAUX - quelque chose apres le trait de soulignement (meme un commentaire)
total = price + _ ' ajoute la taxe
tax ' Expected: end of statement
Oubliez l'espace et +_ est lu comme un unique symbole ; placez quoi que ce soit après le _ — un espace
parasite passe, mais pas un commentaire ni du code — et VBA signale Expected: end of statement. La
correction est mécanique : _ se place tout à la fin, et l'explication va sur sa propre ligne au-dessus.
Règle 2 : vous ne pouvez pas couper à l'intérieur d'une chaîne
C'est le piège qui amène les gens ici. Un trait de soulignement à l'intérieur d'une chaîne entre
guillemets n'est qu'un trait de soulignement littéral — c'est du texte, pas une continuation. Vous ne
pouvez donc pas replier une longue chaîne en lâchant un _ au milieu :
' CASSE - le _ est du texte litteral a l'interieur des guillemets
MsgBox "This is a very long message _
that keeps going" ' la chaine ne se ferme jamais -> compile error
' CORRECT - fermez le guillemet, concatenez avec & _, continuez sur la ligne suivante
MsgBox "This is a very long message " & _
"that keeps going"
Pour découper une longue chaîne, vous fermez le guillemet, ajoutez & _ (concaténation, puis
continuation), et ouvrez un nouveau guillemet sur la ligne suivante. Surveillez l'espace en fin de la
première chaîne — "message " & conserve l'espace que le saut de ligne masquerait sinon. Ce seul motif —
" ... " & _ — couvre quatre-vingt-dix pour cent des usages réels de la continuation, car ce sont les
longues chaînes (messages, SQL, chemins) qui ont le plus besoin d'être repliées.
Règle 3 : un commentaire tue une continuation
Parce qu'un commentaire et une continuation sont tous deux des éléments qui n'agissent que sur la source,
ils ne peuvent pas partager une ligne. Une apostrophe termine l'instruction logique, donc un _ qui vient
après un ' est à l'intérieur du commentaire et ne fait rien :
' CASSE - le commentaire avale la continuation
total = price _ ' prix de base
+ tax ' "+ tax" est maintenant sa propre instruction cassee
' CORRECT - commentaire sur sa propre ligne, au-dessus de l'instruction
' prix de base plus taxe
total = price _
+ tax
Le symptôme est le même Expected: end of statement sur la ligne suivante, pointant au mauvais endroit. La règle est simple une fois que vous l'avez rencontrée : ne mettez jamais un commentaire sur une ligne continuée — remontez-le sur une ligne à lui. (Le guide sur le commentaire couvre cette collision depuis l'autre côté.)
Trait de soulignement contre deux-points : des outils opposés
Le _ découpe une instruction sur plusieurs lignes. Le deux-points : fait exactement l'inverse —
il joint plusieurs instructions sur une ligne :
' Deux-points : trois instructions tassees sur une seule ligne physique
x = 1 : y = 2 : z = 3
' Trait de soulignement : une instruction detendue sur trois lignes
result = Application.WorksheetFunction.SumIfs( _
data, keys, criteria)
On les confond sans cesse parce que les deux touchent aux limites de ligne, mais ils tirent dans des
directions opposées. Recourez à _ pour rendre une longue instruction lisible ; soyez avare de : —
tasser des instructions sur une ligne les cache des breakpoints et de quiconque lit le code, alors
limitez-le au mieux à des paires triviales. Un outil sert le lecteur ; l'autre ne sert en général personne.
L'avis : la continuation est faite pour les humains, alors servez-vous-en comme tel
_ gagne sa place précisément sur les lignes qu'un humain peine à lire sur un seul écran : un
Workbooks.Open avec six arguments nommés, une condition If avec quatre clauses And, un SumIfs avec
une douzaine de plages, une chaîne SQL ou de connexion assemblée en morceaux. Coupez-les à leurs jointures
naturelles — après une virgule, avant un opérateur, avant chaque And — et la structure de l'instruction
devient visible.
Mais la continuation est un outil de lisibilité, pas une vertu en soi. Replier une ligne courte sans raison, ou continuer une instruction quinze fois, échange une forme d'illisibilité contre une autre (VBA plafonne même une instruction à environ deux douzaines de continuations). Le test est honnête et simple : la coupure rend-elle l'instruction plus facile à lire pour une personne ? Si oui, servez-vous-en ; sinon, laissez la ligne tranquille. La machine, elle, ne s'en est jamais souciée.
Quand la longue ligne est un symptôme, pas le problème
Parfois une instruction est longue parce que la tâche est réellement complexe — des appels
WorksheetFunction imbriqués, des critères tentaculaires, une formule assemblée en code. La continuation
de ligne rend cela lisible, mais ne le rend pas simple, et une instruction de 200 caractères coupée sur
huit lignes reste difficile à réussir.
ExcelMaster vous laisse
énoncer le résultat au lieu d'assembler l'instruction à la main — « additionne les ventes où la région est
Ouest et où la date tombe au T3 » — et il écrit et exécute le code à votre place, en sauvegardant d'abord
votre fichier. La longue ligne cesse d'être votre problème, parce que vous n'avez jamais à la taper.
Foire aux questions
Quel est le caractère de continuation de ligne en VBA ?
Un espace suivi d'un trait de soulignement _ à la fin d'une ligne. Il indique à VBA que l'instruction se
poursuit sur la ligne physique suivante. L'analyseur retire le trait de soulignement et joint les lignes en
une seule instruction avant la compilation, si bien qu'il ne change que la mise en page de la source.
Pourquoi ma continuation de ligne VBA ne fonctionne-t-elle pas ?
En général pour l'une de trois raisons : il n'y a pas d'espace avant le trait de soulignement, quelque
chose (souvent un commentaire) suit le trait de soulignement, ou vous avez tenté de couper à l'intérieur
d'une chaîne entre guillemets. Le _ doit être le dernier caractère de la ligne, avec un espace devant, et
les chaînes se découpent avec " ... " & _, pas en coupant en plein milieu d'un guillemet.
Comment continuer une longue chaîne sur plusieurs lignes en VBA ?
Fermez la chaîne par un guillemet, ajoutez un espace, une esperluette et la continuation — & _ — puis
ouvrez un nouveau guillemet sur la ligne suivante : "first part " & _ puis "second part". Vous ne
pouvez pas placer le trait de soulignement à l'intérieur des guillemets, car il n'y est qu'un trait de
soulignement littéral.
Puis-je mettre un commentaire sur une ligne continuée en VBA ?
Non. Une apostrophe termine l'instruction logique, donc un _ après un commentaire ne fait rien et la
ligne suivante casse. Placez plutôt le commentaire sur sa propre ligne, au-dessus de l'instruction
continuée.
Quelle est la différence entre le trait de soulignement et le deux-points en VBA ?
Le trait de soulignement _ découpe une instruction sur plusieurs lignes pour la lisibilité. Le deux-points
: fait l'inverse — il joint plusieurs instructions sur une seule ligne physique. Utilisez _ pour rendre
les longues instructions lisibles ; évitez : sauf pour des paires triviales, car il cache les instructions
des breakpoints et des lecteurs.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 06/09/2026.
Guides associés : VBA Comment · VBA Option Explicit · VBA MsgBox · VBA If Then Else · VBA Dim
