En bref — La couleur d'arrière-plan d'une cellule se trouve sur son objet
Interior:Range("A1").Interior.Color = RGB(255, 242, 204). C'est la couche de remplissage — la peinture derrière le texte — et comme toute mise en forme, elle change l'apparence, pas la valeur. Deux choses piègent tout le monde. Premièrement, effacer un remplissage se fait avecInterior.ColorIndex = xlNone, ce qui n'est pas pareil que le peindre en blanc. Deuxièmement, et c'est plus important : la couleur n'est pas une donnée.SUMetSUMIFne la voient pas, si bien qu'un classeur qui utilise la couleur de remplissage pour signifier « approuvé » range une catégorie là où aucune formule ne peut la lire.
' Surligner toute la ligne d'en-tete avec un remplissage or leger.
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sales")
ws.Range("A1:F1").Interior.Color = RGB(255, 242, 204)
' Retirer entierement un remplissage (retour a "No Fill", pas blanc).
ws.Range("A2:F2").Interior.ColorIndex = xlNone
Remplir des cellules de couleur est l'une des tâches les plus automatisées d'Excel, et elle partage
exactement son modèle de couleur avec la couche Font — la même distinction
entre Color et ColorIndex. Ce guide se concentre sur ce qui est propre au remplissage :
l'effacer correctement, et l'idée plus large qu'une cellule colorée est une décoration, pas une
information. Une fois que ça fait tilt, la question « comment additionner les cellules jaunes » se
répond d'elle-même — on ne le fait pas, on corrige les données.
Ce que vous allez apprendre
- Le modèle mental —
Interiorest la couche de remplissage, posée derrière le texte - Définir la couleur de remplissage avec
RGB, et l'effacer avecxlNone(pas du blanc) - La règle la plus importante — la couleur ne porte aucune donnée, et aucune formule ne peut la lire
- Surligner selon une condition sans boucle qui se périme
- Remplir rapidement de nombreuses plages disjointes avec
Union - Relire une couleur de remplissage, et le piège de
xlNone
Le modèle mental : Interior est la couche de remplissage
Une cellule possède trois couches visuelles, chacune atteinte par son propre objet : le texte
(Font), le remplissage derrière lui (Interior), et la façon dont le
nombre est affiché (NumberFormat). Interior est celle du milieu
— la peinture sur le mur, derrière l'écriture. Sa propriété principale est Color, et elle utilise
un modèle de couleur identique à celui de Font : RGB(r, g, b) pour n'importe quelle couleur, ou
ColorIndex pour l'ancienne palette de 56 emplacements.
Comme elle partage le modèle de couleur, la règle du guide sur la police s'applique ici aussi :
définissez avec .Color = RGB(...), et ne confondez jamais .Color avec .ColorIndex.
Interior.Color = 6 est un quasi-noir RGB(6,0,0) ; Interior.ColorIndex = 6 est jaune. Restez
dans un seul espace de nombres.
Effacer un remplissage : xlNone n'est pas du blanc
Voici le premier piège propre au remplissage. Pour retirer un arrière-plan, deux choses semblent identiques à l'écran sans l'être :
ws.Range("A1").Interior.Color = RGB(255, 255, 255) ' le PEINT en blanc
ws.Range("A1").Interior.ColorIndex = xlNone ' RETIRE le remplissage (No Fill)
Sur une feuille vierge, les deux paraissent blanches, on peut donc croire qu'elles sont
équivalentes. Elles ne le sont pas. Un remplissage blanc reste un remplissage — il masque le
quadrillage, il s'imprime en bloc blanc, et il rapporte Interior.Pattern = xlSolid. xlNone
signifie aucun remplissage du tout : le quadrillage transparaît, rien ne s'imprime, et la cellule
est réellement dépourvue de mise en forme. Quand vous réinitialisez une plage — par exemple,
effacer les surlignages de la dernière exécution avant d'en appliquer de nouveaux — vous voulez
presque toujours xlNone, pas du blanc. Peindre en blanc est un bug qui se révèle plus tard, sur
une impression ou par-dessus une feuille colorée, là où le bloc blanc se met soudain à ressortir.
La règle la plus importante : la couleur n'est pas une donnée
C'est l'idée qui sépare un classeur propre d'un classeur fragile. Une couleur de remplissage ne
porte aucune valeur. Aucune formule ne peut la lire. SUM additionne une cellule jaune exactement
comme une cellule blanche ; SUMIF, COUNTIF et IF n'ont aucun opérateur pour « est surlignée ».
Alors dès que vous utilisez la couleur pour signifier quelque chose — les cellules or sont
approuvées, les lignes rouges sont en retard, le vert signifie payé — vous avez rangé une catégorie
dans un endroit que le moteur de calcul ne voit pas.
' Si "approved" compte, sa place est dans une valeur, pas juste une couleur.
ws.Range("H2").Value = "Approved" ' une formule peut lire ceci
ws.Range("A2:H2").Interior.Color = RGB(198, 239, 206) ' la couleur est la consequence, pas la source
La règle pratique : mettez le sens dans une cellule, et laissez la couleur suivre. Ajoutez une
colonne Status, écrivez-y « Approved » ou « Overdue », et pilotez le remplissage à partir de là
(idéalement avec la Mise en forme conditionnelle, plus bas). Dès lors COUNTIF(Status, "Overdue")
fonctionne, les filtres fonctionnent, les tableaux croisés dynamiques fonctionnent — et la couleur
n'est plus que l'écho visuel d'une valeur qui existe vraiment. Certains recourent bel et bien à la
« somme par couleur » via .Interior.ColorIndex dans une boucle, et c'est faisable, mais en avoir
besoin est presque toujours le signe que la catégorie aurait dû être une vraie valeur dès le départ.
Surligner selon une condition : une règle, pas une boucle qui se périme
Tout comme la couleur de police, piloter la couleur de remplissage depuis une condition avec une simple boucle produit un instantané ponctuel qui pourrit à l'instant même où les données changent :
' Instantane seulement - a relancer apres chaque modification.
Dim c As Range
For Each c In ws.Range("B2:B1000")
If c.Value < 0 Then c.Interior.Color = RGB(255, 199, 206)
Next c
Pour une couleur qui doit suivre les valeurs vivantes, posez une fois une règle de Mise en forme conditionnelle et laissez Excel la réévaluer pour toujours :
With ws.Range("B2:B1000").FormatConditions
.Delete
.Add(Type:=xlCellValue, Operator:=xlLess, Formula1:="0").Interior.Color = RGB(255, 199, 206)
End With
Réservez la boucle Interior.Color directe au surlignage statique — un rapport unique que vous
vous apprêtez à figer et exporter. Pour tout ce qui doit rester correct au fil des modifications de
la feuille, FormatCondition est le bon outil. C'est le même arbitrage que pour la couche police,
et il vaut la peine de l'assimiler une bonne fois : les boucles peignent des instantanés, les
règles restent vivantes.
Remplir rapidement de nombreuses plages avec Union
Définir le remplissage d'une plage est instantané. Colorer des centaines de cellules éparses une par
une dans une boucle est lent, car chaque affectation est un aller-retour distinct vers Excel.
Regroupez les cellules dans une seule plage avec Union et peignez-les d'un seul coup :
Dim target As Range, c As Range
For Each c In ws.Range("B2:B1000")
If c.Value < 0 Then
If target Is Nothing Then Set target = c Else Set target = Union(target, c)
End If
Next c
If Not target Is Nothing Then target.Interior.Color = RGB(255, 199, 206)
La boucle décide encore quelles cellules, mais la partie coûteuse — appliquer réellement le
remplissage — n'a lieu qu'une fois pour tout l'Union au lieu de mille fois. (Pour un bloc contigu,
vous n'avez pas besoin d'Union du tout ; colorez toute la Range en une seule instruction.) La
règle générale, valable pour chaque couche de mise en forme : décidez dans la boucle, appliquez à
la plage.
Relire une couleur de remplissage
Relire Interior.Color renvoie la valeur 24 bits que vous avez définie (stockée en interne au
format BGR, comparez-la donc à un RGB(...) plutôt que de lire l'entier brut). La seule chose à
surveiller est le cas « aucun remplissage » :
Debug.Print ws.Range("A1").Interior.ColorIndex ' -4142 (xlNone) quand il n'y a aucun remplissage
Debug.Print ws.Range("A1").Interior.Color ' 16777215 pour un remplissage blanc - a l'air "blanc", pas "vide"
Si vous devez savoir si une cellule est sans remplissage, testez Interior.ColorIndex = xlNone,
et non la valeur Color — car une cellule explicitement blanche renvoie un Color valide et
tromperait une vérification fondée sur la couleur. C'est l'écho, côté lecture, de la règle « le
blanc n'est pas xlNone » vue plus haut.
Comment ExcelMaster aide
Les remplissages de cellule semblent simples jusqu'à ce que les cas limites surgissent : xlNone
face au blanc, une boucle de surlignage qui aurait dû être une règle, la couleur employée comme
catégorie qu'aucune formule ne peut lire, et une boucle cellule par cellule qui traîne. Chacun est
un bug silencieux — un surlignage périmé, un contournement « somme par couleur », une macro lente.
ExcelMaster vous laisse
décrire le résultat. Dites « surligne les lignes en retard » ou « ombre l'en-tête et efface les
couleurs du mois dernier », et il écrit Interior.Color = RGB(...) pour une passe statique ou un
FormatCondition quand la couleur doit suivre les données, efface avec xlNone au lieu de peindre
en blanc, et applique à toute la plage d'un coup. Et quand vous lui demandez de « marquer les
commandes approuvées », il place d'abord le statut dans une vraie colonne — pour que la couleur
signifie quelque chose qu'une formule peut réellement compter. Vous gardez le classeur et le code.
Questions fréquentes
Comment définir la couleur d'arrière-plan d'une cellule en VBA Excel ?
Utilisez Range("A1").Interior.Color = RGB(red, green, blue) — par exemple RGB(255, 242, 204)
pour un or doux. Interior est l'objet de remplissage et Color prend une valeur RGB 24 bits qui
couvre toutes les couleurs. N'utilisez Interior.ColorIndex = n (un emplacement de palette de 1 à
56) que pour vous aligner sur un ancien classeur fondé sur une palette, et ne mélangez pas les deux
espaces de nombres.
Comment retirer ou effacer la couleur de remplissage d'une cellule en VBA ?
Affectez Range("A1").Interior.ColorIndex = xlNone. Cela retire entièrement le remplissage, si bien
que le quadrillage transparaît et que rien ne s'imprime. Affecter Interior.Color = RGB(255,255,255)
ne fait que peindre la cellule en blanc, ce qui reste un remplissage et se comporte différemment à
l'impression et par-dessus des feuilles colorées. Pour réinitialiser des surlignages, utilisez
xlNone.
Puis-je faire la somme ou compter des cellules selon leur couleur en VBA ?
Pas avec SUM, SUMIF ni COUNTIF — ces formules ne voient absolument pas la couleur de
remplissage. Vous pouvez inspecter Interior.Color ou Interior.ColorIndex cellule par cellule
dans une boucle VBA, mais en avoir besoin est le signe que la catégorie devrait être une vraie
valeur. Mettez « Approved » ou « Overdue » dans une colonne Status et comptez cela plutôt ; laissez
la couleur être l'écho visuel de la valeur.
Pourquoi mon surlignage se périme-t-il après que j'ai modifié la feuille ?
Parce qu'une boucle For Each ... Interior.Color applique un instantané ponctuel ; elle ne se
relance pas quand les valeurs changent. Pour une couleur de remplissage qui doit suivre les données,
ajoutez une règle de Mise en forme conditionnelle avec Range(...).FormatConditions.Add, qu'Excel
réévalue automatiquement. N'utilisez une boucle de remplissage directe que pour un rapport statique
que vous comptez figer.
Comment colorer rapidement de nombreuses cellules éparses en VBA ?
Construisez une seule Range avec Union à l'intérieur de votre boucle, puis définissez
.Interior.Color sur cette plage combinée une seule fois, au lieu de colorer chaque cellule au fur
et à mesure. Appliquer le remplissage une fois à tout l'Union évite un aller-retour distinct par
cellule. Pour un bloc contigu, laissez tomber Union et colorez toute la plage en une seule
instruction.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — dernière vérification le 11/08/2026.
Guides associés : VBA Font · VBA NumberFormat · VBA Range · VBA With · VBA For Loop
