OVH Cloud OVH Cloud

Lancement d'une macro à l'ouverture de la feuille

32 réponses
Avatar
Pierre
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

2 réponses

1 2 3 4
Avatar
Francois 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 :

rep = IIf(b And c, RGB(153, 254, 0), RGB(255, 128, 128))

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

Avatar
Pierre
Bonjour François
merci de tes explications
Je vais me pencher dessus attentivement
cordialement
Pierre
1 2 3 4