Boucle avec STEP 2 n'avance pas

Sebast

XLDnaute Impliqué
Bonsoir à toutes et à tous,

Je ne comprends pas pourquoi ma boucle ne permet pas d’intervenir une feuille sur deux. Je pensais qu’avec STEP 2, on instaurait un pas de 2 … c’est d’autant plus râlant que le contrôle placé m’indique bien qu’on traîte la feuille 1, 3, 5, …, n+1…

Qui peut me dire ce qui cloche dans le code suivant ? (je passe volontairement par for wks=1 to … plutôt que par une boucle for each … car avec ma solution, je peux mettre un pas de 2)
(je précise que si j’enlève STEP 2, le code s’applique bien à tout, donc il effectue bien ce que je lui demande …).

Merci pour vos lumières


_______________ Code _______________________________________________________
Sub Intervenir_une_feuille_sur_deux()
Dim wks As Long
Dim pt As PivotTable
Dim pf As PivotField

For wks = 1 To Sheets.Count Step 2 ' on intervient une feuille sur 2, sur tout le fichier

Sheets(wks).Activate

MsgBox "Je traîte actuellement la feuille n° " & wks ' permet de contrôler qu'on alterne bien les feuilles

If ActiveSheet.PivotTables.Count > 0 Then ' on s'assure qu'on a bien un tcd
Set pt = ActiveSheet.PivotTables(1)
For Each pf In pt.ColumnFields
pf.EnableItemSelection = False
Next
End If
Next
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Boucle avec STEP 2 n'avance pas

Bonjour Sebart, PierreJean:)

essaye peut être ainsi :
Code:
Option Explicit
Sub test()
Dim wks As Long, pt As PivotTable, pf As PivotField
For wks = 1 To Sheets.Count Step 2 ' on intervient une feuille sur 2, sur tout le fichier
    With Sheets(wks)
        MsgBox "Je traîte actuellement la feuille n° " & wks ' permet de contrôler qu'on alterne bien les feuilles
        If .PivotTables.Count > 0 Then ' on s'assure qu'on a bien un tcd
            Set pt = .PivotTables(1)
            For Each pf In pt.ColumnFields
                pf.EnableItemSelection = False
            Next pf
        End If
    End With
Next wks
End Sub

mais comme le précise PierreJean,, sans pouvoir tester...

bon après midi
@+
 

Sebast

XLDnaute Impliqué
Re : Boucle avec STEP 2 n'avance pas

Bonsoir Pierrejean, bonsoir Pierrot93,

Merci pour votre aide et désolé de n’avoir pas mis un fichier en pièce jointe. Je ne vais pas pouvoir le faire avant demain matin car mes données sont sur un autre ordi.
Cependant, j’ai collé le code proposé dans un quelconque fichier à ma disposition contenant des tcd et ça marche !
Je contrôlerai demain avec mon gros fichier mais il n’y a pas de raison que ça marche sur l’un et plus sur l’autre.
Je pense que je galère depuis un certain temps avec ce code car je me fie à la « grammaire » de ma bible VBA pour Excel, notamment :

For wks=1 to sheets.count step 2
… instructions
Next ‘ [et non Next wks]

Pour moi, j’écris Next wks si je mets une boucle de type :

for each pf
… instructions
next pf (et non Next tout court)

… mais je me trompe probablement en suivant aveuglément le bouquin (cependant, je lis ces structures dans quelques opus différents).
Est-ce cette structure de boucle qui pêchait chez moi ? Comme précisé, je mettrai un fichier-exemple demain.

Encore merci pour votre aide à tous les deux, et bonne soirée

PS : comment faites_vous pour mettre le code dans un cadre bleu ?
 

Pierrot93

XLDnaute Barbatruc
Re : Boucle avec STEP 2 n'avance pas

Bonjour,


PS : comment faites_vous pour mettre le code dans un cadre bleu ?
click sur le bouton "allez en mode avancé" et utilise l'icone #

Pour les "next", perso je trouve préférable d'indiquer le "compteur" concerné surtout avec des boucles imbriquées... En outre permet une meilleure lisibilité du code....

bonne journée
@+
 

Sebast

XLDnaute Impliqué
Re : Boucle avec STEP 2 n'avance pas

Bonjour Pierrot93, bonjour Pierrejean,


je viens de faire tourner le code proposé sur mon fichier initial et ça marche parfaitement ! J’ai été intrigué de constater que ça marchait sur un quelconque fichier (à la maison) alors que sur mon fichier au boulot, ça restait sans effet …
Du coup, j’ai fait du ménage et me suis rendu compte que dans le fichier litigieux, j’avais une procédure événementielle allant à l’encontre de ce qu’est censée faire la macro …

Dans ces conditions, mon code initial (certes un peu artisanal) fonctionne également, ce qui me conforte (à l’usage) dans ce que Pierrot93 m’a annoncé, à savoir qu’on peut mettre avantageusement le « compteur » après l’instruction NEXT. On y gagne beaucoup en lisibilité.

C’était donc optionnel alors ? Qu’on mette ou qu’on ne mette pas le « compteur », qu’on soit en boucle de type for … next ou for each … next, le résultat est donc le même ?

Pierrejean, tu avais vu clair, le problème n’était donc pas à chercher du côté du STEP 2.

Encore merci de m’avoir fait progresser, confirmez-moi juste le côté optionnel concernant la syntaxe de ces deux types de boucles.


Bonne après-midi
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Boucle avec STEP 2 n'avance pas

Re,

C’était donc optionnel alors ? Qu’on mette ou qu’on ne mette pas le « compteur », qu’on soit en boucle de type for … next ou for each … next, le résultat est donc le même ?

c'est bien optionnel, mais perso, je le mets sur toutes mes boucles.... je pense que cela peut éviter de faire des erreurs quand l'on code, surtout dans des boucles assez complexes...de plus nettement mieux pour la lisibilité.... enfin c'est juste mon avis...

bon après midi
@+
 

Discussions similaires

Statistiques des forums

Discussions
312 306
Messages
2 087 094
Membres
103 467
dernier inscrit
Pandiska