PivotItem ne se met pas à jour

  • 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,

je cherche à automatiser la mise à jour de l'année dans des TCD (2 années superposées). Comme j'en ai en très grand nombre (1 par feuille), c'est terriblement fastidieux de devoir activer la feuille et sélectionner les deux années …
Je compte donc (ultérieurement) mettre dans une boucle le code ci-dessous mais ça coince quand l'année n'existe pas …

Question 1
Même avec une année présente dans la base, j'obtiens un bug (ex : année 2011)
Je ne trouve pas pourquoi … (car pour d'autres, ça marche)

Question 2
Y a-t-il moyen de restreindre la saisie aux seules années présentes dans "Source"
Je pensais définir la colonne F de la feuille "Source" comme par ex Periode puis mettre en œuvre une boucle du type for each cellule in Periode … mais je ne m'en sors pas …
Quelqu'un a-t-il une idée comme faire ?

PS : ma question est une adaptation du fil ouvert hier et auquel francedemo (que je salue au passage) avait répondu. Mais comme ça n'est plus exactement le même besoin, j'ai préféré ouvrir une nouvelle question

Merci d'avance

Code:
Sub Question_Année()

Dim pItem As PivotItem
Dim AnnéeRéponse As Long
Dim AnnéeAvantRéponse As Long

AnnéeRéponse = Application.InputBox("Donnez l'année souhaitée", Type:=1)
AnnéeAvantRéponse = AnnéeRéponse - 1

With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Année")
    For Each pItem In .PivotItems
            If pItem.Name = AnnéeRéponse Or pItem.Name = AnnéeAvantRéponse Then
            pItem.Visible = True
        Else
            pItem.Visible = False
        End If
    Next
End With

End Sub
 

Pièces jointes

Re : PivotItem ne se met pas à jour

Bonjour

Si tous tes TCD sont basés sur la même source, un simple segment connecté à l'ensemble des TCD suffit à faire la même chose.

Sinon il faut d'abord afficher toutes les années car sinon ton code essaye de masquer tout d'où l'erreur.

Pour le contrôle, si on veut le faire en amont, il faut tester si l'année existe

  • soit dans le TCD via une boucle
  • soit dans la source via une recherche
  • soit dans le segment si tu ajoutes le segment et maintiens néanmoins le choix par inputbox
avant de masquer quoi que ce soit.

Edit : Coucou l'artiste 🙂
 
Re : PivotItem ne se met pas à jour

Bonjour Philippe, bonjour Chris,

merci pour votre aide.

Philippe
Tu avais raison, le on error resume next résoud le problème.
J'ai fait plusieurs essais (j'espère avoir balayé l'ensemble des cas de figure) et ça fonctionne parfaitement.
Cependant, comme je vais insérer ce module dans un projet plus large, j'ai peur que l'instruction on error resume next neutralise certaines autres fonctions ailleurs.
Y a-t-il une instruction pour "annuler" on error resume next ? (désolé, je ne suis pas très fortiche ...)


Chris
Mes TCD vont bien tous taper dans la même source.
Mais je ne sais pas ce qu'est un segment ...
Peux-tu me donner un exemple ?


Encore merci
Sebast
 
Re : PivotItem ne se met pas à jour

Re

Tu cliques dans un de tes TCD : Onglet Insertion, Segment : tu choisis année.

Tu peut mettre le segment sur 3 ou 4 colonnes via l'onglet segment.

Clic droit sur le titre du segment, Connexions de TCD : tu coches tous les TCD. Ainsi le choix dans le segment s'appliquera à tous les TCD. N. B. : La muti sélection se fait classiquement avec CTRL.

Exemple là Synchro par segment
 
Re : PivotItem ne se met pas à jour

Chris,

merci pour ces infos. En fait, j'étais persuadé d'avoir Excel 2010 mais je n'ai que 2007 !
Donc c'est râpé ...

Cette option paraît très intéressante mais je devrai m'en passer. Par une boucle sur toutes les feuilles contenant un TCD, j'arriverai à m'en sortir.

En revanche, je suis toujours preneur de renseignements sur on error resume next, surtout pour le désactiver (voire les éventuelles interactions avec d'autres fonctionnalités si je n'annule pas).

Merci
 
Re : PivotItem ne se met pas à jour

Re

Met ton profil à jour car il y a pas mal de différence entre 2007 et 2010 sur les TCD.

Code:
Sub Question_Année()

Dim pItem As PivotItem
Dim AnnéeRéponse As Long
Dim AnnéeAvantRéponse As Long
Dim x As Long, An As Range

AnnéeRéponse = Application.InputBox("Donnez l'année souhaitée", Type:=1)
AnnéeAvantRéponse = AnnéeRéponse - 1

'Test existence année dans source
Set An = Worksheets("Source").Columns("F:F").Find(What:=AnnéeRéponse, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)

If An Is Nothing Then
    MsgBox "Année inexistente"
    Exit Sub
End If

'Filtre
With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Année")
    .ClearAllFilters
    x = .PivotItems.Count
    For Each pItem In .PivotItems
        If pItem.Name <> AnnéeRéponse And pItem.Name <> AnnéeAvantRéponse And x > 1 Then
            pItem.Visible = False
            x = x - 1
        End If
    Next
End With

End Sub
 
Re : PivotItem ne se met pas à jour

Chris,

merci beaucoup pour ce code, qui donne entière satisfaction.
Je l'ai testé dans toutes les configurations, ça marche !

J'essaie de décortiquer les instructions et ne comprends pas pourquoi tu as écrit

Code:
x=x-1


J'ai neutralisé cette instruction et ça fonctionne tout autant (?)

Encore merci pour ta patience

Sebast
 
Re : PivotItem ne se met pas à jour

Re,

petite question subsidiaire (pour reprendre le fil de 9 h 12 avec Philippe ...)

si j'utilise on error resume next (qui donne également satisfaction dans le cas présent) et que je veux "déconnecter" cette gestion d'erreur avant de finir, dois-je utiliser
Code:
on error goto 0
juste avant end sub ou alors une autre instruction ?

Merci pour vos lumières
 
Re : PivotItem ne se met pas à jour

Re
...
si j'utilise on error resume next (qui donne également satisfaction dans le cas présent) et que je veux "déconnecter" cette gestion d'erreur avant de finir, dois-je utiliser
Code:
on error goto 0
juste avant end sub ou alors une autre instruction ?...

"on error goto 0" annule effectivement la gestion d'erreur : en général on déclenche la gestion avant la boucle et on l'enlève à la suite de la boucle mais selon le structure du code et les instructions, cela peut différer...
 
Re : PivotItem ne se met pas à jour

Re,

merci pour ces précisions.

Concernant le
Code:
 x=x-1
, quand tu parles d'un contrôle en amont et en sortie, tu penses au test de Année dans source (If An Is Nothing Then) ou à autre chose ?

ou penses-tu à
Code:
on error resume next
puis on error goto 0 ?
Car avec on error resume next, le code est ultra léger, cette simple instruction résoud à elle seule le souci et dispense de tester la présence de l'année dans la source. Cependant, ton code permet de bien décortiquer le cheminement mis en oeuvre.

Encore merci
 
Re : PivotItem ne se met pas à jour

RE

Je ne suis pas fan des on error et préfère gérer en amont les risques (je parlais bien du contrôle dans la source).

D'une part on n'est pas à l'abri d'une autre erreur et le resume next oblige à structurer le code de telle façon que l'instruction suivante soit exécutable même si l'erreur se produit, ce qui dans des cas plus complexes n'est pas toujours logique...

Mais je n'impose pas ma vision...
 
Re : PivotItem ne se met pas à jour

Re,

je partage ta vision : le on error fait le job apparemment sur le problème rencontré mais on ne sait pas les autres qui pourraient apparaître.
Comme je l'ai écrit, ton code est plus long mais au moins on comprend et surtout on a bordé les risques.

Encore merci

PS : comment noter que la discussion est close car le problème est résolu ?
 
- 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
12
Affichages
1 K
Réponses
7
Affichages
968
Réponses
2
Affichages
771
Réponses
3
Affichages
951
Retour