Bonjour,
une feuille , une macro...ça fonctionne bien.
Comment faire exécuter cette macro dans les trois feuilles qui suivent (nommées octobre2020, novembre2020, décembre2020)?
Evidemment d'autres feuilles vont venir s'ajouter par la suite, et même macro pour les mois suivants.
Merci d'avance,
Claudy
Tu as écrit : « même macro pour les mois suivants »
"janvier21"
"février21"
"mars21"
"avril21"
Donc code VBA correspondant :
VB:
Sub Essai()
Dim N$, i%
For i = 1 To WorkSheets.Count
N = Right$(WorkSheets(i).Name, 2)
If N = "20" Or N = "21" Then
'travail de la macro
End If
Next i
End Sub
Bonjour Claudy,
Deux solutions possibles parmi de multiples :
1- Vous connaissez les N° de feuilles de début et fin, dans ce cas :
VB:
Sub Essai()
NoMin = 3: NoMax = 7
For NoFeuil = NoMin To NoMax
Ecrit (NoFeuil) ' lance la macro sur la feuille N° NoFeuil.
Next NoFeuil
End Sub
Sub Ecrit(N)
Sheets("Feuil" & N).Range("A1") = Sheets("Feuil" & N).Range("A1") + 1
End Sub
2- Vous n'avez pas trop de feuilles à exclure, et alors :
Code:
Sub Essai2()
Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Sheets
If Sh.Name <> "Header" And Sh.Name <> "Ne pas toucher" Then ' Elimine les feuilles non concernées
Ecrit2 (Sh.Name)
End If
Next Sh
End Sub
Sub Ecrit2(NomFeuille)
Sheets(NomFeuille).Range("A1") = Sheets(NomFeuille).Range("A1") + 1
End Sub
Le plus simple est l'ex 2, il est auto adaptatif et n'est pas à reprendre si une rajoute une feuille.
Tu as écrit : « même macro pour les mois suivants »
"janvier21"
"février21"
"mars21"
"avril21"
Donc code VBA correspondant :
VB:
Sub Essai()
Dim N$, i%
For i = 1 To WorkSheets.Count
N = Right$(WorkSheets(i).Name, 2)
If N = "20" Or N = "21" Then
'travail de la macro
End If
Next i
End Sub
Soan, Sylvanu,
Merci à vous deux,mais après avoir essayer/creuser vos idées,
j'ai trouvé ceci:
VB:
Sub previsions_trois_mois()
Dim Sh As Worksheet, x As Double
x = ActiveSheet.Index
For i = 0 To 3
Worksheets(x + i).Select
previsions'ma macro
Next i
Worksheets(x).Activate
End Sub
Bonsoir,
Mais à chaque ajout de feuille il faut réactualiser la macro.
Alors qu'au Post #2.2 l'ajout d'une feuille est transparente;
A vous de choisir en fonction de votre contexte.
1) dans Worksheets(x + i).Select et Worksheets(x).Activate
tu utilises x en tant qu'index de feuille (soit en complément
avec i, soit tout seul) ; alors pourquoi donc as-tu mis le type Double pour cette variable x ? Double est pour les nombres
fractionnaires en double précision (donc avec des décimales) ;
pour un index de feuille, mets un type Entier : Byte suffit si
nombre de feuilles maxi <= 255 ; sinon : Dim x% (c'est la
même chose que Dim x As Integer).
2) le nom de ta sub est "previsions_trois_mois" ; alors pour
ta boucle For i : a) ce serait plutôt 0 To 2 : à partir de 0 ➯ 3 itérations, au lieu de 4 avec 0 To 3 ; par contre : b) laisse
comme c'est si c'est : 0 pour le réel en cours + 3 prévisions.