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

10 réponses

1 2 3 4
Avatar
Pierre
Bonsoir François

Allez je me relève à nouveau les manches!
Dans module1 j'ai mis:

Sub FCG1(Seuil1 As Double, Op1 As String)
Application.ScreenUpdating = False
For j = 1 To ActiveChart.SeriesCollection.Count
With ActiveChart.SeriesCollection(j)
For i = 1 To .Points.Count
a = Application.WorksheetFunction.Index(.Values, i)
a = Application.WorksheetFunction.Substitute(a, ",", ".")
Seuil = Application.WorksheetFunction.Substitute(Seuil1, ",", ".")
If a <> 0 Then
b = Evaluate(a & Op1 & Seuil)
rep = IIf(b, RGB(153, 254, 0), RGB(255, 128, 128))
.Points(i).Interior.Color = rep
End If
Next
End With
Next
Application.ScreenUpdating = True
End Sub

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(j)
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 Then
b = Evaluate(a & Op1 & Seuila)
c = Evaluate(a & Op2 & Seuilb)
rep = IIf(b And c, RGB(153, 254, 0), RGB(255, 128, 128))
.Points(i).Interior.Color = rep
End If
Next
End With
Next
Application.ScreenUpdating = True
End Sub

Dans IMC (condition double), j'ai mis:

Private Sub Chart_Activate()
FCG2 25, ">", 30, "<"
End Sub

Jusque là ça marche impec

Dans MG (condition simple)j'ai mis:

Private Sub Chart_Activate()
FCG1 19, ">"
End Sub

Et là ça recoince: "erreur d'execution13, incompatibilité de type" qui
renvoie à la ligne "rep = IIf(b, RGB(153, 254, 0), RGB(255, 128, 128))"

Il me semble pourtant que j'ai tout fait comme tu m'as indiqué.
Merci de me lire encore
Pierre
Avatar
Francois L
Bonsoir François

Allez je me relève à nouveau les manches!
Dans module1 j'ai mis:

Sub FCG1(Seuil1 As Double, Op1 As String)
Application.ScreenUpdating = False
For j = 1 To ActiveChart.SeriesCollection.Count
With ActiveChart.SeriesCollection(j)
For i = 1 To .Points.Count
a = Application.WorksheetFunction.Index(.Values, i)
a = Application.WorksheetFunction.Substitute(a, ",", ".")
Seuil = Application.WorksheetFunction.Substitute(Seuil1, ",", ".")
If a <> 0 Then
b = Evaluate(a & Op1 & Seuil)
rep = IIf(b, RGB(153, 254, 0), RGB(255, 128, 128))
.Points(i).Interior.Color = rep
End If
Next
End With
Next
Application.ScreenUpdating = True
End Sub



Bonsoir,


Le problème est dans cette ligne :
b = Evaluate(a & Op1 & Seuil)


C'est Seuil1 au lieu de Seuil

--
François L

Avatar
Pierre
Bonsoir
Hélas j'ai toujours le même message avec 1 condition
Mais ce n'est pas grave, tu ne vas pas passer ton temps la dessus...
Merci encore de ton aide
Avatar
Pierre
Bonjour François
En fait le probleme vient bien de la decimale, puisqu'en mettant un nombre
entier çà marche

Private Sub Chart_Activate()
FCG 23, "<"
End Sub


Private Sub Chart_Activate()
FCG 23.1, "<"
End Sub

Le probleme c'est que l'approximation est trop importante
Si à l'occasion tu trouves la solution...
Merci encore pour ton aide et le temps passé
Cordialement
Pierre
Avatar
Francois L
Bonjour François
En fait le probleme vient bien de la decimale, puisqu'en mettant un nombre
entier çà marche

Private Sub Chart_Activate()
FCG 23, "<"
End Sub


Private Sub Chart_Activate()
FCG 23.1, "<"
End Sub

Le probleme c'est que l'approximation est trop importante
Si à l'occasion tu trouves la solution...
Merci encore pour ton aide et le temps passé
Cordialement
Pierre






Bonjour,

Je te fais une synthèse de tout ça ce soir....

--
François L

Avatar
Pierre
Bonjour François
confus de t'embeter
Néammoins en bidouillant pour essayer de solutionner, je me suis aperçu
d'une bizarerie:
quand j'enleve la decimale dans la macro 20m, ça marche, comme je te le
disais
par contre quand j'enleve la decimale dans la macro Ag, je me suis aperçu
depuis que ça ne marchait pas et j'ai toujours cette incompatibilité 13
alors que les macros sont rigouresement les mêmes
Par contre je rajoute # après le nombre entier dans la macro Ag, et çà
marche comme 20m!
Est ce que c'est normal?
Pierre
Avatar
Francois L
Bonjour François
confus de t'embeter



Bonsoir Pierre,

J'ai rajouté un test (a<>"") dans les macros FCG1 et FCG2

J'ai testé sur toutes les feuilles de ton classeur, a priori tout
fonctionne (décimale ou pas ).

Les deux macros deviennent ce qui est en fin de message. Mets les dans
ton module par copier-coller pour être certain de la syntaxe. Les macros
des feuilles graphiques ne changent pas.

En espérant pour toi que cette fois c'est la bonne. Sinon, reviens...


' 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
With ActiveChart.SeriesCollection(j)
For i = 1 To .Points.Count
a = Application.WorksheetFunction.Index(.Values, i)
a = Application.WorksheetFunction.Substitute(a, ",", ".")
Seuil = Application.WorksheetFunction.Substitute(Seuil1, ",", ".")
If a <> 0 And a <> "" Then
b = Evaluate(a & Op1 & Seuil)
rep = IIf(b, RGB(153, 254, 0), RGB(255, 128, 128))
.Points(i).Interior.Color = rep
End If
Next
End With
Next
Application.ScreenUpdating = True
End Sub
' Pour le traitement de deux conditions
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 And c, RGB(153, 254, 0), RGB(255, 128, 128))
.Points(i).Interior.Color = rep
End If
Next
End With
Next
Application.ScreenUpdating = True
End Sub

--
François L

Avatar
Pierre
Bonsoir François

Têtu hein?
Effectivement le pb des décimales est resolu :-)))

Le seul petit bug persistant est pour la double condition, seul le premier
facteur est pris en compte.
Ainsi, pour un IMC sensé apparaitre en rouge si > 30 OU < 25 , la macro

Private Sub Chart_Activate()
FCG2 25, "<", 30, ">"
End Sub

Fait apparaitre en rouge les valeurs < 25, en vert les valeurs entre 25 et
30, mais aussi en vert les valeurs >30
Voila, à part çà tout marche impec, merci encore.

Cordialement
Pierre
Avatar
Francois L
Bonsoir François

Têtu hein?
Effectivement le pb des décimales est resolu :-)))

Le seul petit bug persistant est pour la double condition, seul le premier
facteur est pris en compte.
Ainsi, pour un IMC sensé apparaitre en rouge si > 30 OU < 25 , la macro

Private Sub Chart_Activate()
FCG2 25, "<", 30, ">"
End Sub

Fait apparaitre en rouge les valeurs < 25, en vert les valeurs entre 25 et
30, mais aussi en vert les valeurs >30
Voila, à part çà tout marche impec, merci encore.


Re,

Normal !

Il fallait écrire

Private Sub Chart_Activate()
FCG2 25, ">", 30, "<"
End Sub

Les conditions se lisent :

25 et < 30 vert, sinon rouge


--
François L

Avatar
Pierre
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

?????
1 2 3 4