Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Une macro pour executer plusieurs macros?

13 réponses
Avatar
Pierre
Bonsoir
je me permet de vous resolliciter devant l'efficacité de vos conseils.
Je me retrouve avec un classeur d'une quinzaine de feuilles, à chaque
feuille étant affectée une macro (graphique, forme conditionnelle).
Est on obligé de lancer ces macros feuille par feuille ou est il possible de
les lancer toutes par une commande globale?
merci
Pierre

10 réponses

1 2
Avatar
Jacquouille
Bonsoir
Si toutes les macros sont accessibles à partir d'une seule feuille
(l'active), on pourrait essayer ceci
Sub Toutes_ensemble()
Nom de la macro1
Nom de la macro2...
End Sub
Bonne chance

--
Bien amicalmement,
Vivement conseillés:
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm
http://frederic.sigonneau.free.fr/

Jacquouille.

"Pierre" a écrit dans le message de news:
NUtYg.126$
Bonsoir
je me permet de vous resolliciter devant l'efficacité de vos conseils.
Je me retrouve avec un classeur d'une quinzaine de feuilles, à chaque
feuille étant affectée une macro (graphique, forme conditionnelle).
Est on obligé de lancer ces macros feuille par feuille ou est il possible
de les lancer toutes par une commande globale?
merci
Pierre



Avatar
Pierre
Bonsoir
Ne marche pas: "variable objet ou variable de bloc with non définis"
Pierre
Avatar
lSteph
Bonsior,

Si la proposition de Jacquouille ne le fait pas
il faudrait en savoir un peu plus sur ces macros, les feuilles ,
graphique ,mefc..? ?..et ce que tu as utilisé.

Si tu le souhaites-tu peux poser le lien ici en passant par là
http://cjoint.com

@+

lSteph

Pierre a utilisé son clavier pour écrire :
Bonsoir
je me permet de vous resolliciter devant l'efficacité de vos conseils.
Je me retrouve avec un classeur d'une quinzaine de feuilles, à chaque feuille
étant affectée une macro (graphique, forme conditionnelle).
Est on obligé de lancer ces macros feuille par feuille ou est il possible de
les lancer toutes par une commande globale?
merci
Pierre


--
- -

lSteph

Avatar
Michel Gaboly
Bonsoir,

Difficile de t'aider avec si peu d'infos.


Complément à la réponse de Jacquouille :

Pour utiliser la syntaxe qu'il t'a donnée, il faut que toutes les macro s soient sur un même module ou qu'elles soient
définies avec le mot clef Public, pour celles qui sont dans un autre mo dule :

Public Sub Test

et non

Sub Test

Par ailleurs elles doivent être dans un (ou des) module(s) standard(s), en particulier pas dans un module lié à une
feuille, car "Range("A1")" dans un module de feuille, sans autre qualific atif, fera toujours référence à la feuille à
laquelle le module est lié, alors que par hypothèse, on veut lancer s uccessivement des macros faisant références à
différentes feuilles.


Une des causes possibles de message d'erreur : tu essayes de sélectionn er une cellule (ou plusieurs) en utilisant un nom
associé à la plage, qui n'existe pas dans la feuille active :

Range("Clients").Select


Quand tu lances une macro feuille par feuille, cela marche, car tu te tro uves dans la "bonne" feuille quand tu lances la
macro correspondante.

Quand tu enchaînes les macros, il faut ajouter des .Select poiur séle ctionner la feuille concernée avant de lancer la
macro qui la concerne (solution de facilité à éviter, car les Selec t ralentissent le traitement), ou mieux, qualifier
les plages :

Sheets("Feuil3").Range("Clients")

ou

With Sheets("Feuil3")
.Range("Clients")
...
End With


Bonsoir
Ne marche pas: "variable objet ou variable de bloc with non définis"
Pierre





--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Fredo P.
Bonsoir
Peut être une idée, si chaque macro coincide avec une feuille spécifique,
pourquoi ne pas loger chaque code dans le code de feuille?
Private Sub Worksheet_Activate()

End Sub

"Pierre" a écrit dans le message de news:
HswYg.161$
Bonsoir
Ne marche pas: "variable objet ou variable de bloc with non définis"
Pierre




Avatar
jps
et surtout avec un "ne marche pas" aussi peu chaleureux à l'égard de notre
jacquouille
jps

"Michel Gaboly" a écrit dans le message de news:

Bonsoir,

Difficile de t'aider avec si peu d'infos.
Avatar
Michel Gaboly
Que veux-tu, j'espère simplement que c'est un nouveau ;-))

et surtout avec un "ne marche pas" aussi peu chaleureux à l'égard d e notre
jacquouille
jps

"Michel Gaboly" a écrit dans le message de news:

Bonsoir,

Difficile de t'aider avec si peu d'infos.







--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
jps
nouveau? un grand coup de pompe dans le c.., oui, michel
jps

"Michel Gaboly" a écrit dans le message de news:

Que veux-tu, j'espère simplement que c'est un nouveau ;-))

et surtout avec un "ne marche pas" aussi peu chaleureux à l'égard de notre
jacquouille
jps

"Michel Gaboly" a écrit dans le message de news:

Bonsoir,

Difficile de t'aider avec si peu d'infos.







--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Pierre
Bonjour et merci
Mais le classeur est trop volumineux
Il s'agit d'un ensemble de feuilles dont chacune contient un graphique avec
en abcisse la valeur d'un parametre (tests physiques) et en ordonnée les
noms des joueurs.
Chaque graphique est affecté d'une macro qui donne aux barres une couleur
jaune si = ou meilleur que la valeur de reference, rouge si moins bon
(exemple: la premiere macro ci dessous concerne la masse grasse qui ne doit
pas depasser 19%)
Comme ce classeur ne sera pas utilisé que par moi, j'aurais aimé qu'il soit
possible de lancer tres simplement toutes les macros d'un coup, et surtout
sans risque d'erreur (une macro pour une autre, ce qui fausse le code
couleur)
Ci dessous l'ensemble des macros tel que le montre Visual Basic Editor
Pour finir je ne maitrise pas du tout, tout ce que je sais faire c'est
d'appliquer à la lettre les conseils.
Pierre

Sub FormatConditionnelGraphiqueMG()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep > 19 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueMG2()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep > 13 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueCMJ()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 42 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueSJ()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 1140 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphique10m()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 18 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphique20m()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 21.3 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphique40m()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 24.8 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueDS()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 160 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueS()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 130 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueDC()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 120 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueEp()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 110 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueTr()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 300 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueG()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 270 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiquePh()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 35 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueVO2()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 51.5 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueVMA()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 14.7 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueAg()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep > 16.8 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Sub FormatConditionnelGraphiqueIMC()
For c = 1 To ActiveChart.SeriesCollection.Count
For d = 1 To ActiveChart.SeriesCollection(c).Points.Count
With ActiveChart.SeriesCollection(c)
rep = Application.WorksheetFunction.Index(.Values, d)
If rep < 25 Then
.Points(d).Interior.ColorIndex = 22
Else
.Points(d).Interior.ColorIndex = 19
End If
End With
Next d
Next c
End Sub
Avatar
Bret
Le message d'erreur "Ne marche pas" ou "variable objet ou variable de bloc
with non définis" peut signifier que la feuille où se trouvent les objets
impactés par la macro n'est pas activée.
Peut-être ajouter en activant la feuille ad hoc avant le lancement de chaque
macro résoudrai le problème.
Genre:
sheets("monGraph1").activate
macroGraph1
sheets("monGraph2").activate
macroGraph2
Syntaxe à vérifier




Bonsoir
Ne marche pas: "variable objet ou variable de bloc with non définis"
Pierre





1 2