XL 2016 Répeter une macro sur les feuilles suivantes

Claudy

XLDnaute Accro
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
1599902775898.png
 
Solution
Bonjour Claudy, sylvanu,

J'ai l'impression qu'on pourrait faire exécuter le code de la macro
pour toute feuille dont le nom se termine par "20", donc ici :


"septembre20"
"octobre20"
"novembre20"
"décembre20"

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

XLDnaute Barbatruc
Supporter XLD
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.
 

Pièces jointes

  • Claudy.xlsm
    22.2 KB · Affichages: 19

soan

XLDnaute Barbatruc
Inactif
Bonjour Claudy, sylvanu,

J'ai l'impression qu'on pourrait faire exécuter le code de la macro
pour toute feuille dont le nom se termine par "20", donc ici :


"septembre20"
"octobre20"
"novembre20"
"décembre20"

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
 

Claudy

XLDnaute Accro
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

Merci,
Claudy
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Claudy, sylvanu,

À propos du code VBA de ton post #4 :

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.

Lis aussi la remarque du post #5 de sylvanu.

soan
 

Discussions similaires

Statistiques des forums

Discussions
312 082
Messages
2 085 171
Membres
102 805
dernier inscrit
emes