Colorier un forme de la feuille 2 en fonction d'une cellule de 1
Lea9344 -
.
Je suis une débutante VBA, j'apprends en cherchant sur les forums comme celui-ci.
Je voudrais colorier une forme de la feuille 2 en fonction de la valeur d'une cellule de la feuille 1.
Pour l'instant j'ai trouvé le code pour changer la couleur de la forme en fonction d'une cellule seulement si cette cellule est dans la même feuille que la forme.
Mais ce n'est pas exactement ce que je veux :
.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Shp
Set Shp = ThisWorkbook.Worksheets("Feuil2").Shapes("Ellipse 67")
' je voudrais ici qu'il s'agisse de la cellule A1 de la "Feuil1"
If Range("A1") < 100 Then
Shp.Fill.ForeColor.RGB = RGB(239, 51, 35) 'rouge
Else
Shp.Fill.ForeColor.RGB = RGB(0, 103, 56) 'vert
End If
End Sub
.
Comment faire pour colorier une forme d'une feuil2 en fonction d'une cellule d'une feuil1?
.
Merci de votre aide
7 réponses
La question porte sur colorier une forme sur Feuil2 selon la valeur d’une cellule de Feuil1 via VBA, afin que le changement graphique dépende d’un seuil entre feuilles. La solution clé consiste à qualifier explicitement la feuille dans la référence, par exemple If Sheets("Feuil1").Range("A1").Value < 100 Then, pour modifier la couleur de la forme sur Feuil2. Des réponses suggèrent aussi d’écrire le code dans un module puis d’appeler la macro depuis la feuille, mais l’approche la plus fiable demeure la qualification directe de la feuille pour Range. En pratique, il faut éviter Range sans préfixe et veiller à comparer la valeur avec .Value, afin d’éviter des erreurs si la feuille active n’est pas celle contenant les cellules.
-
Bonjour
Indique le nom de la feuille avant le Range :
If Sheets("Feuil1").Range("A1") < 100 Then
Cdlmnt
Via -
-
Bonjour,
L'exemple que vous m'avez proposé est très intéressant, cependant, je n'arrive pas à le réutiliser lorsque je veux changer la couleure d'une forme qui est dans une autre feuille que celle où se trouvent les cellules colorées et formules.
Comment peut-on modifier la formule afin que cela fonctionne ?
Autrement, cela m'intéresserai beaucoup de pouvoir modifier cette fois, non pas la couleur de fond de la forme, mais la couleur du couleur ou encore, la couleur du texte contenu dans la forme.
Est-il possible d'adapter la formule pour atteindre cet objectif ?
Merci d'avance pour votre aide! :)
-
-
Bonjour
peu expérimenté en VBA je peux dire des bêtises (oh oui) mais je n'ai jamais réussi à faire fonctionner un code feuille en faisant référence à des cellules hors feuille.
La solution que j'emploie pour contourner le problème:
écrire le code dans un module
lancer la macro dans le code feuille avec CALL nom_macro
Ça pourrait peut être alors fonctionner avec Range("Feuil1A1")
en attendant les experts en la matière!!
crdlmnt
-
-
-
Re,
un exemple sur activation feuille:
a mettre dans VBA de ThisWotkbook
Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim Shp If Sh.Name = "Feuil2" Then Set Shp = ThisWorkbook.Worksheets("Feuil2").Shapes("Ellipse 67") ' je voudrais ici qu'il s'agisse de la cellule A1 de la "Feuil1" If Worksheets("Feuil1").Range("A1") < 100 Then Shp.Fill.ForeColor.RGB = RGB(239, 51, 35) 'rouge ActiveSheet.Shapes.Range(Array("Ellipse 67")).Select With Selection.ShapeRange.TextFrame2.TextRange.Font.Fill .Visible = msoTrue .ForeColor.RGB = RGB(0, 103, 56) 'vert .Transparency = 0 .Solid End With Else Shp.Fill.ForeColor.RGB = RGB(0, 103, 56) 'vert ActiveSheet.Shapes.Range(Array("Ellipse 67")).Select With Selection.ShapeRange.TextFrame2.TextRange.Font.Fill .Visible = msoTrue .ForeColor.RGB = RGB(239, 51, 35) 'rouge .Transparency = 0 .Solid End With End If End If End Sub -
-
-
-
-
Bonjour,
Vos fichiers sont des exemples impeccables pour Lea9344, mais ce qui pose probleme pour cette personne, ce n'est le moyen mais le travail a faire pour ces onglets(+de 50 formes dans certains) car tout VBA ou formules et VBA faut tapoter avec ses petits doigts!!! Y a pas de miracle, je vais regarder si possible de reduire au maximum avec tout VBA, mais restera quand-meme un minimum. -
Bonjour Boisgontier,
En effet vos exemples sont vraiment top!
J'ai cependant quelques questions pour pouvoir les adapter à mes fichiers:
1) Est-il possible de changer la couleur du contour de la forme par une formule équivalente ?
2) Est-il possible de changer la couleur de la police contenu dans une forme par une formule équivalente ?
3) Dans mes fichiers, le rouge et le vert sont les suivant :
RGB(218, 41, 28) 'rouge
RGB(54, 101, 56) 'vert
Comment puis-je l'adapter à votre formule ?
=ColorieImage(B9;SI(TG!D3>=TG!D4;65025;SI(TG!D3>TG!D4*95%;4626167;255)))
Merci d'avance pour votre aide,
Léa -
-
-
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Re,
'Tableau de donnees et formules sur une feuille et Shapes sur une autre
'exemple de formule
'=colorieimage("2014";Ellipse 1";"ZoneTexte 1";SI(B3>=100;1845722;3695926))
'code dans un moduleFunction ColorieImage(feuille, s1, s2, couleur) Application.Volatile Set f = Sheets(feuille) f.Shapes(s1).Fill.ForeColor.RGB = couleur 'Elipse f.Shapes(s2).Line.ForeColor.RGB = couleur ' Contour Zone de texte f.Shapes(s2).TextFrame2.TextRange.Font.Fill.ForeColor.RGB = couleur 'Texte Zne de texte End Function-
Bonjour f894009 et merci pour votre aide!
Malheureusement, je n'arrive pas à faire fonctionner votre macro, j'ai pourtant suivi à la lettre vos consignes mais cela ne fonctionne pas.
J'ai repris le document de Boisgontierjacques et ai fait quelques modifications en suivant vos indications, mais je n'arrive pas à différencier les formes rondes, des formes rectangulaires. Comment faire ?
Ci-dessous, le lien vers mon document en cours :
http://www.cjoint.com/c/EKcqxLP6Umh
Merci d'avance,
Léa- Bonjour,
fichier modifie avec "ma macro": https://www.cjoint.com/c/EKcr3mBgvqf
Une seule formule pour les deux formes
A+
-
-
Bonjour,
https://www.cjoint.com/c/EJqpGO1nH3W
http://boisgontierjacques.free.fr/fichiers/Images/Indic.xls
=colorieimage(B2;SI(Feuil1!B2<100;couleurcellule(rouge);couleurcellule(vert)))
Boisgontier-
Bonjour Boisgontierjacques,
Merci pour votre retour, cela m'a permis d'avancer. Cependant, je reste toujours bloquer sur un point : comment puis-je différencier les deux types de formes :
- rondes : colorier seulement le fond de la forme
- rectangle : colorier le contour + colorier le texte de la forme
Ci-dessous, le lien vers mon document en cours :
http://www.cjoint.com/c/EKcqxLP6Umh
Bonne journée,
Léa
-
-
Bonsoir,
http://boisgontierjacques.free.fr/fichiers/Images/Indic1.xls
Il faut créer 2 fonctions
=colorieRond(B4;SI(Data!B2<100;couleurcellule(rouge);couleurcellule(vert)))
=colorieRectangle(B4&"2";SI(Data!B3<0;couleurcellule(rouge);couleurcellule(vert)))
Les formules sont copiables
Function ColorieRond(s, couleur)
Application.Volatile
Set f = Sheets(Application.Caller.Parent.Name)
f.Shapes(s).Fill.ForeColor.RGB = couleur
f.Shapes(s).TextFrame2.TextRange.Font.Fill.ForeColor.RGB = vbBlack
ColorieRond = ""
End Function
Function ColorieRectangle(s, couleur)
Application.Volatile
Set f = Sheets(Application.Caller.Parent.Name)
f.Shapes(s).Fill.ForeColor.RGB = vbWhite
f.Shapes(s).TextFrame2.TextRange.Font.Fill.ForeColor.RGB = couleur
f.Shapes(s).Line.ForeColor.RGB = couleur
ColorieRectangle = ""
End Function
Function CouleurCellule(c As Range)
Application.Volatile
CouleurCellule = c.Interior.Color
End Function
Boisgontier