En bref — Une bordure est une propriété d'un bord, pas d'une cellule. Une plage possède huit bordures adressables : les quatre bords extérieurs (
xlEdgeLeft,xlEdgeRight,xlEdgeTop,xlEdgeBottom), les deux jeux de quadrillage intérieur (xlInsideVertical,xlInsideHorizontal) et deux diagonales. La collectionRange("A1:D10").Bordersnue les désigne toutes, si bien que.Borders.LineStyle = xlContinuousencadre chaque cellule du bloc, pas seulement le contour. UtilisezRange("A1:D10").BorderAround LineStyle:=xlContinuous, Weight:=xlThinquand vous ne voulez que le cadre extérieur.
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Report")
' Encadrer le bloc, puis un filet fin sous la ligne d'en-tete - deux taches distinctes.
ws.Range("A1:D10").BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
ws.Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlContinuous
Ajouter des bordures est l'une des premières choses que l'on automatise, et c'est aussi là que se
cache le résultat le plus déroutant de toute la boîte à outils du formatage : vous avez demandé
« une bordure » et Excel a dessiné une grille autour de chaque cellule. Ce guide s'articule autour
d'une seule idée qui rend tout le reste prévisible : Borders est une collection de bords, et
toucher la collection touche chaque bord. Une fois que vous voyez les bordures bord par bord, la
confusion contour-contre-grille disparaît.
Ce que vous allez apprendre
- Le modèle mental — une bordure appartient à un bord, et
Bordersest l'ensemble complet de ceux-ci - La règle la plus importante —
.Bordersencadre chaque cellule,.BorderAroundne dessine que le cadre - Les trois propriétés qui rendent une ligne visible —
LineStyle,WeightetColor - Adresser un seul bord à la fois avec
xlEdgeBottom,xlInsideVerticalet les autres - Effacer proprement les bordures avec
xlLineStyleNone - Pourquoi les bordures sont une décoration, pas une structure — et vers quoi se tourner à la place
Le modèle mental : une bordure est une propriété d'un bord
C'est le proche parent du groupe de l'apparence — Font met en forme le texte,
Interior remplit derrière lui, et les bordures dessinent les lignes
autour de lui. Mais les bordures diffèrent de ces derniers sur un point important : une cellule n'a
pas « une bordure », elle en a jusqu'à huit, et VBA atteint chacune via la collection Borders
indexée par une constante XlBordersIndex :
' Les huit bords adressables de toute plage :
' xlEdgeLeft, xlEdgeRight, xlEdgeTop, xlEdgeBottom - les quatre cotes exterieurs
' xlInsideVertical, xlInsideHorizontal - quadrillage ENTRE les cellules
' xlDiagonalDown, xlDiagonalUp - de coin a coin
ws.Range("B2").Borders(xlEdgeBottom).LineStyle = xlContinuous ' juste le bas de B2
Gardez cette image en tête — huit bords, chacun adressable indépendamment — et chaque règle qui suit
en découle. Les bordures intérieures n'existent que lorsque la plage couvre plus d'une cellule (une
cellule seule n'a pas d'« entre-deux »), ce qui explique précisément pourquoi la même ligne de code
se comporte différemment sur B2 et sur B2:E20.
La règle la plus importante : .Borders touche chaque bord, .BorderAround ne fait que le cadre
Voici la ligne qui piège tout le monde. Sur une plage multi-cellules, régler la collection s'applique à tous les bords d'un coup — les côtés extérieurs et le quadrillage entre les cellules :
' Encadre CHAQUE cellule du bloc - le contour plus tout le quadrillage interieur.
ws.Range("A1:D10").Borders.LineStyle = xlContinuous
C'est rarement ce que l'on veut dire par « mets-lui une bordure ». Si vous voulez un seul rectangle
autour de tout le bloc et rien à l'intérieur, utilisez la méthode BorderAround, qui ne touche
jamais que les quatre bords extérieurs :
' Juste le cadre exterieur - aucune ligne interieure.
ws.Range("A1:D10").BorderAround LineStyle:=xlContinuous, Weight:=xlThick
La distinction est le cœur du sujet : .Borders = la grille, .BorderAround = le contour. Si
vous voulez vraiment les deux — un bloc encadré avec des lignes intérieures plus légères — faites-le
en deux passes : réglez .Borders.LineStyle pour l'intérieur, puis BorderAround pour un cadre plus
épais par-dessus. Recourir à .Borders là où vous vouliez .BorderAround est la première cause
d'une « bordure unique » qui ressort en cage complète.
Les trois propriétés qui font une ligne : LineStyle, Weight, Color
Un bord de bordure est invisible tant qu'il n'a pas de LineStyle. C'est la propriété qui allume une
ligne ; les deux autres la peaufinent. Comme vous définissez généralement les trois ensemble,
With garde le tout lisible :
With ws.Range("A1:D10").Borders(xlEdgeBottom)
.LineStyle = xlContinuous ' allume la ligne - sans ceci, rien ne s'affiche
.Weight = xlMedium ' xlHairline, xlThin, xlMedium, xlThick
.Color = RGB(0, 32, 96) ' RGB 24 bits, comme Font.Color
End With
Trois choses à savoir. LineStyle est l'interrupteur marche/arrêt — xlContinuous, xlDash,
xlDot, xlDashDot, xlDouble, xlSlantDashDot, et ainsi de suite — et le régler est ce qui fait
apparaître la bordure. Weight est l'une des quatre constantes (xlHairline, xlThin, xlMedium,
xlThick), pas un nombre de points. Et toutes les paires LineStyle/Weight ne sont pas légales :
xlHairline implique une ligne fine continue, et xlDouble ignore complètement Weight — donc si
une épaisseur semble sans effet, c'est le style de ligne qui la supplante. Pour la couleur, utilisez
.Color = RGB(r, g, b) (le même espace 24 bits que Font.Color, traité dans
VBA Font) ; évitez .ColorIndex sauf si vous vous alignez sur une palette
héritée.
Un seul bord à la fois
La plupart des bordures réelles ne sont pas « tout ou rien ». Un filet sous un en-tête, un séparateur entre deux sections, une marge gauche épaisse — chacun est un seul bord :
' Une ligne epaisse sous l'en-tete, un separateur leger entre les colonnes B et C.
ws.Range("A1:D1").Borders(xlEdgeBottom).Weight = xlThick
ws.Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlContinuous
ws.Range("C2:C20").Borders(xlEdgeLeft).LineStyle = xlDot
xlInsideVertical et xlInsideHorizontal vous donnent le quadrillage entre les cellules sans le
cadre extérieur — l'inverse de BorderAround. Adressez les bords que vous voulez et laissez les
autres intacts ; chaque Borders(index) est indépendant, si bien que régler le bas ne perturbe
jamais le haut.
Effacer les bordures
Pour supprimer les bordures, réglez le style de ligne sur aucun. Sur la collection, cela efface tout ; sur un seul index, cela n'efface que ce bord :
ws.Range("A1:D10").Borders.LineStyle = xlLineStyleNone ' supprime toutes les bordures du bloc
ws.Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlLineStyleNone ' supprime seulement le filet d'en-tete
xlLineStyleNone et xlNone sont interchangeables ici. À noter qu'effacer les bordures d'une plage
ne touche pas aux bordures qu'Excel dessine dans le cadre d'un style de tableau (Table) ou d'une
Mise en forme conditionnelle — celles-ci appartiennent à l'objet qui les a créées, pas à la cellule.
Donc si une ligne refuse de disparaître, cherchez un tableau ou une règle de format plutôt qu'un
appel Borders égaré.
Les bordures sont une décoration, pas une structure
Cela mérite d'être dit clairement, car cela épargne du travail refait : une bordure est purement
visuelle. Elle ne regroupe pas les lignes, ne définit pas une plage et reste invisible pour toute
formule. Si vous dessinez des bordures pour qu'un bloc ressemble à un tableau afin de vous y référer
plus tard, convertissez-le plutôt en un vrai tableau Excel (ListObject) — vous obtenez l'allure
encadrée et une plage nommée, des références structurées et des bandes automatiques. Utilisez les
bordures dessinées à la main pour les finitions d'un rapport que vous êtes sur le point d'imprimer ou
d'exporter, pas comme un moyen de donner aux données une forme que votre code peut lire. La forme doit
vivre dans les données, comme dans VBA Range ; la bordure n'est que la peinture
par-dessus.
Comment ExcelMaster aide
Les bordures cachent plus de décisions qu'il n'y paraît : la collection face à BorderAround, lequel
des huit bords vous vouliez vraiment, un Weight qu'un LineStyle supplante en silence, et une ligne
qui ne s'efface pas parce qu'un tableau la possède. Chaque mauvais virage est silencieux — une grille
là où vous vouliez un contour, ou aucun changement du tout.
ExcelMaster vous laisse plutôt
décrire le résultat. Dites « encadre le bloc de synthèse d'un contour épais avec un filet fin sous
l'en-tête », et il utilise BorderAround pour le cadre et Borders(xlEdgeBottom) pour le filet — en
réglant d'abord LineStyle pour que la ligne s'affiche vraiment, et en choisissant Weight et
Color en conséquence. Vous gardez le classeur et le code ; vous vous épargnez la passe où .Borders
a mis en cage chaque cellule que vous vouliez seulement encadrer.
Questions fréquentes
Comment ajouter une bordure à une plage en VBA Excel ?
Pour un seul contour autour de toute la plage, utilisez Range("A1:D10").BorderAround LineStyle:=xlContinuous, Weight:=xlThin — il ne dessine que le cadre extérieur. Pour un bord précis,
réglez-le sur l'index de la collection, par exemple Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlContinuous. Définissez toujours LineStyle (pas seulement Weight), car c'est le style de ligne
qui rend une bordure visible.
Pourquoi Range.Borders.LineStyle encadre-t-il chaque cellule au lieu de tracer un seul contour ?
Parce que Range.Borders est la collection complète des bords — les quatre côtés extérieurs et le
quadrillage intérieur entre les cellules. Régler LineStyle sur la collection s'applique à tous, si
bien qu'une plage multi-cellules reçoit une bordure autour de chaque cellule. Utilisez BorderAround
pour ne toucher que le cadre extérieur, ou adressez les bords un à un comme Borders(xlEdgeTop) pour
un seul côté à la fois.
Quelle est la différence entre Borders et BorderAround en VBA ?
Borders(index) est une collection que vous indexez par bord (xlEdgeLeft, xlInsideVertical,
etc.), et régler la collection nue affecte chaque bord. BorderAround est une méthode qui ne dessine
que les quatre bords extérieurs de la plage en un seul appel, sans toucher au quadrillage intérieur.
Utilisez BorderAround pour un contour et la collection Borders quand vous avez besoin de lignes
intérieures ou d'un seul bord.
Comment supprimer les bordures d'une plage en VBA ?
Réglez le style de ligne sur aucun : Range("A1:D10").Borders.LineStyle = xlLineStyleNone efface
toutes les bordures du bloc, et Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlLineStyleNone
n'en efface qu'un seul bord. Si une bordure refuse de s'effacer, elle est probablement dessinée par un
style de tableau Excel ou une règle de Mise en forme conditionnelle, qui possèdent leurs propres
bordures.
Quelles valeurs de LineStyle et Weight puis-je utiliser pour les bordures VBA ?
LineStyle accepte xlContinuous, xlDash, xlDot, xlDashDot, xlDashDotDot, xlDouble,
xlSlantDashDot et xlLineStyleNone. Weight est l'une des quatre constantes — xlHairline,
xlThin, xlMedium, xlThick — pas une taille en points. Certaines combinaisons sont contraintes :
xlDouble ignore Weight, donc si une épaisseur semble sans effet, le style de ligne en est la
raison.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — dernière vérification le 14/08/2026.
Guides associés : VBA Merge Cells · VBA Cell Color · VBA Font · VBA With · VBA Range
