Colorier un forme de la feuille 2 en fonction d'une cellule de 1
lea9344
-
Lea9344 -
Lea9344 -
Bonjour à tous,
.
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
.
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
A voir également:
- Colorier un forme de la feuille 2 en fonction d'une cellule de 1
- Mise en forme conditionnelle excel - Guide
- Fonction si et - Guide
- Verrouiller cellule excel sans verrouiller la feuille - Guide
- Mise en forme tableau word - Guide
- Bruler feuille de laurier - Guide
7 réponses
Bonjour
Indique le nom de la feuille avant le Range :
If Sheets("Feuil1").Range("A1") < 100 Then
Cdlmnt
Via
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! :)
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
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
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.
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
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 module
'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 module
Function 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
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+
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
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
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
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
J'ai essyé en rajoutant "If Sheets("Feuil1").Range("A1") < 100 Then ", mais cela ne fonctionne pas. La forme se réfère toutjours à la cellule re la feuille 2 :S
le code est dans le VBA de quelle feuille ????
Je viens de vérifier, la formule fonctionne. Par contre, elle ne se met pas à jour automatiquement. Pour se mettre à jour il faut rentrer du texte dans une cellule de la feuille 2 et faire "entrer".
Comment faire ?
Merci d'avance! :)
un peu plus bas, j'ai ecrit ceci:
Ce qu'il faudrait savoir, c'est comment change la valeur de la cellule feuil1!A1 et si la feuil2 est en permanence active ou pas !!! Donc pouvez-vous nous en ecrire plus sur le sujet