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   -
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.

A voir également:

3 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Bonjour,

tu trouveras tout ce qui t’intéresse ici avec un classeur à télécharger

https://silkyroad.developpez.com/VBA/ConversionCodesCouleurs/


0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Pour ton cas particulier tu peux faire cela:

Dim r As Long
Dim v As Long
Dim b As Long
r = Worksheets("Feuil1").Range("G3").Value 'a adapter
v = Worksheets("Feuil1").Range("H3").Value
b = Worksheets("Feuil1").Range("I3").Value
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(r, v, b)


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:

Selection.ShapeRange.Fill.ForeColor.SchemeColor = Sheets("Départements").Cells(ligne, 6) 


Ce qui donne:

Private Sub CommandButton1_Click()
Dim valeur As Long
valeur = VBA_RGB_To_Long(159, 217, 139)
Selection.ShapeRange.Fill.ForeColor.RGB = valeur
End Sub
Function VBA_RGB_To_Long(iRed As Integer, iGreen As Integer, iBlue As Integer) As Long
    VBA_RGB_To_Long = VBA.RGB(iRed, iGreen, iBlue)
End Function


@+ Le Pivert
0
ardagh Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
C'est normal ligne reste à 3 pour les variables qui ne sont pas intégrées dans la boucle:

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
0
ardagh Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Mais oui bien sûr .... !
C'était évident.
Ca marche parfaitement désormais.
Un grand merci pour ton aide.

Ardagh
0