Ma boucle ne balaie pas tous les onglets

  • Initiateur de la discussion Initiateur de la discussion Sebast
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

ma question porte sur une boucle censée balayer les onglets d'un fichiers et intervenir sur plusieurs TCD.

Bien que je place un For Each WS In Worksheets terminant par un Next WS, mon code ne traite que l'onglet actif : c'est donc que la boucle ne boucle pas …

De plus, comme j'ai dupliqué les TCD par copie d'onglet, le nom est le même donc la boucle devrait appliquer les instruction au TCD nommé , et pourtant rien ne se passe au-delà de l'onglet actif …
Est-ce dû au fait que j'ai des onglets ne contenant pas de TCD (onglet "Ma question", onglet masqué "Source") et/ou à la structure de ma boucle ?

Quelqu'un a-t-il une idée sur la raison de cette paralysie ?


Merci d'avance pour votre sagacité

________________ le code _______________________________________



Sub Test_3()

Dim WS As Worksheet
Dim DateRéponse As Long
DateRéponse = Application.InputBox("A quel mois inclus voulez-vous restreindre l'affichage ?")


For Each WS In Worksheets ' on balaie les onglets

Application.ScreenUpdating = 0

With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois")
.PivotItems("Janvier").Visible = True
.PivotItems("Février").Visible = True
.PivotItems("Mars").Visible = True
.PivotItems("Avril").Visible = True
.PivotItems("Mai").Visible = True
.PivotItems("Juin").Visible = True
.PivotItems("Juillet").Visible = True
.PivotItems("Août").Visible = True
.PivotItems("Septembre").Visible = True
.PivotItems("Octobre").Visible = True
.PivotItems("Novembre").Visible = True
.PivotItems("Décembre").Visible = True


If DateRéponse < 2 Then .PivotItems("Février").Visible = False
If DateRéponse < 3 Then .PivotItems("Mars").Visible = False
If DateRéponse < 4 Then .PivotItems("Avril").Visible = False
If DateRéponse < 5 Then .PivotItems("Mai").Visible = False
If DateRéponse < 6 Then .PivotItems("Juin").Visible = False
If DateRéponse < 7 Then .PivotItems("Juillet").Visible = False
If DateRéponse < 8 Then .PivotItems("Août").Visible = False
If DateRéponse < 9 Then .PivotItems("Septembre").Visible = False
If DateRéponse < 10 Then .PivotItems("Octobre").Visible = False
If DateRéponse < 11 Then .PivotItems("Novembre").Visible = False
If DateRéponse < 12 Then .PivotItems("Décembre").Visible = False


End With


Next WS ' on saute à l'onglet suivant


Application.ScreenUpdating = 1

End Sub
 

Pièces jointes

Re : Ma boucle ne balaie pas tous les onglets

Bonjour Pierrot93,

j'ai essayé de remplacer comme tu me l'as suggéré, mais ça plante. Même si j'écris sheets("WS").activate ou sheets(WS).activate placé avant With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois"), il y a erreur.

Je ne comprends vraiment pas pourquoi ça ne progresse pas car avec For Each WS In Worksheets, je sélectionne tous les onglets, puis en ayant activesheets.Pivot ..., j'applique les opérations sur la feuille active !

De même, si je remplace "brut de décoffrage" ActiveSheet par WS, ça plante aussi (With WS.PivotTables("Tableau croisé dynamique1").PivotFields("Mois") ... buggue).

Quelqu'un voit-il mon erreur ?

Merci d'avance
 
Re : Ma boucle ne balaie pas tous les onglets

Re,

comme ceci :
Code:
    With WS.PivotTables(1).PivotFields("Mois")

mais déjà je ne vois pas de champ "Mois" dans ton fichier... et pas excel 2007 sous le coude donc tes tcd, après conversion par 2003 ne sont plus des tcd....
 
Re : Ma boucle ne balaie pas tous les onglets

Merci pour ton aide,

malheureusement, quand je place With WS.PivotTables(1).PivotFields("Mois"), j'obtiens un plantage Erreur 1004 : la méthode a échoué.

Le champ Mois est celui que tu vois avec le filtre, en étiquette de colonne. Si tu affiches la liste des champs, le nom apparaît sans ambiguïté (clic droit, "afficher la liste des champs").

Je continue à investiguer.

Encore merci
 
Re : Ma boucle ne balaie pas tous les onglets

Merci beaucoup Gilbert_RGI,

le code fonctionne mais n'étant vraiment pas un pro, peux-tu m'expliciter certains éléments ?

sh = j'imagine que ça désigne une feuille ?

sh = 4 j'imagine que ç'est pour faire démarrer la boucle à partir de la nième feuille (ici la 4e), surtout contenant un TCD (en fait, j'ai corrigé en mettant sh=3 pour démarrer à l'onglet "Général", qui doit recevoir le traitement).

En fait, l'idéal serait de pouvoir tester si les onglets contiennent un TCD : existe-t-il une telle instruction ?

Sinon, impeccable, le code tourne !

Encore merci pour ton aide
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
11
Affichages
1 K
  • Question Question
Réponses
10
Affichages
907
Retour