Bonsoir
N'ayant pas trouvé de solution pour lancer en bloc plusieurs macros (post du
15/10), j'aimerais savoir s'il est possible de lancer automatiquement une
macro à l'ouverture d'une feuille, ce qui serait un autre moyen de régler
mon problème.
Merci encore de vos conseils et de votre aide
Pierre
Sub FCG2(Seuil1 As Double, Op1 As String, Seuil2 As Double, Op2 As String) Application.ScreenUpdating = False For j = 1 To ActiveChart.SeriesCollection.Count With ActiveChart.SeriesCollection(1) For i = 1 To .Points.Count a = Application.WorksheetFunction.Index(.Values, i) a = Application.WorksheetFunction.Substitute(a, ",", ".") Seuila = Application.WorksheetFunction.Substitute(Seuil1, ",", ".") Seuilb = Application.WorksheetFunction.Substitute(Seuil2, ",", ".") If a <> 0 And a <> "" Then b = Evaluate(a & Op1 & Seuila) c = Evaluate(a & Op2 & Seuilb) rep = IIf(b, RGB(255, 0, 0), RGB(51, 153, 102)) .Points(i).Interior.Color = rep End If Next End With Next Application.ScreenUpdating = True End Sub
+
Private Sub Chart_Activate() FCG2 25, ">", 30, "<" End Sub
= Me fait apparaitre en vert les valeurs < 25, en rouge les valeurs > 25
Bonsoir Pierre,
Ce que tu décris est normal... tu as visiblement un peu de mal avec les macros. Pas grave, je vais essayer de t'expliquer ce que j'ai fait.
Première macro (une condition). Les commentaires sur la macro sont entre crochets [] et après le code.
' Pour le traitement d'une seule condition Sub FCG1(Seuil1 As Double, Op1 As String) Application.ScreenUpdating = False For j = 1 To ActiveChart.SeriesCollection.Count [ Cette ligne compte le nombre de série dans le graphique. Elle est inutile dans le cas présent mais ne mange pas de pain]
With ActiveChart.SeriesCollection(j) [ Pour chaque série du graphique...]
For i = 1 To .Points.Count [Pour chaque point de la série j]
a = Application.WorksheetFunction.Index(.Values, i) [ La variable a est la valeur de chaque point]
a = Application.WorksheetFunction.Substitute(a, ",", ".") Seuil = Application.WorksheetFunction.Substitute(Seuil1, ",", ".") [Suppression des , et remplacement par des . (problème des décimales)]
If a <> 0 And a <> "" Then [Test pour éviter les "points de série" vides]
b = Evaluate(a & Op1 & Seuil) [Est_-ce que la condition fixée dans chaque feuille graphique est vérifiée ?] rep = IIf(b, RGB(153, 254, 0), RGB(255, 128, 128)) [Si oui, la couleur est RGB(153,254,0), si non la couleur est RGB(255,128,128)] .Points(i).Interior.Color = rep [application de la couleur déterminée par le test précédent] End If Next End With Next Application.ScreenUpdating = True End Sub
Dans chaque feuille, on a ensuite une macro avec paramètres, le seuil et le sens de la comparaison.
La macro pour deux conditions fonctionne de la même manière. la différence est dans la ligne :
qui dit : si la condition 1 et la condition 2 sont vérifiées, alors RGB(153,254,0) et sinon alors RGB(255,128,128,).
Donc la macro avec paramètres de la feuille graphique définit seuil1, comparaison1, seuil2, comparaison2.
Dans ta question, la ligne IIF... ne contient que "b" et non pas "b And c".
Voilà ce que je peux te dire pour l'instant. Je vais être loin d'internet pendant 4 à 5 jours. Si tu as besoin de quelques choses, crées un nouveau fil dans le forum en résumant le problème ou patientes en attendant que je sois revenu.
-- François L
Bonsoir François
Sub FCG2(Seuil1 As Double, Op1 As String, Seuil2 As Double, Op2 As String)
Application.ScreenUpdating = False
For j = 1 To ActiveChart.SeriesCollection.Count
With ActiveChart.SeriesCollection(1)
For i = 1 To .Points.Count
a = Application.WorksheetFunction.Index(.Values, i)
a = Application.WorksheetFunction.Substitute(a, ",", ".")
Seuila = Application.WorksheetFunction.Substitute(Seuil1, ",", ".")
Seuilb = Application.WorksheetFunction.Substitute(Seuil2, ",", ".")
If a <> 0 And a <> "" Then
b = Evaluate(a & Op1 & Seuila)
c = Evaluate(a & Op2 & Seuilb)
rep = IIf(b, RGB(255, 0, 0), RGB(51, 153, 102))
.Points(i).Interior.Color = rep
End If
Next
End With
Next
Application.ScreenUpdating = True
End Sub
+
Private Sub Chart_Activate()
FCG2 25, ">", 30, "<"
End Sub
= Me fait apparaitre en vert les valeurs < 25, en rouge les valeurs > 25
Bonsoir Pierre,
Ce que tu décris est normal... tu as visiblement un peu de mal avec les
macros. Pas grave, je vais essayer de t'expliquer ce que j'ai fait.
Première macro (une condition). Les commentaires sur la macro sont entre
crochets [] et après le code.
' Pour le traitement d'une seule condition
Sub FCG1(Seuil1 As Double, Op1 As String)
Application.ScreenUpdating = False
For j = 1 To ActiveChart.SeriesCollection.Count
[ Cette ligne compte le nombre de série dans le graphique. Elle est
inutile dans le cas présent mais ne mange pas de pain]
With ActiveChart.SeriesCollection(j)
[ Pour chaque série du graphique...]
For i = 1 To .Points.Count
[Pour chaque point de la série j]
a = Application.WorksheetFunction.Index(.Values, i)
[ La variable a est la valeur de chaque point]
a = Application.WorksheetFunction.Substitute(a, ",", ".")
Seuil = Application.WorksheetFunction.Substitute(Seuil1, ",", ".")
[Suppression des , et remplacement par des . (problème des décimales)]
If a <> 0 And a <> "" Then
[Test pour éviter les "points de série" vides]
b = Evaluate(a & Op1 & Seuil)
[Est_-ce que la condition fixée dans chaque feuille graphique est
vérifiée ?]
rep = IIf(b, RGB(153, 254, 0), RGB(255, 128, 128))
[Si oui, la couleur est RGB(153,254,0), si non la couleur est
RGB(255,128,128)]
.Points(i).Interior.Color = rep
[application de la couleur déterminée par le test précédent]
End If
Next
End With
Next
Application.ScreenUpdating = True
End Sub
Dans chaque feuille, on a ensuite une macro avec paramètres, le seuil et
le sens de la comparaison.
La macro pour deux conditions fonctionne de la même manière. la
différence est dans la ligne :
qui dit : si la condition 1 et la condition 2 sont vérifiées, alors
RGB(153,254,0) et sinon alors RGB(255,128,128,).
Donc la macro avec paramètres de la feuille graphique définit seuil1,
comparaison1, seuil2, comparaison2.
Dans ta question, la ligne IIF... ne contient que "b" et non pas "b And c".
Voilà ce que je peux te dire pour l'instant. Je vais être loin
d'internet pendant 4 à 5 jours. Si tu as besoin de quelques choses,
crées un nouveau fil dans le forum en résumant le problème ou patientes
en attendant que je sois revenu.
Sub FCG2(Seuil1 As Double, Op1 As String, Seuil2 As Double, Op2 As String) Application.ScreenUpdating = False For j = 1 To ActiveChart.SeriesCollection.Count With ActiveChart.SeriesCollection(1) For i = 1 To .Points.Count a = Application.WorksheetFunction.Index(.Values, i) a = Application.WorksheetFunction.Substitute(a, ",", ".") Seuila = Application.WorksheetFunction.Substitute(Seuil1, ",", ".") Seuilb = Application.WorksheetFunction.Substitute(Seuil2, ",", ".") If a <> 0 And a <> "" Then b = Evaluate(a & Op1 & Seuila) c = Evaluate(a & Op2 & Seuilb) rep = IIf(b, RGB(255, 0, 0), RGB(51, 153, 102)) .Points(i).Interior.Color = rep End If Next End With Next Application.ScreenUpdating = True End Sub
+
Private Sub Chart_Activate() FCG2 25, ">", 30, "<" End Sub
= Me fait apparaitre en vert les valeurs < 25, en rouge les valeurs > 25
Bonsoir Pierre,
Ce que tu décris est normal... tu as visiblement un peu de mal avec les macros. Pas grave, je vais essayer de t'expliquer ce que j'ai fait.
Première macro (une condition). Les commentaires sur la macro sont entre crochets [] et après le code.
' Pour le traitement d'une seule condition Sub FCG1(Seuil1 As Double, Op1 As String) Application.ScreenUpdating = False For j = 1 To ActiveChart.SeriesCollection.Count [ Cette ligne compte le nombre de série dans le graphique. Elle est inutile dans le cas présent mais ne mange pas de pain]
With ActiveChart.SeriesCollection(j) [ Pour chaque série du graphique...]
For i = 1 To .Points.Count [Pour chaque point de la série j]
a = Application.WorksheetFunction.Index(.Values, i) [ La variable a est la valeur de chaque point]
a = Application.WorksheetFunction.Substitute(a, ",", ".") Seuil = Application.WorksheetFunction.Substitute(Seuil1, ",", ".") [Suppression des , et remplacement par des . (problème des décimales)]
If a <> 0 And a <> "" Then [Test pour éviter les "points de série" vides]
b = Evaluate(a & Op1 & Seuil) [Est_-ce que la condition fixée dans chaque feuille graphique est vérifiée ?] rep = IIf(b, RGB(153, 254, 0), RGB(255, 128, 128)) [Si oui, la couleur est RGB(153,254,0), si non la couleur est RGB(255,128,128)] .Points(i).Interior.Color = rep [application de la couleur déterminée par le test précédent] End If Next End With Next Application.ScreenUpdating = True End Sub
Dans chaque feuille, on a ensuite une macro avec paramètres, le seuil et le sens de la comparaison.
La macro pour deux conditions fonctionne de la même manière. la différence est dans la ligne :
qui dit : si la condition 1 et la condition 2 sont vérifiées, alors RGB(153,254,0) et sinon alors RGB(255,128,128,).
Donc la macro avec paramètres de la feuille graphique définit seuil1, comparaison1, seuil2, comparaison2.
Dans ta question, la ligne IIF... ne contient que "b" et non pas "b And c".
Voilà ce que je peux te dire pour l'instant. Je vais être loin d'internet pendant 4 à 5 jours. Si tu as besoin de quelques choses, crées un nouveau fil dans le forum en résumant le problème ou patientes en attendant que je sois revenu.
-- François L
Pierre
Bonjour François merci de tes explications Je vais me pencher dessus attentivement cordialement Pierre
Bonjour François
merci de tes explications
Je vais me pencher dessus attentivement
cordialement
Pierre