Simplification code VBA - TCD Pivotitems

Bonjour à tous,

Le code que je vais poster fonctionne mais est-il possible de le simplifier ? Car je travaille sur plusieurs tcd en même temps qui ont tous le même Pivotfields (Mois) et je veux qu'ils fassent tous la même chose.

Donc :

1 - Peut-on sélectionner plusieurs tcd en même temps pour ne pas avoir à recopier le même code à chaque changement de tcd?

(Du genre ActiveSheet.PivotTables("Tableau croisé dynamique3; Tableau croisé dynamique4").PivotFields("Mois")

2 - Sachant que je cache tout les pivotitems, n'est-il pas possible de faire la même chose?

(.PivotItems("1, 2, 3, 4, 5, ..., 24").Visible = False ou alors .PivotItems(All).Visible = False)

Mon code ne s'arrête pas à la fin de celui que je poste, d'autres choses s’enchaînent ensuite, mais en comprenant la technique, je pourrais ensuite l'adapter

Sub cocherplusieursfichiers()
'
On Error Resume Next
Application.ScreenUpdating = False
        ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Mois"). _
        EnableMultiplePageItems = True
    With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Mois")
        .PivotItems("1").Visible = False
        .PivotItems("2").Visible = False
        .PivotItems("3").Visible = False
        .PivotItems("4").Visible = False
        .PivotItems("5").Visible = False
        .PivotItems("6").Visible = False
        .PivotItems("7").Visible = False
        .PivotItems("8").Visible = False
        .PivotItems("9").Visible = False
        .PivotItems("10").Visible = False
        .PivotItems("11").Visible = False
        .PivotItems("12").Visible = False
        .PivotItems("13").Visible = False
        .PivotItems("14").Visible = False
        .PivotItems("15").Visible = False
        .PivotItems("16").Visible = False
        .PivotItems("17").Visible = False
        .PivotItems("18").Visible = False
        .PivotItems("19").Visible = False
        .PivotItems("20").Visible = False
        .PivotItems("21").Visible = False
        .PivotItems("22").Visible = False
        .PivotItems("23").Visible = False
        .PivotItems("24").Visible = False
    End With

        ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Mois"). _
        EnableMultiplePageItems = True
    With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Mois")
        .PivotItems("1").Visible = False
        .PivotItems("2").Visible = False
        .PivotItems("3").Visible = False
        .PivotItems("4").Visible = False
        .PivotItems("5").Visible = False
        .PivotItems("6").Visible = False
        .PivotItems("7").Visible = False
        .PivotItems("8").Visible = False
        .PivotItems("9").Visible = False
        .PivotItems("10").Visible = False
        .PivotItems("11").Visible = False
        .PivotItems("12").Visible = False
        .PivotItems("13").Visible = False
        .PivotItems("14").Visible = False
        .PivotItems("15").Visible = False
        .PivotItems("16").Visible = False
        .PivotItems("17").Visible = False
        .PivotItems("18").Visible = False
        .PivotItems("19").Visible = False
        .PivotItems("20").Visible = False
        .PivotItems("21").Visible = False
        .PivotItems("22").Visible = False
        .PivotItems("23").Visible = False
        .PivotItems("24").Visible = False
        End With

        ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Mois"). _
        EnableMultiplePageItems = True
    With ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Mois")
        .PivotItems("1").Visible = False
        .PivotItems("2").Visible = False
        .PivotItems("3").Visible = False
        .PivotItems("4").Visible = False
        .PivotItems("5").Visible = False
        .PivotItems("6").Visible = False
        .PivotItems("7").Visible = False
        .PivotItems("8").Visible = False
        .PivotItems("9").Visible = False
        .PivotItems("10").Visible = False
        .PivotItems("11").Visible = False
        .PivotItems("12").Visible = False
        .PivotItems("13").Visible = False
        .PivotItems("14").Visible = False
        .PivotItems("15").Visible = False
        .PivotItems("16").Visible = False
        .PivotItems("17").Visible = False
        .PivotItems("18").Visible = False
        .PivotItems("19").Visible = False
        .PivotItems("20").Visible = False
        .PivotItems("21").Visible = False
        .PivotItems("22").Visible = False
        .PivotItems("23").Visible = False
        .PivotItems("24").Visible = False
        End With

        ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Mois"). _
        EnableMultiplePageItems = True
    With ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Mois")
        .PivotItems("1").Visible = False
        .PivotItems("2").Visible = False
        .PivotItems("3").Visible = False
        .PivotItems("4").Visible = False
        .PivotItems("5").Visible = False
        .PivotItems("6").Visible = False
        .PivotItems("7").Visible = False
        .PivotItems("8").Visible = False
        .PivotItems("9").Visible = False
        .PivotItems("10").Visible = False
        .PivotItems("11").Visible = False
        .PivotItems("12").Visible = False
        .PivotItems("13").Visible = False
        .PivotItems("14").Visible = False
        .PivotItems("15").Visible = False
        .PivotItems("16").Visible = False
        .PivotItems("17").Visible = False
        .PivotItems("18").Visible = False
        .PivotItems("19").Visible = False
        .PivotItems("20").Visible = False
        .PivotItems("21").Visible = False
        .PivotItems("22").Visible = False
        .PivotItems("23").Visible = False
        .PivotItems("24").Visible = False
    End With

'.... Enchainement du reste du code ....

Application.ScreenUpdating = True
 End Sub

En vous remerciant !

Bonjour,

voici une proposition de simplification. remarque, tu ne peux pas rendre invisibles toutes les valeurs(pivotitems) d'un pivotfield, tu dois en sélectionner au moins une.

for j=2 to 5 ' tcd 2 à 5
with ActiveSheet.PivotTables("Tableau croisé dynamique" & j).PivotFields("Mois")
        .EnableMultiplePageItems = True
        for i=1 to 24 ' pivotitems de valeur 1 à 24
           .PivotItems(i & "").Visible = False
        next i
end with
next j

J'ai bien essayé mais il m'indique qu'il ne peut pas 'lire la propriété PivotTables de la classe worksheet'.

Cela ne serais pas du car il n'y a pas de guillemets à la fin ? (après 'j')

j'ai essayé :

        With ActiveSheet.PivotTables("Tableau croisé dynamique" & j & """).PivotFields("Mois"). _
        EnableMultiplePageItems = True

mais il me marque erreur de syntaxe du coup

Bonjour,

la syntaxe est bien celle que j'ai indiquée.

il cherche la pivottable sur la feuille active, tu dois donc sélectionner la feuille avant de lancer la macro.

Bonjour

Pourquoi mettre les guillemets ? utilise ce que h2so4 t'a proposé et surtout enlève le souligné et le point à replacer devant ENABLE

With ActiveSheet.PivotTables("Tableau croisé dynamique" & j).PivotFields("Mois")
        .EnableMultiplePageItems = True

A te relire

Au tant pour moi sur l'erreur de syntaxe.

Cela fonctionne désormais !

J'a ideux question pour en apprendre un peu plus pour terminer

Pourrais-je avoir une indication sur l'intérêt de & "" dans le code suivant ?

          .PivotItems(i & "").Visible = False

Et est-ce que j = 2 to 5 peux être modifié pour ne pas être une suite séquentielle ? Mais des valeur que nous renseignons ? Par exemple j = 2, 5, 6, 9 ?

Merci pour votre savoir !

bonjour,

1) le & "" force la conversion en string on aurait pu écrire cstr(j).

2) tu peux écrire

for each j in array("2","5","6","9") et dans ce cas la conversion ci-dessus n'est plus nécessaire

ou

for each j in array(2,5,6,9) et dans ce cas il faut garder la conversion

Je te remercie pour toutes tes réponses !

Amicalement,

Rechercher des sujets similaires à "simplification code vba tcd pivotitems"