Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[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.
 
Réactions: cp4

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

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:

Dranreb

XLDnaute Barbatruc
Elle agit sur 8 feuilles qui se suivent dans les onglets à partir de celle ayant pour CodeName "Feuil4".
Si une "Feuile 12" est aussi traitée c'est qu'elle est parmi ces 8 onglets qui se suivent, à mon avis.
 
Réactions: cp4

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.
 

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.
 

Paritec

XLDnaute Barbatruc
Re vCP4 le forum
c'est normal, dans ce cas là comment veux tu que ta variable f prenne la valeur de ton array a ???
c'est normal que cela plante par contre ta macro au dessus est très bien !!!
a+
Papou
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…