je n'arrive pas à utiliser une variable pour définir un choix dans un tableau croisé dynamique
Par une boîte de dialogue, je recueille l'année d'analyse choisie mais je ne sais pas comment "injecter" cette année dans le code
Le but de la manœuvre étant d'afficher dans le TCD l'année sélectionnée (ici simplifié à l'extrème pour me concentrer sur le problème)
Qui peut me dire ce qui cloche dans le code suivant ?
J'obtiens le message "erreur d'exécution 1004 impossible de lire la propriété Pivotitems de la classe PivotFields"
Code:
Sub Q_Année()
Dim AnnéeRéponse As Integer
AnnéeRéponse = Application.InputBox("Saisissez l'année souhaitée", Type:=1)
With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Année")
.PivotItems(AnnéeRéponse).Visible = True
End With
End Sub
pas pu tester mais :
With ActiveSheet.PivotTables("Tableau croisé dynamique3")
.PivotFields("Année")
.PivotItems(AnnéeRéponse).Visible = True
End With
ça donne quoi ?
à+
non,
à tester:
With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Année")
.ClearAllFilters
.CurrentPage = AnnéeRéponse
End With
à+
pour répondre à ta première question, j'obtiens le message d'erreur "erreur d'exécution 1004 impossible de lire la propriété Pivotitems de la classe PivotFields" en lançant le code précisé (comme précisé dans le message initial).
Ta proposition fonctionne
mais
en fait ce que je cherchais à faire (et que je n'avais pas précisé il est vrai dans le fil initial), c'est à partir de la réponse donnée par l'utilisateur (année par ex 2012), calculer l'année n-1 et afficher sur le même tcd les données pour 2012 (au-dessus) et 2011 (au-dessous) : voir dans la nouvelle pièce jointe
Du coup, j'ai besoin de connaître la "syntaxe" pour m'adresser à l'année
Pour cela, je pensais donc créer par
dim AnnéeRéponseAvant as integer
et AnnéeRéponseAvant =AnnéeRéponse-1
et afficher les 2 années consécutives par (ou en adaptant le code)
Code:
With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Année")
.PivotItems(AnnéeRéponse).Visible = True
.PivotItems(AnnéeRéponseAvant ).Visible = True
End With
je viens de faire un essais avec l'enregistreur
d'après ce que je comprend, il faut travailler à l'envers
à savoir, utiliser ClearAllFilters pour tout afficher et lui dire après avec ...Visible = False quelles sont les item que tu ne veux pas voir
j'imagine que le plus simple serait de créer un tableau avec les différentes entrées, récupérer l'année de l'inputbox comparer les valeurs du tableau à cette entrée et indiquer de boucler sur une variable
j'ai pas trop réflechi à ça mais ça peut être une solution à regarder
à+
ci dessous, avec ce code tu n'as que les années 2012 et 2013 qui s'affichent
With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Année")
.ClearAllFilters
.PivotItems("2014").Visible = False
'.PivotItems("2013").Visible = False
'.PivotItems("2012").Visible = False
.PivotItems("2011").Visible = False
.PivotItems("2010").Visible = False
.PivotItems("2009").Visible = False
.PivotItems("2008").Visible = False
.PivotItems("2007").Visible = False
.PivotItems("2006").Visible = False
End With
En fait, ça suit le principe que j'utilise pour les mois (voir dans le fichier joint).
Avec les mois, on est exhaustif avec 12 mais quid des années ? ici certes il n'y en a pas des masses mais c'est un exemple simplifié.
De façon générale, n'y a-t-il pas un moyen de considérer l'année (ou n'importe quel item) comme une variable ?