Excel Mania

Couleurs VBA : personnaliser les cellules et les graphiques dans Excel

Couleurs VBA : personnaliser les cellules et les graphiques dans Excel

Couleurs VBA : personnaliser les cellules et les graphiques dans Excel

Dans Excel, la couleur ne sert pas uniquement à rendre un tableau plus agréable à regarder. Elle permet aussi de mettre en évidence une anomalie, de distinguer une catégorie ou de guider rapidement la lecture d’un rapport. Avec VBA, vous pouvez automatiser cette mise en forme en quelques lignes de code et appliquer les mêmes règles à des centaines de cellules ou à plusieurs graphiques.

Bonne nouvelle : il n’est pas nécessaire de mémoriser une liste interminable de références de couleurs. VBA propose plusieurs méthodes simples, depuis les couleurs prédéfinies jusqu’au célèbre système RGB. Voyons comment les utiliser proprement, avec des exemples directement réutilisables dans vos fichiers Excel.

Accéder à l’éditeur VBA

Avant de modifier les couleurs avec VBA, ouvrez l’éditeur Visual Basic en appuyant sur Alt + F11. Dans le menu Insertion, choisissez ensuite Module. C’est dans ce module que vous pourrez coller les macros présentées dans cet article.

Pour exécuter une macro, placez le curseur dans le code puis appuyez sur F5. Vous pouvez également retourner dans Excel avec Alt + F8, sélectionner la macro et cliquer sur Exécuter.

Pensez à enregistrer votre fichier au format .xlsm. Sinon, Excel supprimera votre code VBA à la fermeture du classeur. Ce serait dommage de passer dix minutes à personnaliser vos couleurs pour les voir disparaître comme par magie.

Modifier la couleur de fond d’une cellule

La propriété la plus utilisée pour changer la couleur de fond est Interior.Color. Elle s’applique à une cellule, une plage ou même à une feuille entière.

Sub ColorerUneCellule()    Range("B2").Interior.Color = RGB(255, 255, 0)End Sub

Dans cet exemple, la cellule B2 devient jaune. La fonction RGB utilise trois valeurs :

Chaque valeur doit être comprise entre 0 et 255. Par exemple, RGB(255, 0, 0) correspond au rouge, tandis que RGB(0, 128, 0) produit un vert foncé.

Vous pouvez également appliquer une couleur à une plage complète :

Sub ColorerUnePlage()    Range("B2:E8").Interior.Color = RGB(221, 235, 247)End Sub

Cette méthode est particulièrement pratique pour créer automatiquement des en-têtes, différencier des blocs de données ou signaler une zone à compléter.

Utiliser les couleurs prédéfinies de VBA

Pour les couleurs les plus courantes, VBA propose des constantes faciles à retenir. Vous pouvez les utiliser avec la propriété Interior.Color.

Sub CouleursClassiques()    Range("A1").Interior.Color = vbRed    Range("A2").Interior.Color = vbGreen    Range("A3").Interior.Color = vbBlue    Range("A4").Interior.Color = vbYellow    Range("A5").Interior.Color = vbWhite    Range("A6").Interior.Color = vbBlackEnd Sub

Ces constantes sont simples et lisibles. En revanche, elles offrent peu de nuances. Pour obtenir un gris clair, un bleu pastel ou une couleur correspondant à votre charte graphique, préférez RGB.

Voici quelques exemples utiles :

Changer la couleur du texte

La couleur de fond attire l’attention, mais la couleur de la police permet de renforcer la hiérarchie visuelle. Pour la modifier, utilisez la propriété Font.Color.

Sub ModifierLaPolice()    With Range("A1:D1")        .Interior.Color = RGB(31, 78, 121)        .Font.Color = vbWhite        .Font.Bold = True    End WithEnd Sub

Le bloc With évite de répéter la référence de la plage. Ici, les cellules A1 à D1 deviennent bleu foncé, avec un texte blanc et gras. Cette combinaison fonctionne très bien pour les titres de tableaux.

Vous pouvez aussi modifier uniquement une partie d’une cellule grâce aux propriétés de la police :

Sub MettreEnEvidence()    With Range("C5")        .Font.Color = RGB(192, 0, 0)        .Font.Bold = True    End WithEnd Sub

Dans un tableau de suivi, cette technique peut servir à afficher les valeurs négatives en rouge ou les échéances dépassées dans une teinte plus visible.

Colorer automatiquement selon la valeur

L’un des usages les plus intéressants de VBA consiste à appliquer une couleur selon le contenu d’une cellule. Imaginons une colonne D contenant des statuts : « Terminé », « En cours » et « En retard ».

Sub ColorerLesStatuts()    Dim cellule As Range    For Each cellule In Range("D2:D100")        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.Pattern = xlNone                cellule.Font.Color = vbBlack        End Select    Next celluleEnd Sub

La boucle For Each parcourt chaque cellule de D2 à D100. L’instruction Select Case applique la mise en forme adaptée à chaque statut.

La ligne cellule.Interior.Pattern = xlNone retire la couleur de fond lorsque la cellule ne correspond à aucun statut. C’est une précaution utile : si une valeur est modifiée, l’ancienne couleur ne reste pas affichée par erreur.

Colorer les nombres positifs et négatifs

Pour un tableau financier, un budget ou un suivi de résultats, vous pouvez distinguer automatiquement les nombres positifs, négatifs et nuls.

Sub ColorerLesMontants()    Dim cellule As Range    For Each cellule In Range("E2:E50")        If IsNumeric(cellule.Value) And cellule.Value <> "" Then            If cellule.Value > 0 Then                cellule.Font.Color = RGB(0, 128, 0)            ElseIf cellule.Value < 0 Then                cellule.Font.Color = RGB(192, 0, 0)            Else                cellule.Font.Color = RGB(128, 128, 128)            End If        End If    Next celluleEnd Sub

La fonction IsNumeric évite de comparer du texte à un nombre. C’est une petite vérification, mais elle permet d’éviter des erreurs lorsque la plage contient des cellules vides ou des libellés.

Vous pouvez remplacer la couleur de police par une couleur de fond si vous souhaitez obtenir un signal visuel plus marqué :

If cellule.Value < 0 Then    cellule.Interior.Color = RGB(255, 199, 206)End If

Réinitialiser les couleurs d’une plage

Avant d’appliquer une nouvelle mise en forme, il peut être utile de supprimer les anciennes couleurs. La propriété Pattern permet de remettre le fond à son état standard.

Sub ReinitialiserLesCouleurs()    With Range("A1:F100")        .Interior.Pattern = xlNone        .Font.Color = vbBlack        .Font.Bold = False    End WithEnd Sub

Cette macro remet à zéro la couleur de fond, la couleur du texte et le gras. Elle peut être associée à un bouton « Réinitialiser » dans un tableau de bord.

Si vous souhaitez conserver certaines mises en forme, limitez la plage concernée. Une macro trop large peut rapidement transformer un tableau soigneusement préparé en grande zone blanche. Excel pardonne beaucoup de choses, mais pas toujours les macros trop enthousiastes.

Créer une palette de couleurs réutilisable

Pour garder une apparence cohérente, vous pouvez centraliser les couleurs dans des constantes. Cette méthode évite de rechercher les valeurs RGB dans plusieurs procédures.

Sub AppliquerUnePalette()    Const BleuPrincipal As Long = 7935487    Const BleuClair As Long = 15986304    Const GrisClair As Long = 15921906    With Range("A1:D1")        .Interior.Color = BleuPrincipal        .Font.Color = vbWhite        .Font.Bold = True    End With    Range("A2:D10").Interior.Color = BleuClair    Range("A12:D12").Interior.Color = GrisClairEnd Sub

La valeur numérique d’une couleur VBA peut être difficile à lire. Dans la plupart des cas, l’utilisation directe de RGB reste plus explicite :

Const BleuPrincipal As Long = RGB(31, 78, 121)

Selon la version d’Excel et le contexte, VBA peut refuser RGB dans une déclaration Const. Si cela se produit, utilisez plutôt des variables initialisées au début de la procédure.

Modifier la couleur d’une série dans un graphique

Les graphiques Excel possèdent eux aussi leurs propriétés de couleur. Pour cibler un graphique, vous pouvez utiliser son nom ou parcourir les graphiques présents sur la feuille.

Sub ColorerUneSerie()    Dim graphique As Chart    Dim serie As Series    Set graphique = ActiveSheet.ChartObjects("Graphique 1").Chart    Set serie = graphique.SeriesCollection(1)    serie.Format.Fill.ForeColor.RGB = RGB(31, 78, 121)    serie.Format.Line.ForeColor.RGB = RGB(31, 78, 121)End Sub

La première série du graphique prend ici une couleur bleu foncé. La propriété Format.Fill.ForeColor.RGB modifie le remplissage des colonnes, des barres ou de la zone de la série. La propriété Format.Line.ForeColor.RGB modifie sa bordure ou sa ligne.

Le nom « Graphique 1 » doit correspondre au nom réel de votre graphique. Pour le vérifier, sélectionnez le graphique dans Excel et regardez la zone de nom située à gauche de la barre de formule.

Colorer plusieurs séries avec une boucle

Si votre graphique comporte plusieurs séries, une boucle permet d’attribuer automatiquement une couleur différente à chacune d’elles.

Sub ColorerLesSeries()    Dim graphique As Chart    Dim i As Long    Dim couleurs As Variant    Set graphique = ActiveSheet.ChartObjects("Graphique 1").Chart    couleurs = Array( _        RGB(31, 78, 121), _        RGB(112, 173, 71), _        RGB(237, 125, 49), _        RGB(165, 165, 165))    For i = 1 To graphique.SeriesCollection.Count        graphique.SeriesCollection(i).Format.Fill.ForeColor.RGB = _            couleurs((i - 1) Mod (UBound(couleurs) + 1))        graphique.SeriesCollection(i).Format.Line.ForeColor.RGB = _            couleurs((i - 1) Mod (UBound(couleurs) + 1))    Next iEnd Sub

Le tableau couleurs contient quatre teintes. L’opérateur Mod permet de recommencer au début de la palette si le graphique contient plus de quatre séries.

Cette approche est pratique pour harmoniser plusieurs graphiques d’un même rapport. Vous pouvez naturellement remplacer les couleurs proposées par celles de votre entreprise ou de votre modèle Excel.

Modifier la couleur d’un point précis

Vous souhaitez mettre en avant le meilleur résultat dans un graphique ? Il est possible de colorer un point individuel au lieu de modifier toute la série.

Sub MettreEnEvidenceUnPoint()    Dim graphique As Chart    Set graphique = ActiveSheet.ChartObjects("Graphique 1").Chart    With graphique.SeriesCollection(1).Points(4)        .Format.Fill.ForeColor.RGB = RGB(192, 0, 0)        .Format.Line.ForeColor.RGB = RGB(192, 0, 0)    End WithEnd Sub

Dans cet exemple, le quatrième point de la première série devient rouge. Cette technique fonctionne bien pour attirer l’attention sur un mois particulier, une valeur exceptionnelle ou un objectif dépassé.

Quelques bonnes pratiques pour vos couleurs VBA

Une mise en forme automatisée doit aider à comprendre les données, pas transformer la feuille en feu d’artifice. Une couleur bien choisie attire l’œil au bon endroit ; dix couleurs utilisées simultanément attirent l’œil partout.

Une macro complète pour un tableau de suivi

Pour terminer, voici un exemple combinant plusieurs techniques. La macro colore les statuts, met en forme l’en-tête et adapte la couleur des montants.

Sub MettreEnFormeLeSuivi()    Dim cellule As Range    With Range("A1:E1")        .Interior.Color = RGB(31, 78, 121)        .Font.Color = vbWhite        .Font.Bold = True    End With    For Each cellule In Range("D2:D100")        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.Pattern = xlNone                cellule.Font.Color = vbBlack        End Select    Next cellule    For Each cellule In Range("E2:E100")        If IsNumeric(cellule.Value) And cellule.Value <> "" Then            If cellule.Value < 0 Then                cellule.Font.Color = RGB(192, 0, 0)            Else                cellule.Font.Color = RGB(0, 128, 0)            End If        End If    Next celluleEnd Sub

Avec quelques adaptations, cette base peut servir à automatiser un tableau commercial, un suivi de projets, une liste de tâches ou un reporting financier. Commencez par une seule règle de couleur, testez-la, puis ajoutez progressivement les suivantes. C’est la meilleure façon de garder un code lisible et un fichier agréable à utiliser.

Quitter la version mobile