Modifier la couleur de fonds d'un objet selon la valeur d'une cellule

troopers87

XLDnaute Occasionnel
Bonjour à tous,

je souhaiterais modifier la couleur de fonds d'un objet (une forme libre que j'ai nommé Secteur_1) selon la valeur d'une cellule qui est associée (que j'ai nommée Valeur_secteur_1).

Mon objectif est que, si la valeur de la cellule Valeur_secteur_1 change (par exemple, >20%) alors le fond bleu de la forme Secteur_1 passe du bleu au rouge, et inversement, évidemment.

J'ai bidouillé un petit bout de code mais... je suis loin de le gérer correctement.

Je joins un fichier exemple qui pourra peut-être guider une éventuelle aide, l'évènement est dans l'évènement Change, merci d'avance !
 

Pièces jointes

  • troopers_V1.xlsm
    12.4 KB · Affichages: 199

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Modifier la couleur de fonds d'un objet selon la valeur d'une cellule

Pour obtenir une description d'une fonction perso dans Insertio/fonction

Code:
Private Sub auto_Open()
  Application.MacroOptions Macro:="ColorieImage", Description:="Colorie un objet avec la couleur spécifiée", Category:=14
  Application.MacroOptions Macro:="Couleur", Description:="Donne la couleur de la cellule spécifiée", Category:=14
End Sub

Function ColorieImage(s, Couleur)
  Application.Volatile
  Set f = Sheets(Application.Caller.Parent.Name)
  f.Shapes(s).Fill.ForeColor.RGB = Couleur
End Function

Function Couleur(c As Range)
  Application.Volatile
  Couleur = c.Interior.Color
End Function

JB
 

Pièces jointes

  • Copie de troopers_V1.xls
    66 KB · Affichages: 132
  • Copie de troopers_V1.xls
    66 KB · Affichages: 83
  • Copie de troopers_V1.xls
    66 KB · Affichages: 103

troopers87

XLDnaute Occasionnel
Re : Modifier la couleur de fonds d'un objet selon la valeur d'une cellule

Bonjour à tous,

je reviens vers vous car j'ai un nouveau souci qui se rapproche énormément de ce post. Je ne pense pas qu'il soit nécesssaire d'en créer un autre.

Je voudrais modifier la couleur des flèches de certains axes selon la valeur qui leur est attribuée.

Deux idées nouvelles :
- je voudrais que les couleurs se mettent à jour automatiquement (dès que les données changent), je pense qu'il y a un lien avec le Enable event, mais je ne suis pas sûr ;
- je voudrais insérer des conditions doubles dans le Case (valeur >7% et <9% par exemple).

Je vous joins un fichier exemple, merci d'avance pour toute votre aide !

PS : je voudrais garder le nom des cellules si possible, car si je supprime ou ajoute une colonne, tout le code se retrouve par terre !
 

Pièces jointes

  • Exemple v1.xls
    57.5 KB · Affichages: 123
  • Exemple v1.xls
    57.5 KB · Affichages: 90
  • Exemple v1.xls
    57.5 KB · Affichages: 88

Paf

XLDnaute Barbatruc
Re : Modifier la couleur de fonds d'un objet selon la valeur d'une cellule

Bonjour,

il ne manquait pas grand chose !
dans Private Sub Worksheet_Change(ByVal Target As Range), remplacer tous les

Shapes.Range(Array("Axe_site1")).Fill.ForeColor.RGB = RGB(xxx, xxx, xxx)

par
Shapes.Range(Array("Axe_site1")).Line.ForeColor.RGB = RGB(xxx, xxx, xxx)

idem pour "Axe_site2"

A+
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Modifier la couleur de fonds d'un objet selon la valeur d'une cellule

Bonjour,

Avec des fonctions perso

Code:
=colorieimage("Axe_site1";SI(Taux_site1>=Min_Rouge; couleur(Min_Rouge);SI(Taux_site1>=Min_Orange;couleur(Min_Orange);SI(Taux_site1>Min_vert;couleur(Min_vert);0))))

La maj est automatique

Code:
Function ColorieImage(s, couleur)
  Application.Volatile
  Set f = Sheets(Application.Caller.Parent.Name)
  f.Shapes(s).Line.ForeColor.RGB = couleur
End Function

JB
 

Pièces jointes

  • Copie de Exemple v1-1.xls
    58 KB · Affichages: 89
Dernière édition:

troopers87

XLDnaute Occasionnel
Re : Modifier la couleur de fonds d'un objet selon la valeur d'une cellule

Ah Paf, merci pour ton aide ! Je venais de découvrir tout seul la solution !
Deplus, en ce qui concerne la mise à jour automatique, il suffisait de sélectionner l'évènement "Activate" (= sélection de la feuille) plutôt que "Change".

Merci à toi aussi pour ta participation, BoisGontier !
 

Paf

XLDnaute Barbatruc
Re : Modifier la couleur de fonds d'un objet selon la valeur d'une cellule

re

après tests plus sérieux, l'enchainement des > et < dans chaque case posait soucis :
quelle que soit la valeur de Taux_site2 (pareil pour Taux_site1) le test déterminait que l'on était supérieur à Min_vert et donc affichait la couleur verte.

donc modifications suivantes:
-suppression de la double condition
-inversion de l'ordre des Case ( du plus grand au plus petit)
-modification du test > en >= ( à adapter en fonction de la limite de plage)
Code:
If Target = Range("Taux_site2") Then
With Shapes.Range(Array("Axe_site2"))
Cas_Taux_Site2 = Range("Taux_Site2").Value
    Select Case Cas_Taux_Site2
        Case Is >= Range("Min_rouge")
            .Line.ForeColor.RGB = RGB(255, 102, 0)
        Case Is >= Range("Min_orange")
            .Line.ForeColor.RGB = RGB(255, 153, 0)
        Case Is >= Range("Min_vert")
            .Line.ForeColor.RGB = RGB(0, 255, 0)
    End Select
End With
End If

pareil pour site1.

Finalement la solution de BOISGONTIER est bien plus simple

Bonne suite
 
Dernière édition:

MistereVBA

XLDnaute Nouveau
Bonjour,

Je suis débutante en VBA (novice même) et malgré mes nombreuses tentatives grâce à l'aide de cette discussion, je ne parviens toujours pas à réaliser ce que je souhaite. Pouvez-vous m’aider ?

Mise en situation :
Nous sommes dans une entreprise et il y eu des accidents du travail.
Je souhaite que mon bonhomme change de couleurs lorsque les pourcentages du tableau varient.


Exemple :
Le pourcentage pour les « Doigts et mains » est de 25%, les formes « Main_G » et « Main_D » devraient être en rouge.

J’attends avec impatience une aide de votre part.

MERCI d’avance !

PS : ce fichier sera réalisé sur Excel2016 par la suite.
 

Pièces jointes

  • exercice forum.xlsx
    22.5 KB · Affichages: 24

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

@MistereVBA [Bienvenue sur le forum]
L'usage c'est de créer sa propre discussion pour poser sa question plutôt que de déterrer un fil tout plein de poussière ;)
(Cela évite de répendre des allergènes dans les cellules de nos tableurs)
Cela permets également ne pas se mélanger les pinceaux et de garder la lecture du fil fluide.
 

MistereVBA

XLDnaute Nouveau
Bonsoir le fil, le forum

@MistereVBA [Bienvenue sur le forum]
L'usage c'est de créer sa propre discussion pour poser sa question plutôt que de déterrer un fil tout plein de poussière ;)
(Cela évite de répendre des allergènes dans les cellules de nos tableurs)
Cela permets également ne pas se mélanger les pinceaux et de garder la lecture du fil fluide.

Très bien, je redirige ce topic ! Merci ;)
 

Discussions similaires