Colorier une forme avec couleurs RGB comme variables
Résolu
ardagh
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
ardagh Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
ardagh Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je travaille sur une macro qui me permettrait de colorier les départements d'une carte de France.
J'ai, à la lecture des sujets concernés sur le forum, pu reprendre une macro qui me colorie les dpts sur la base des couleurs de base de windows (les 56 couleurs).
Or je cherche à colorier les dpts
- par des couleurs rgb (plus de choix de dégradé sur une couleur type)
- par une couleur qui varie en fonction du résultat du dpt (ligne de dpt = variable)
Malgré des recherches nombreuses sur ce forum et d'autres, je butte sur la synthaxe de la macro.
Le code suivant fonctionne avec les couleurs de base, où "ligne" est ma variable :
Selection.ShapeRange.Fill.ForeColor.SchemeColor = Sheets("Départements").Cells(ligne, 6)
Le code suivant, que j'ai retravaillé pour avoir la couleur en rgb, ne fonctionne que si je lui donne la valeur exacte que je veux voir apparaître. Or, je souhaiterais que cette couleur soit en variable.
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(11, 55, 30)
Comment faire pour remplacer "RGB(11, 55, 30)" par une variable ligne sachant que les codes rgb sont en colonnes G, H, et I de ma feuille, et que j'ai même reconstitué le code RGB complet en colonne J (peut-on l'utiliser comme tel ?)
En PJ la photo de ma source d'infos.
Merci à tous pour vos précieux conseils.

Je travaille sur une macro qui me permettrait de colorier les départements d'une carte de France.
J'ai, à la lecture des sujets concernés sur le forum, pu reprendre une macro qui me colorie les dpts sur la base des couleurs de base de windows (les 56 couleurs).
Or je cherche à colorier les dpts
- par des couleurs rgb (plus de choix de dégradé sur une couleur type)
- par une couleur qui varie en fonction du résultat du dpt (ligne de dpt = variable)
Malgré des recherches nombreuses sur ce forum et d'autres, je butte sur la synthaxe de la macro.
Le code suivant fonctionne avec les couleurs de base, où "ligne" est ma variable :
Selection.ShapeRange.Fill.ForeColor.SchemeColor = Sheets("Départements").Cells(ligne, 6)
Le code suivant, que j'ai retravaillé pour avoir la couleur en rgb, ne fonctionne que si je lui donne la valeur exacte que je veux voir apparaître. Or, je souhaiterais que cette couleur soit en variable.
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(11, 55, 30)
Comment faire pour remplacer "RGB(11, 55, 30)" par une variable ligne sachant que les codes rgb sont en colonnes G, H, et I de ma feuille, et que j'ai même reconstitué le code RGB complet en colonne J (peut-on l'utiliser comme tel ?)
En PJ la photo de ma source d'infos.
Merci à tous pour vos précieux conseils.

A voir également:
- Récupérer le code couleur rgb d'une cellule excel
- Excel cellule couleur si condition texte - Guide
- Code ascii - Guide
- Liste déroulante excel - Guide
- Proteger cellule excel - Guide
- Excel compter cellule couleur sans vba - Guide
3 réponses
Bonjour,
tu trouveras tout ce qui t’intéresse ici avec un classeur à télécharger
https://silkyroad.developpez.com/VBA/ConversionCodesCouleurs/
tu trouveras tout ce qui t’intéresse ici avec un classeur à télécharger
https://silkyroad.developpez.com/VBA/ConversionCodesCouleurs/
Merci Le Pivert pour avoir pris le temps de me répondre.
J'ai néanmoins quelques difficultés liées au fait que je ne maitrise pas tout dans les macros, en particulier avec des variables :
- le fichier à télécharger pour avoir la traduction des couleurs me pose problème car à l'ouverture il me dit la chose suivante "Erreur de compilation - le code contenu dans ce projet doit être mis à jour pour pouvoir être utilisé sur les systèmes 64 bits. Vérifiez et mettez à jour les instructions Declare puis marquez les avec l'attribut PtrSafe". Là je suis un peu sec ...
- j'ai bien repris le 1er code vba que tu m'avais donné ci-dessus (plus simple pour moi que le 2nd), je l'ai adapté pour mettre ma variable, et ça fonctionne. Il reste juste un petit souci, c'est que la couleur attribuée à chaque dpt est celle de la 1° ligne de couleur, ça ne passe pas à la suivante alors que la macro tourne sans problème pourtant. Tout le pays est donc de la même couleur. J'ai du mal à comprendre pourquoi.
Voici le code que j'ai dans ma macro :
Sub testcouleurs()
ligne = 3
Dim r As Long
Dim v As Long
Dim b As Long
r = Worksheets("Départements").Range("G" & ligne).Value
v = Worksheets("Départements").Range("H" & ligne).Value
b = Worksheets("Départements").Range("I" & ligne).Value
For N = 1 To ActiveSheet.Shapes.Count
ActiveSheet.Shapes(N).Select
Sheets("Départements").Cells(ligne, 5) = "Forme libre " & Replace(Selection.Name, "Freeform ", "")
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(r, v, b)
ligne = ligne + 1
Next N
End Sub
Merci pour ton aide car je ne comprends pas ce qui coince.
J'ai néanmoins quelques difficultés liées au fait que je ne maitrise pas tout dans les macros, en particulier avec des variables :
- le fichier à télécharger pour avoir la traduction des couleurs me pose problème car à l'ouverture il me dit la chose suivante "Erreur de compilation - le code contenu dans ce projet doit être mis à jour pour pouvoir être utilisé sur les systèmes 64 bits. Vérifiez et mettez à jour les instructions Declare puis marquez les avec l'attribut PtrSafe". Là je suis un peu sec ...
- j'ai bien repris le 1er code vba que tu m'avais donné ci-dessus (plus simple pour moi que le 2nd), je l'ai adapté pour mettre ma variable, et ça fonctionne. Il reste juste un petit souci, c'est que la couleur attribuée à chaque dpt est celle de la 1° ligne de couleur, ça ne passe pas à la suivante alors que la macro tourne sans problème pourtant. Tout le pays est donc de la même couleur. J'ai du mal à comprendre pourquoi.
Voici le code que j'ai dans ma macro :
Sub testcouleurs()
ligne = 3
Dim r As Long
Dim v As Long
Dim b As Long
r = Worksheets("Départements").Range("G" & ligne).Value
v = Worksheets("Départements").Range("H" & ligne).Value
b = Worksheets("Départements").Range("I" & ligne).Value
For N = 1 To ActiveSheet.Shapes.Count
ActiveSheet.Shapes(N).Select
Sheets("Départements").Cells(ligne, 5) = "Forme libre " & Replace(Selection.Name, "Freeform ", "")
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(r, v, b)
ligne = ligne + 1
Next N
End Sub
Merci pour ton aide car je ne comprends pas ce qui coince.
C'est normal ligne reste à 3 pour les variables qui ne sont pas intégrées dans la boucle:
essaie comme cela
@+ Le Pivert
Sub testcouleurs() ligne = 3 Dim r As Long Dim v As Long Dim b As Long For N = 1 To ActiveSheet.Shapes.Count r = Worksheets("Départements").Range("G" & ligne).Value v = Worksheets("Départements").Range("H" & ligne).Value b = Worksheets("Départements").Range("I" & ligne).Value ActiveSheet.Shapes(N).Select Sheets("Départements").Cells(ligne, 5) = "Forme libre " & Replace(Selection.Name, "Freeform ", "") Selection.ShapeRange.Fill.ForeColor.RGB = RGB(r, v, b) ligne = ligne + 1 Next N End Sub
essaie comme cela
@+ Le Pivert
Je t'ai indiqué le lien pour les couleurs en Long.
Si tu traduis la valeur RGB en valeur Long cela ne te fera qu'une variable
tu pourras utiliser cette ligne de code:
Ce qui donne:
@+ Le Pivert