Appliquer une macro sur plusieurs feuilles

Bonjour, j'ai besoin de votre aide...

J'ai créé une macro qui copie en fonction du numéro de semaine une liste donnée sur une autre feuille.

Plus clairement sur ma feuille"types" dans la colonne A, il y a les numéros de semaines,dans mes autres feuilles "Semaines 1" "Semaine 2" etc .... En G7 il y a le numéro de semaine. J'ai réussi à créé une macro qui fonctionne très bien sur une seule feuille mais je n'arrive pas à exécuter cette macro sur toutes les feuilles.

Merci d'avance

Sub types()
Dim Mafeuille
Dim PlageNomWk1, PlageNomWk2 As Range
Set Mafeuille = ActiveSheet
Mafeuille.Activate ' sur la feuille active")
Set masemaine = Range("G7")
Worksheets("types").Activate 'active la feuille types
Set PlageNomWk2 = Range("B1:J1")
Set PlageSemaine = Range("A2:A54")
For Each cellsem In PlageSemaine
If cellsem = masemaine Then
Mafeuille.Range("B15").Value = cellsem.Offset(, 1)
Mafeuille.Range("B18").Value = cellsem.Offset(, 2)
Mafeuille.Range("B21").Value = cellsem.Offset(, 3)
Mafeuille.Range("B30").Value = cellsem.Offset(, 6)
Mafeuille.Range("B33").Value = cellsem.Offset(, 7)
Mafeuille.Range("B36").Value = cellsem.Offset(, 8)
Mafeuille.Range("B39").Value = cellsem.Offset(, 9)
End If
Next
Mafeuille.Activate
End Sub
65planning.zip (23.19 Ko)

Bonjour

lister, dans une plage, les feuilles à balayer et faire une boucle dans ta macro pour appliquer le traitement à chaque feuille concernée ?

Euh j'ai pas tout compris , je suis novice....

Dans une feuille de paramétrage de ton appli, tu listes (plage genre "feuilles à balayer") les feuilles où la macro dois s'appliquer.

ça fait un truc du genre :

For each feuilles in plages à balayer

exécuter la macro

Next feuille

J'ai essayé le code suivant, ça me remplis bien les colonnes, mais la valeur en G7 reste fixe....

Dim PlageNomWk1, PlageNomWk2 As Range
Set masemaine = Range("G7")
Worksheets("types").Activate 'active la feuille types
Set PlageNomWk2 = Range("B1:J1")
Set PlageSemaine = Range("A2:A54")
Dim fl As Worksheet
For Each fl In Worksheets
  If fl.Name <> "types" And fl.Name <> "HORAIRES" Then
  For Each cellsem In PlageSemaine
If cellsem = masemaine Then
fl.Range("B15").Value = cellsem.Offset(, 1)
fl.Range("B18").Value = cellsem.Offset(, 2)
fl.Range("B21").Value = cellsem.Offset(, 3)
fl.Range("B30").Value = cellsem.Offset(, 6)
fl.Range("B33").Value = cellsem.Offset(, 7)
fl.Range("B36").Value = cellsem.Offset(, 8)
fl.Range("B39").Value = cellsem.Offset(, 9)
End If
Next
End If
Next fl
End Sub

Ben, quand je lis la macro, je ne vois pas ce qui devrait changer la valeur de G7 (dans "mafeuille" ?)

Si tu veux dire qu'il faut que dans la boucle qui "balaye" les feuilles, il faut que la valeur de la variable qui prend la valeur de G7 corresponde à celle de la feuille courante, il faut donc mettre cela à l'intérieur de la boucle de balayage des feuilles, sinon G7 reste identique.

Est-ce que c'est cela qu'il faut comprendre dans ta remarque ?

Oui c'est ça mais je ne vois pas comment faire....la valeur G7 correspond sur chaque feuilles à "balayer" à un numero de semaine, ce numero de semaine correspond à une ligne sur la feuille "types" quand la macro trouve la valeur dans la feuille "types" , copie cette ligne dans la feuille semaine ayant le meme G7....

Tu comprends ?

oui, je comprends, et je disais

qu'il faut intégrer le traitement sur l'ensemble des feuilles dans la boucle :

définition des plages,

initialisation des variables,

la variable "masemaine" prend en compte la valeur de la cellule G7 de la feuille courante, active ;

et l'applique pour chaque Cellsem dans la PlageSemaine considérée

YoTa a écrit :

oui, je comprends, et je disais

qu'il faut intégrer le traitement sur l'ensemble des feuilles dans la boucle :

définition des plages,

initialisation des variables,

la variable "masemaine" prend en compte la valeur de la cellule G7 de la feuille courante, active ;

et l'applique pour chaque Cellsem dans la PlageSemaine considérée

MERCIIIIIIIIIIIIIIIIII

J'ai trouvé

Sub types()
Dim PlageNomWk1, PlageNomWk2 As Range
Dim masemaine As Variant
Worksheets("types").Activate
Dim fl As Worksheet
For Each fl In Worksheets
  If fl.Name <> "types" And fl.Name <> "HORAIRES" And fl.Name <> "Telecommande" Then
  Set PlageNomWk2 = Range("B1:J1")
  Set PlageSemaine = Range("A2:A54")
  Set masemaine = fl.Range("G7") 'j'ai rajouté le fl
  For Each cellsem In PlageSemaine
If cellsem = masemaine Then
fl.Range("B15").Value = cellsem.Offset(, 1)
fl.Range("B18").Value = cellsem.Offset(, 2)
fl.Range("B21").Value = cellsem.Offset(, 3)
fl.Range("B30").Value = cellsem.Offset(, 6)
fl.Range("B33").Value = cellsem.Offset(, 7)
fl.Range("B36").Value = cellsem.Offset(, 8)
fl.Range("B39").Value = cellsem.Offset(, 9)
End If
Next
End If
Next fl
End Sub

Maintenant il ne me reste plus qu'a écrire une macro qui compte le nombre de fois que par exemple le nom 1 est de 13.30/21.30 et écrire tout ça dans un tableau .... une idée?

un boulot aussi

Rechercher des sujets similaires à "appliquer macro feuilles"