Ma boucle ne balaie pas tous les onglets

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

  • Fichier_exemple_2.xlsm
    382.1 KB · Affichages: 60
  • Fichier_exemple_2.xlsm
    382.1 KB · Affichages: 48
  • Fichier_exemple_2.xlsm
    382.1 KB · Affichages: 59

Sebast

XLDnaute Impliqué
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
 

Pierrot93

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

Sebast

XLDnaute Impliqué
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
 

gilbert_RGI

XLDnaute Barbatruc
Re : Ma boucle ne balaie pas tous les onglets

Bonjour et bonne année

Comme ceci peut-être :confused:

Edit : Bonjour Pierrot
 

Pièces jointes

  • Fichier_exemple_2.xlsm
    390 KB · Affichages: 43
  • Fichier_exemple_2.xlsm
    390 KB · Affichages: 40
  • Fichier_exemple_2.xlsm
    390 KB · Affichages: 40

Sebast

XLDnaute Impliqué
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
 

Discussions similaires

Réponses
11
Affichages
976
Réponses
10
Affichages
678

Statistiques des forums

Discussions
312 305
Messages
2 087 070
Membres
103 454
dernier inscrit
Marion devaux