Changer la couleur d'une forme liée à une cellule

Bonjour,

J'essaie de faire de la cartographie dans excel. J'aimerai faire évoluer les couleurs de ma carte à l'aide d'une zone de liste déroulante. Chaque date est liée à une cellule qui contient le nom d'une couleur( la couleur peut varier dans une même case). J'aimerai faire apparaître les couleurs sur la carte. Pour ce faire, la base de données contient dans la colonne T : les dates, dans la colonne U les couleurs du département du var, dans la colonne V les couleurs des alpes maritimes et la colonne W les couleurs du vaucluse. La liste déroulante détient la colonne des dates. Le choix de la liste déroulante donne une valeur unique pour tous les départements. cette valeur est ensuite transmise, à trois cellule qui vont faire sortir la couleur de chaque département. Par exemple, pour le 01/01/2012 à 03h00 : la cellule Q35 va donner la couleur orange pour le var, la cellule R35 va donner la couleur rouge pour les alpes maritimes et la cellule S35 va donner la couleur rouge pour le vaucluse. Le but est que la couleur de chaque cellule colore le département lié. Pouvez vous m'aider ?

Je vous remercie par avance.

118classeur1.xlsx (38.71 Ko)

Bonjour yodd,

pour modifier la couleur d'un "Shape" il faut passer par vba,

par exemple

Set Shp = ActiveSheet.Shapes("Freeform 2404")
Shp.OLEFormat.Object.Interior.Color = RGB(0, 255, 0)

Bonsoir sabV,

Je vous remercie pour votre réponse. Est il possible de rendre le mécanisme automatique. Par exemple avec une fonction SI.

If Q35=Rouge

Var sera colorié en rouge

Else Q35=Orange

Var sera colorié en orange

Else Q35=Vert

Var sera colorié en vert

Else Q35=Blanc

Var sera colorié en blanc

Et cette boucle sera répété pour chaque territoire avec les cellules associées.

Je suis novice en excel et encore plus en VBA. Savez vous comment mettre en forme cela ? Si oui, Pouvez vous m'expliquer ?

Je vous en serai très reconnaissant.

oui, mais il y a plusieurs shape

et je ne sais pas quel forme (shape) colorier

Freeform 2362

Freeform 2393

Freeform 2394

Freeform 2395

Freeform 2397

Freeform 2398

Freeform 2399

Freeform 2400

Freeform 2401

Freeform 2402

Freeform 2403

Freeform 2404

par exemple pour 5 2012-01-02 03:00 Orange Violet Rouge

quel shape sera orange ?

quel shape sera Violet ?

quel shape sera Rouge ?

Au temps pour moi, je n'ai pas changé le nom des formes. Pour Orange, la shape est freeform 2399. Pour violet, c'est la shape freeform 2395. et pour rouge, c'est la freeform 2404.

Voici un essai, dit moi si ça va ?

326yodd-carte.xlsm (47.14 Ko)

Bonsoir,

Avec quelques petits réaménagements (renommage formes, codes pour couleurs (dans plage nommée), etc.

Sub ClrDpt()
    Dim ccl%, i%, clr, uvw
    clr = Array(0, vbYellow, vbRed, vbGreen, RGB(255, 204, 0), RGB(204, 0, 204))
    With ActiveSheet
        ccl = .Shapes("Drop Down 1").ControlFormat.Value
        ccl = [cclr].Cells(ccl, 1)
        uvw = Array(ccl \ 100, (ccl \ 10) Mod 10, ccl Mod 10)
        .Shapes.Range(Array("VAR_", "VAR_2", "VAR_3", "VAR_4")).Fill.ForeColor.RGB = clr(uvw(0))
        .Shapes("AMA").Fill.ForeColor.RGB = clr(uvw(1))
        .Shapes.Range(Array("VAU_", "VAU_2")).Fill.ForeColor.RGB = clr(uvw(2))
    End With
End Sub

Pas tout à fait tel que je le voulais, la mise en variables pour mettre la coloration en boucle se heurte à une erreur "Index de la collection en dehors des limites"... alors que cela passe ainsi (?)

Cordialement.

87yodd-classeur1.xlsm (43.73 Ko)

tu ne peut pas utiliser

RGB(255, 204, 0) dans le Array, excel n'approuve pas,

il faut choisir parmis ceux là

vbRed

vbGreen

vbYellow

vbBlue

vbMagenta

vbCyan

Salut sabv !

Depuis quand ? RGB renvoie un entier Long, et les constantes couleurs VBA ne sont que des entiers Long !

Si je remplace vbRed par RGB(255, 0, 0), ce sera la même chose...

J'ai toujours fait des tableaux de couleurs ainsi, et Excel n'a jamais protesté !

Et d'ailleurs, ça fonctionne !

Cordialement.

tu as tout à fait raison, mmm.... j'ai parlé sans avoir testé,

il reste juste à ajuster le nom des departements

BDR

VAR_

AMA

aussi je ne sais pas d'ou vient les données de la plage cclr et à quoi ils correspondent

oublie ça, je viens de comprendre 422 = Orange Rouge Rouge

Sub ClrDpt()
    Dim ccl%, i%, clr, uvw
    clr = Array(0, vbYellow, vbRed, vbGreen, RGB(255, 204, 0), RGB(204, 0, 204))
    With ActiveSheet
        ccl = .Shapes("Drop Down 1").ControlFormat.Value
        ccl = [cclr].Cells(ccl, 1)
        uvw = Array(ccl \ 100, (ccl \ 10) Mod 10, ccl Mod 10)
        For Each shp In ActiveSheet.Shapes
         Select Case shp.Name
          Case "BDR": shp.Fill.ForeColor.RGB = clr(uvw(0))
          Case "VAR_": shp.Fill.ForeColor.RGB = clr(uvw(1))
          Case "AMA": shp.Fill.ForeColor.RGB = clr(uvw(2))
          Case Else: shp.Fill.ForeColor.RGB = RGB(255, 252, 229)
         End Select
        Next
    End With
End Sub

Bonjour,

Tout d'abord je tenais à vous remercier tous les deux, pour le temps que vous avez passé à essayer de résoudre mon problème.

sabV, j'ai regardé le fonctionnement de ton code, il me convient assez bien, par contre pourrais tu m'expliquer comment changer les couleurs ? Par exemple, si je veux mettre les couleurs rouge, orange, vert et blanc à la place des autres (violet, jaune,..). Est-il possible de les choisir de manière exacte comme dans le code de Mferrand ? Par exemple mettre pour le rouge (192,0,0), pour le orange(244,176,132), le vert (169,208,142) et le blanc (255,255,255).Si j'ai bien compris, pour ajouter des cases comme Q35, il faut ajouter des lignes couleurnombre=Range(cellule), et pour ajouter des shape : ajouter des lignes refcouleurnombre et des lignes activesheet.shapes?

Mferrand, le problème que je rencontre avec votre code, est qu'il ne peut pas fonctionner si les couleurs des colonnes U,V et W changent. Ces colonnes sont normalement dynamiques.

Mferrand, le problème que je rencontre avec votre code, est qu'il ne peut pas fonctionner si les couleurs des colonnes U,V et W changent. Ces colonnes sont normalement dynamiques.

D'abord, les couleurs utilisées doivent être prédifinies. En l'état il y en avait 5. Cela peut être modifié comme l'on veut à convenance mais on n'évitera pas la nécessité de définir à l'avance les couleurs utilisée ! Elles ne s'inventeront pas toutes seules...

A partir de là, je leur ai donné un numéro d'ordre de 1 à 5 et j'ai défini un tableau de couleur qui permet d'affecter l'une ou l'autre de ces 5 couleurs très facilement. Ce tableau peut changer, être augmenté, etc. le principe demeure.

J'ai traduit le choix des couleurs par un code numérique à 3 chiffres que tu trouves dans la colonne voisine. Par exemple 223. Ce code m'indiquera que je dois mettre le Var en rouge, les Alpes Mar en rouge et le Vaucluse en vert. Je n'ai alors qu'à éclater le code numérique en ces composantes : 2, 2 et 3 qui me permettront d'appeler la couleur voulue dans le tableau des couleurs.

On peut changer ce code en un code littéral (des lettres au lieu de chiffres), l'augmenter pour couvrir d'autres départements... Dès lors que le système de codification est défini, il permettra tous les changements sans avoir besoin de le modifier.

En l'état tu utilises 3 colonnes pour les couleurs de chaque département, une suffit pour mettre l'information... Tu peux souhaiter avoir 3 colonnes ou plus (une par dpt) à faire varier, et mettre des listes déroulantes pour le faire, dans ce cas il est aisé de traduire les variations dans une colonne code qui les rassemblera en un code unique.

Dit autrement : actuellement tout changement dans la colonne X (et elle seule), suffit à changer les couleurs. Si tu continues d'utiliser U, V et W pour modifier, il suffit donc que les modifications se traduisent automatiquement dans X ! (une simple formule...)

Cordialement.

Merci MFerrand pour la réponse. J'ai un niveau en code assez bas. J'essaye de comprendre la manière dont vous avez codé et comment il est possible d'ajouter des choses, ce qui est assez complexe pour moi. J'ai compris que la ligne clr du code permet de prédéfinir les couleurs et de leur donner un ordre (1,2,3,...). Pouvez vous me donner plus de détails sur son fonctionnement ligne par ligne ?

Bonjour à vous tous,

j'ai ajouté un tableau des couleurs sur le fichier de MFerrand pour facilité les modification de couleur, et une formule pour le tableau cclr. mais n' oublier de modifier cette ligne

clr = Array(0, vbYellow, vbRed, vbGreen, RGB(255, 204, 0), RGB(204, 0, 204))

une autre version, renseigner la colonne AA par un chiffre et appliquer une couleur aux cellule de la colonne Z

Je comprends un peu mieux le fonctionnement du code, merci sabV.

Bonjour,

Tu es sûr de tes nouvelles couleurs, je les trouve un peu désaturées, et rouge un peu sombre et orange plutôt rose-ocre...

Et les 3 autres départements, tu ne les colores pas ?

Je te suggère une table pour les couleurs, en 2 colonnes, une col. identifiant composé d'une lettre (ex. R, O, V...), autre col. la valeur RGB (ex : 192,0,0 ).

Et un autre système de mise en mémoire du tableau couleur (ça te fera découvrir d'autres facettes de VBA... )

Rechercher des sujets similaires à "changer couleur forme liee"