Menu

Colorier une forme avec couleurs RGB comme variables [Résolu]

Messages postés
3
Date d'inscription
vendredi 11 janvier 2019
Dernière intervention
16 janvier 2019
- - Dernière réponse : ardagh
Messages postés
3
Date d'inscription
vendredi 11 janvier 2019
Dernière intervention
16 janvier 2019
- 16 janv. 2019 à 10:55
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.

Afficher la suite 

Votre réponse

3 réponses

Messages postés
5691
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 janvier 2019
464
0
Merci
Bonjour,

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

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


cs_Le Pivert
Messages postés
5691
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 janvier 2019
464 -
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
Commenter la réponse de cs_Le Pivert
Messages postés
3
Date d'inscription
vendredi 11 janvier 2019
Dernière intervention
16 janvier 2019
0
Merci
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.
cs_Le Pivert
Messages postés
5691
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 janvier 2019
464 -
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
Commenter la réponse de ardagh
Messages postés
3
Date d'inscription
vendredi 11 janvier 2019
Dernière intervention
16 janvier 2019
0
Merci
Mais oui bien sûr .... !
C'était évident.
Ca marche parfaitement désormais.
Un grand merci pour ton aide.

Ardagh
Commenter la réponse de ardagh