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,