[RESOLU] Boucle sur feuilles

cp4

XLDnaute Barbatruc
Bonjour:),

Le cas a été peut-être traité mais je n'ai pas trouvé ce qu'il me faut.
Voilà, je voudrais appliquer des pieds de page à seulement certaines feuilles.
Il s'avère que le codename des feuilles concernées va de Feuil4 à Feuil11.
Donc il me faudrait une boucle pour appliquer le pied de page uniquement à ces feuilles.

En vous remerciant par avance.

Bon après-midi.;)
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Si ces feuilles se suivent vous pouvez faire une boucle for N = Feuil4.Index To Feuil4.Index + 7: Set MaFeuille = Worksheets(N)
Le CodeName n'est pas une clé permettant d'accéder à la feuille. C'est une propriété String en lecture seule reproduisant le nom de l'objet Workshet qui représente cette feuille dans la rubrique Microsoft Excel Objets.
 

cp4

XLDnaute Barbatruc
Bonjour Dranreb;),

Merci beaucoup pour ton aide. Tes explications sont très claires. ci-dessous ce que j'ai testé avec une petite chose de bizzare.
VB:
Sub Essai()
   Dim Feuille As Worksheet, A, i As Byte
   Application.ScreenUpdating = False
   For i = Feuil4.Index To Feuil4.Index + 6
      Set Feuille = Worksheets(i)
      With Feuille.PageSetup
         'en-tête de page
         .LeftHeader = "test"
         .RightHeader = "test"
         'pied de page
         .LeftFooter = "test"
         .RightFooter = "test"
      End With
   Next i
End Sub
Ton raisonnement est logique: 4+7 = 11
cependant, la macro agit aussi sur la feuille 12.
Je n'ai pas compris, j'ai dû mettre +6.
Mais je t'avoue que ça me dérange de ne pas comprendre le pourquoi.
Tu as sûrement la réponse.
Merci beaucoup;):D

Edit: en y réfléchissant si l'ordre des feuilles venait à être modifier comment alors mettre le 'Name' des feuilles dans une variable et boucler sur cette dernière. Encore Merci.
 
Dernière édition:

cp4

XLDnaute Barbatruc
Oups! désolé j'ai rajouté un edit alors que tu envoyais ta réponse.
Tu as parfaitement raison car là, tu me fais rappeler que j'avais supprimé des feuilles et en avoir ajouté au fil de l'évolution de mon fichier.
Ce qui revient que ma première idée de boucler sur le codeName est tordue comme moi.
Alors à ton avis quelle serait la meilleure solution pour traiter seulement les feuilles concernées.
Pour m'éviter une boucle sur les 22 feuilles du classeur.
Merci beaucoup.
 

Paritec

XLDnaute Barbatruc
Bonjour CP4, Dranreb:) (j'en suis tout retourné) le forum
la boucle est faite sur les index, donc si par bonheur tu as la feuille 12 avant la feuille 11 tu traites la feuille 12 d'abord!!!
enfin je dis cela, mais je ne sais pas si c'est le cas
a+
Papou:)
 

Dranreb

XLDnaute Barbatruc
J'ignore quelles sont les feuilles concernées.
On peut aussi envisager cette structure en Remplaçant CEstUneFeuilleConcernée par l'expression Boolean True si c'est une feuille concernée, genre Feuille.Name Like "Mois *"
VB:
Sub Essai()
   Dim Feuille As Worksheet, A, i As Byte
   Application.ScreenUpdating = False
   Set Feuille = Feuil4
   Do While CEstUneFeuilleConcernée
      With Feuille.PageSetup
         'en-tête de page
         .LeftHeader = "test"
         .RightHeader = "test"
         'pied de page
         .LeftFooter = "test"
         .RightFooter = "test"
      End With
   On Error Resume Next
   Set Feuille = Feuille.Next
   If Err then Set Feuille = Nothing
   If Feuille Is Nothing Then Exit Do
   On Error GoTo 0
   Loop
End Sub
 
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour Papou:),

Tordu comme je suis, pas moyen de faire autrement. Je veux dire, redresser ce qui est tordu.

Mais je viens de trouver mon bonheur.
VB:
Sub Essai1()
   Dim f As Worksheet, a, i As Byte

   Application.ScreenUpdating = False
   a = Array("MaFeuil1", "Ab", "A", "D", "F", "Bilan", "Consolider","Test")

   For i = LBound(a) To UBound(a)
         With Worksheets(a(i)).PageSetup
            'en-tête de page
            .LeftHeader = "ABCD"
            .RightHeader = "ABCD"
            'pied de page
            .LeftFooter = "ABCD"
            .RightFooter = "ABCD"
         End With
   Next i
End Sub
Ainsi, il n'y a que ces feuilles qui sont traitées. Merci beaucoup.;)
 

cp4

XLDnaute Barbatruc
Permettez une question:
pourquoi lorsque je remplace With Worksheets(a(i)).PageSetup par With f(a(i)).PageSetup
le code plante avec ce message
upload_2018-4-19_16-27-42.png
Merci.
 

Lone-wolf

XLDnaute Barbatruc
Bonjour a tous :)

Si les feuilles vont de 4 à 11 comme tu le dit

VB:
x = 3
For i = 1 to 8
x = x + 1
With Sheets(x).PageSetup
           'en-tête de page
           .LeftHeader = "ABCD"
           .RightHeader = "ABCD"
           'pied de page
            .LeftFooter = "ABCD"
            .RightFooter = "ABCD"
End With
Next i
 
Dernière édition:

cp4

XLDnaute Barbatruc
Salut Lone-wolf;),

Très gentil de ta part. Suite à l'intervention de Dranreb, je suis rappelé que j'avais supprimé, ensuite rajouté des feuilles (post#5).
Du coup ce n'était pas une bonne idée de boucler sur le codename.
Avec le bout de code de Caillou, c'est bon ça fonctionne bien.
Merci à vous tous.
Bonne soirée.:)
 

Discussions similaires

Statistiques des forums

Discussions
312 247
Messages
2 086 591
Membres
103 248
dernier inscrit
Happycat