Dans Excel, une couleur bien choisie peut transformer un tableau difficile à lire en outil de pilotage clair et agréable. Une cellule rouge pour signaler un retard, un texte vert pour mettre en avant une validation ou un fond jaune pour attirer l’attention : le code couleur parle souvent plus vite que les chiffres.
Avec VBA, vous pouvez automatiser cette mise en forme en quelques lignes de code. Plus besoin de parcourir manuellement des centaines de cellules pour modifier leur apparence. Dans cet article, nous allons voir comment utiliser VBA pour changer la couleur des cellules, du texte, des bordures et même appliquer une mise en forme selon le contenu d’une feuille.
Les trois façons de définir une couleur en VBA
Avant d’écrire votre première macro, il faut connaître les principales propriétés utilisées par Excel. Selon vos besoins, vous pouvez définir une couleur avec :
- Color, qui utilise une couleur RGB précise ;
- ColorIndex, qui s’appuie sur la palette historique d’Excel ;
- ThemeColor, qui utilise les couleurs du thème du classeur.
La méthode la plus souple reste généralement RGB. Elle permet de choisir presque n’importe quelle couleur en combinant trois valeurs : le rouge, le vert et le bleu.
RGB(rouge, vert, bleu)
Chaque valeur doit être comprise entre 0 et 255. Par exemple :
RGB(255, 0, 0) ' RougeRGB(0, 255, 0) ' VertRGB(0, 0, 255) ' BleuRGB(255, 255, 0) ' JauneRGB(240, 240, 240) ' Gris clair
Cette notation peut sembler technique au premier abord, mais elle devient vite naturelle. Pour obtenir un bleu foncé, on augmente la valeur du bleu et on réduit les valeurs du rouge et du vert. Pour un orange, on mélange une forte dose de rouge avec une dose moyenne de vert.
Modifier la couleur de fond d’une cellule
La couleur de fond d’une cellule est gérée par la propriété Interior.Color. Voici une macro très simple qui colore la cellule A1 en jaune :
Sub ColorerCellule() Range("A1").Interior.Color = RGB(255, 255, 0)End Sub
Lorsque vous exécutez cette macro, le fond de la cellule A1 devient jaune. Vous pouvez bien entendu cibler une autre cellule ou une plage complète :
Sub ColorerUnePlage() Range("A1:C5").Interior.Color = RGB(221, 235, 247)End Sub
Dans cet exemple, toute la plage A1:C5 reçoit un bleu très clair. Cette technique est pratique pour mettre en évidence une zone de saisie, un tableau de résultats ou une sélection de données.
Pour éviter les références ambiguës, notamment lorsque plusieurs classeurs sont ouverts, il est préférable de préciser la feuille concernée :
Sub ColorerUnePlageAvecFeuille() Worksheets("Feuil1").Range("A1:C5").Interior.Color = RGB(221, 235, 247)End Sub
Vous pouvez également utiliser la notation avec un objet Worksheet :
Sub ColorerUnePlageProprement() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Feuil1") ws.Range("A1:C5").Interior.Color = RGB(221, 235, 247)End Sub
Cette version est un peu plus longue, mais elle devient particulièrement utile dans les macros importantes. Elle indique clairement que le code travaille dans le classeur contenant la macro.
Modifier la couleur du texte
Pour changer la couleur du contenu d’une cellule, utilisez la propriété Font.Color. Par exemple, le code suivant affiche le texte de A1 en rouge :
Sub ColorerLeTexte() Range("A1").Font.Color = RGB(255, 0, 0)End Sub
Vous pouvez combiner la couleur du texte et celle du fond. Voici un exemple qui crée un en-tête blanc sur fond bleu :
Sub MettreEnFormeEntete() With Range("A1:D1") .Interior.Color = RGB(31, 78, 121) .Font.Color = RGB(255, 255, 255) .Font.Bold = True End WithEnd Sub
L’instruction With évite de répéter plusieurs fois la référence à la plage. Elle rend aussi le code plus facile à lire. Ici, la ligne 1 devient un véritable en-tête : fond bleu foncé, texte blanc et caractères en gras.
Pour créer un titre plus visible, vous pouvez également modifier la taille du texte et l’alignement :
Sub StyliserUnTitre() With Range("A1") .Interior.Color = RGB(31, 78, 121) .Font.Color = RGB(255, 255, 255) .Font.Bold = True .Font.Size = 16 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End WithEnd Sub
Utiliser ColorIndex pour les couleurs classiques
La propriété ColorIndex permet d’utiliser la palette de couleurs standard d’Excel. Elle est rapide à mettre en place, mais moins précise que RGB. Voici quelques exemples courants :
Sub UtiliserColorIndex() Range("A1").Interior.ColorIndex = 6 ' Jaune Range("A2").Interior.ColorIndex = 3 ' Rouge Range("A3").Interior.ColorIndex = 4 ' Vert Range("A4").Interior.ColorIndex = 5 ' BleuEnd Sub
Vous pouvez aussi supprimer la couleur de fond d’une cellule avec la valeur xlNone :
Sub SupprimerLaCouleur() Range("A1:A10").Interior.ColorIndex = xlNoneEnd Sub
ColorIndex peut être suffisant pour une petite macro personnelle. En revanche, si vous créez un modèle destiné à être utilisé par plusieurs personnes, RGB est souvent préférable. Le rendu sera plus prévisible et votre code exprimera précisément la couleur souhaitée.
Colorer automatiquement selon le contenu
L’un des usages les plus pratiques de VBA consiste à appliquer une couleur selon la valeur d’une cellule. Imaginez une colonne B contenant des statuts : « Terminé », « En cours » et « En retard ». Une macro peut colorer chaque ligne automatiquement.
Sub ColorerSelonLeStatut() Dim cellule As Range For Each cellule In Range("B2:B100") Select Case cellule.Value Case "Terminé" cellule.Interior.Color = RGB(198, 239, 206) cellule.Font.Color = RGB(0, 97, 0) Case "En cours" cellule.Interior.Color = RGB(255, 235, 156) cellule.Font.Color = RGB(156, 101, 0) Case "En retard" cellule.Interior.Color = RGB(255, 199, 206) cellule.Font.Color = RGB(156, 0, 6) Case Else cellule.Interior.ColorIndex = xlNone cellule.Font.Color = RGB(0, 0, 0) End Select Next celluleEnd Sub
La boucle For Each examine chaque cellule de la plage B2:B100. L’instruction Select Case choisit la mise en forme adaptée au statut trouvé.
Cette approche produit un résultat très lisible : vert pour les tâches terminées, jaune pour celles qui avancent et rouge pour les éléments en retard. Le tableau devient presque immédiatement compréhensible.
Colorer une ligne complète à partir d’une cellule
Parfois, il est plus efficace de colorer toute une ligne plutôt que la seule cellule contenant le statut. Supposons que le statut se trouve en colonne D et que votre tableau occupe les colonnes A à F :
Sub ColorerLesLignes() Dim ligne As Long Dim derniereLigne As Long derniereLigne = Cells(Rows.Count, "D").End(xlUp).Row For ligne = 2 To derniereLigne Select Case Cells(ligne, "D").Value Case "Terminé" Range("A" & ligne & ":F" & ligne).Interior.Color = RGB(226, 239, 218) Case "En retard" Range("A" & ligne & ":F" & ligne).Interior.Color = RGB(244, 204, 204) Case Else Range("A" & ligne & ":F" & ligne).Interior.ColorIndex = xlNone End Select Next ligneEnd Sub
La variable derniereLigne permet de détecter automatiquement la dernière ligne remplie de la colonne D. Vous n’avez donc pas besoin de modifier la macro chaque fois que le tableau grandit.
Dans un vrai fichier de suivi, cette méthode peut faire gagner beaucoup de temps. Un simple changement de statut suffit à mettre en évidence toute la ligne concernée.
Ajouter ou modifier la couleur des bordures
La mise en forme d’un tableau ne se limite pas au fond et au texte. Vous pouvez également colorer les bordures avec l’objet Borders.
Sub ColorerLesBordures() With Range("A1:D10").Borders .LineStyle = xlContinuous .Color = RGB(180, 180, 180) .Weight = xlThin End WithEnd Sub
Pour modifier uniquement la bordure inférieure d’une plage, utilisez xlEdgeBottom :
Sub AjouterUneBordureInferieure() With Range("A1:D1").Borders(xlEdgeBottom) .LineStyle = xlContinuous .Color = RGB(31, 78, 121) .Weight = xlMedium End WithEnd Sub
Voici quelques constantes utiles :
- xlEdgeTop : bordure supérieure ;
- xlEdgeBottom : bordure inférieure ;
- xlEdgeLeft : bordure gauche ;
- xlEdgeRight : bordure droite ;
- xlInsideHorizontal : lignes horizontales internes ;
- xlInsideVertical : lignes verticales internes.
Réinitialiser les couleurs d’une plage
Une macro de mise en forme devrait souvent prévoir une fonction de nettoyage. Cela évite d’accumuler d’anciennes couleurs lorsque les données changent.
Sub ReinitialiserLaMiseEnForme() With Range("A2:F100") .Interior.ColorIndex = xlNone .Font.Color = RGB(0, 0, 0) .Font.Bold = False End WithEnd Sub
Vous pouvez ensuite lancer cette macro avant d’appliquer une nouvelle logique de couleur. C’est particulièrement utile dans les tableaux actualisés régulièrement.
Si vous souhaitez supprimer complètement les formats, y compris les bordures, les formats numériques et l’alignement, utilisez plutôt :
Sub EffacerTousLesFormats() Range("A2:F100").ClearFormatsEnd Sub
Attention toutefois : ClearFormats supprime davantage d’éléments que la seule couleur. Utilisez-le uniquement si vous souhaitez réellement repartir de zéro.
Couleur de police, couleur de fond et lisibilité
Une couleur vive n’est pas forcément une bonne couleur. Le jaune pur avec du texte blanc, par exemple, est difficile à lire. Pour un fichier professionnel, privilégiez des contrastes nets et une palette limitée.
- Utilisez un fond foncé avec une police claire pour les en-têtes ;
- Réservez le rouge aux alertes importantes ;
- Préférez des teintes pastel pour les zones de données ;
- Évitez d’utiliser plus de quatre ou cinq couleurs principales ;
- Ne basez pas toute l’information sur la couleur : ajoutez aussi un texte ou un symbole.
Ce dernier point est essentiel. Certaines personnes distinguent mal certaines couleurs, et un tableau entièrement basé sur le rouge et le vert peut devenir difficile à interpréter. Un statut explicite reste toujours utile.
Optimiser une macro qui colore beaucoup de cellules
Lorsque vous appliquez des couleurs à quelques cellules, la vitesse n’est pas un problème. En revanche, une boucle sur plusieurs milliers de lignes peut ralentir Excel. Dans ce cas, désactivez temporairement la mise à jour de l’écran :
Sub ColorerRapidement() Application.ScreenUpdating = False ' Votre code de mise en forme ici Application.ScreenUpdating = TrueEnd Sub
Pour sécuriser le retour à l’affichage normal en cas d’erreur, vous pouvez ajouter une gestion simple :
Sub ColorerRapidementEtProprement() On Error GoTo GestionErreur Application.ScreenUpdating = False ' Votre code de mise en forme iciFin: Application.ScreenUpdating = True Exit SubGestionErreur: MsgBox "Une erreur est survenue : " & Err.Description Resume FinEnd Sub
Le principe est simple : Excel cesse de redessiner la feuille pendant l’exécution, puis réactive l’affichage à la fin. La macro paraît ainsi beaucoup plus rapide.
La mise en forme conditionnelle est-elle parfois préférable ?
Oui. Si la couleur doit évoluer automatiquement dès qu’une valeur change, la mise en forme conditionnelle est souvent plus adaptée que VBA. Elle ne nécessite pas de relancer une macro et reste directement visible dans les règles de la feuille.
VBA devient particulièrement intéressant lorsque :
- vous devez appliquer plusieurs actions en une seule fois ;
- la règle de couleur dépend de plusieurs feuilles ;
- vous souhaitez créer un bouton de mise en forme ;
- vous générez automatiquement un rapport ;
- vous devez colorer des lignes selon une logique complexe.
Dans les autres cas, une règle de mise en forme conditionnelle peut être plus simple à maintenir. Le meilleur choix dépend donc du fonctionnement souhaité, pas uniquement de la technique la plus impressionnante.
Une macro complète pour colorer un tableau de suivi
Voici un exemple réunissant plusieurs notions : détection de la dernière ligne, analyse du statut, couleur du fond et couleur du texte.
Sub MettreEnFormeTableauSuivi() Dim ws As Worksheet Dim derniereLigne As Long Dim ligne As Long Dim statut As String Set ws = ThisWorkbook.Worksheets("Suivi") Application.ScreenUpdating = False derniereLigne = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row For ligne = 2 To derniereLigne statut = Trim(ws.Cells(ligne, "D").Value) With ws.Range("A" & ligne & ":F" & ligne) .Font.Color = RGB(0, 0, 0) Select Case statut Case "Terminé" .Interior.Color = RGB(226, 239, 218) .Font.Color = RGB(0, 97, 0) Case "En cours" .Interior.Color = RGB(255, 242, 204) .Font.Color = RGB(127, 96, 0) Case "En retard" .Interior.Color = RGB(244, 204, 204) .Font.Color = RGB(156, 0, 6) Case Else .Interior.ColorIndex = xlNone End Select End With Next ligne Application.ScreenUpdating = True MsgBox "La mise en forme du tableau est terminée.", vbInformationEnd Sub
Cette macro peut servir de base à un tableau de projets, de commandes, de tickets clients ou de tâches. Il suffit de modifier les noms de feuilles, les colonnes et les valeurs utilisées dans le Select Case.
Avec Interior.Color, Font.Color, ColorIndex et quelques boucles VBA, vous disposez déjà de tout le nécessaire pour rendre vos feuilles plus lisibles et plus dynamiques. La couleur ne remplace pas l’organisation des données, mais bien utilisée, elle attire le regard au bon endroit et transforme un tableau ordinaire en véritable outil de décision.
