Tableau croisé dynamique, rafraîchir les listes déroulantes...

Le
Céline Brien
Bonjour à toutes et à tous,
Lorsque des éléments d'un champ composant un tableau croisé dynamique ne
sont plus utilisés dans les données, ils font tout de même partie de la
liste déroulante du champ.
Exemple :
Le champ Sous-catégorie comprenait les éléments suivants RT 1 à 29 et RT
30 et +.
Les éléments ont été changés pour RT 1 à 39 et RT 40 et +.
Dans la liste déroulante du champ Sous-catégorie, dans le tableau croisé
dynamique, les éléments RT 1 à 29 et RT 30 et + apparaissent toujours.
La plupart du temps, cette particularité peut être très très utile. Par
exemple, si vous avez coché la case demandant d'Afficher les éléments
dans donnée. Vous souhaitez qu'un élément qui ne serait pas utilisé
pendant un certain temps fasse tout de même partie de votre tableau
croisé dynamique.
Tout de même, je me demande s'il est possible de "rafraîchir" cette
liste de temps en temps.
À part refaire le tableau croisé dynamique, auriez-vous un truc ?
Merci de votre aide,
Céline
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
sabatier
Le #363344
ma pauvre rainette, tu t'es levée bien tôt en ce froid dimanche à
mi-chemin de l'ide de mars pour poser une question à laquelle je ne
saurais répondre...me pardonneras-tu au moins?
jps

Céline Brien a écrit:
Bonjour à toutes et à tous,


michdenis
Le #363332
Bonjour Céline,


Voici un message de Daniel Maher sur le sujet paru dans de groupe de discussions :

________________________
Il y a l'alternative proposée par Debra Dalgleish (pas essayé mais elle m'a
l'air basé sur le fait qu'une destruction d'Items encore valide génère une
erreur). Moi, je sauvegarderais mon fichier avant!

La voici (à adapter évidemment dans le cas où tu le veux pour un TCD en
particulier) :

'Debra Dalgleish
'Excel FAQ, Tips & Book List
' http://www.contextures.com/tiptech.html

Sub DeleteOldItemsWB()
'gets rid of unused items in PivotTable based on MSKB (Q202232)
'had to go through procedure twice to clear items (for i= 1 to 2)
Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim i As Integer

On Error Resume Next
For i = 1 To 2
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
For Each pf In pt.PivotFields
For Each pi In pf.PivotItems
pi.Delete
Next
Next
pt.RefreshTable
Next
Next
Next
End Sub

Salutations,

Daniel M.
_____________________________________


Salutations!




"Céline Brien" news:%
Bonjour à toutes et à tous,
Lorsque des éléments d'un champ composant un tableau croisé dynamique ne
sont plus utilisés dans les données, ils font tout de même partie de la
liste déroulante du champ.
Exemple :
Le champ Sous-catégorie comprenait les éléments suivants RT 1 à 29 et RT
30 et +.
Les éléments ont été changés pour RT 1 à 39 et RT 40 et +.
Dans la liste déroulante du champ Sous-catégorie, dans le tableau croisé
dynamique, les éléments RT 1 à 29 et RT 30 et + apparaissent toujours.
La plupart du temps, cette particularité peut être très très utile. Par
exemple, si vous avez coché la case demandant d'Afficher les éléments
dans donnée. Vous souhaitez qu'un élément qui ne serait pas utilisé
pendant un certain temps fasse tout de même partie de votre tableau
croisé dynamique.
Tout de même, je me demande s'il est possible de "rafraîchir" cette
liste de temps en temps.
À part refaire le tableau croisé dynamique, auriez-vous un truc ?
Merci de votre aide,
Céline
Céline Brien
Le #363284
Bonjour MichDenis,
Merci beaucoup !
Extra !
Voici une version améliorée. J'ai ajouté la désactivation du calcul
automatique et la désactivation de l'actualisation de l'écran.
La désactivation du calcul automatique est particulièrement importante !
Une fenêtre message annonce la fin de la macro.
Merci encore !
Céline
P.-S.: Je n'ai pas trouvé l'article de MSKB !?
-----------------------------------------------
Sub DeleteOldItemsWB()
'gets rid of unused items in PivotTable based on MSKB (Q202232)
'had to go through procedure twice to clear items (for i= 1 to 2)
' Désactiver l'actualisation de l'écran (exécution plus rapide de la
macro)
Application.ScreenUpdating = False
' Désactiver le calcul automatique
Application.Calculation = xlManual
Application.CalculateBeforeSave = False
' Déclarer les variables
Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim i As Integer
' Supprimer les éléments de tous les champs, de tous les tableaux
croisés dynamiques
On Error Resume Next
For i = 1 To 2
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
For Each pf In pt.PivotFields
For Each pi In pf.PivotItems
pi.Delete
Next
Next
pt.RefreshTable
Next
Next
Next
' Activer l'actualisation de l'écran
Application.ScreenUpdating = True
' Activer le calcul automatique
Application.Calculation = xlAutomatic
Application.CalculateBeforeSave = True
Msg = Msg & "La macro est terminée !"
MsgBox Msg, vbInformatin, "Rafraîchir les listes déroulantes d'un
tableau croisé dynamique"
End Sub


"michdenis" news:
Bonjour Céline,


Voici un message de Daniel Maher sur le sujet paru dans de groupe de
discussions :


________________________
Il y a l'alternative proposée par Debra Dalgleish (pas essayé mais
elle m'a

l'air basé sur le fait qu'une destruction d'Items encore valide génère
une

erreur). Moi, je sauvegarderais mon fichier avant!

La voici (à adapter évidemment dans le cas où tu le veux pour un TCD
en

particulier) :

'Debra Dalgleish
'Excel FAQ, Tips & Book List
' http://www.contextures.com/tiptech.html

Sub DeleteOldItemsWB()
'gets rid of unused items in PivotTable based on MSKB (Q202232)
'had to go through procedure twice to clear items (for i= 1 to 2)
Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim i As Integer

On Error Resume Next
For i = 1 To 2
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
For Each pf In pt.PivotFields
For Each pi In pf.PivotItems
pi.Delete
Next
Next
pt.RefreshTable
Next
Next
Next
End Sub

Salutations,

Daniel M.
_____________________________________


Salutations!




"Céline Brien" de

news:%
Bonjour à toutes et à tous,
Lorsque des éléments d'un champ composant un tableau croisé dynamique
ne

sont plus utilisés dans les données, ils font tout de même partie de
la

liste déroulante du champ.
Exemple :
Le champ Sous-catégorie comprenait les éléments suivants RT 1 à 29 et
RT

30 et +.
Les éléments ont été changés pour RT 1 à 39 et RT 40 et +.
Dans la liste déroulante du champ Sous-catégorie, dans le tableau
croisé

dynamique, les éléments RT 1 à 29 et RT 30 et + apparaissent toujours.
La plupart du temps, cette particularité peut être très très utile.
Par

exemple, si vous avez coché la case demandant d'Afficher les éléments
dans donnée. Vous souhaitez qu'un élément qui ne serait pas utilisé
pendant un certain temps fasse tout de même partie de votre tableau
croisé dynamique.
Tout de même, je me demande s'il est possible de "rafraîchir" cette
liste de temps en temps.
À part refaire le tableau croisé dynamique, auriez-vous un truc ?
Merci de votre aide,
Céline





Céline Brien
Le #363270
Bonjour mon beau crapaud,
Je voulais profiter au maximum de la Nonae !
Je ne te pardonne pas car il n'y a rien à pardonner.
Laisse-moi plutôt te remercier de nous rappeler si délicatement le temps
qui passe.
Bises,
Céline


"sabatier" news:
ma pauvre rainette, tu t'es levée bien tôt en ce froid dimanche à
mi-chemin de l'ide de mars pour poser une question à laquelle je ne
saurais répondre...me pardonneras-tu au moins?
jps

Céline Brien a écrit:
Bonjour à toutes et à tous,





Daniel.M
Le #363244
Salut Denis, Céline,

Pour une version plus récente et AMA, plus sécure :
On peut adapter en suspendant les MAJ calculs/affichage écran.


' Published by Debra Dalgleish 21 Juin 2003
'
'===================== Sub DeleteOldItemsWB()
'gets rid of unused items in PivotTable
' based on MSKB (202232)
Dim WS As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim i As Integer

On Error Resume Next
For Each WS In ActiveWorkbook.Worksheets
For Each pt In WS.PivotTables
pt.RefreshTable
For Each pf In pt.PivotFields
For Each pi In pf.PivotItems
If pi.RecordCount = 0 And _
Not pi.IsCalculated Then
pi.Delete
End If
Next
Next
Next
Next
End Sub
'=======================
Salutations,

Daniel M.
Céline Brien
Le #363481
Salut Daniel,
Merci de ta réponse,
Ta macro comporte une ligne de plus :
If pi.RecordCount = 0 And Not pi.IsCalculated Then pi.Delete
Elle supprime seulement les éléments de champ qui ne sont pas utilisés
dans un calcul ?
Merci encore,
Céline


"Daniel.M" news:
Salut Denis, Céline,

Pour une version plus récente et AMA, plus sécure :
On peut adapter en suspendant les MAJ calculs/affichage écran.


' Published by Debra Dalgleish 21 Juin 2003
'
'===================== > Sub DeleteOldItemsWB()
'gets rid of unused items in PivotTable
' based on MSKB (202232)
Dim WS As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim i As Integer

On Error Resume Next
For Each WS In ActiveWorkbook.Worksheets
For Each pt In WS.PivotTables
pt.RefreshTable
For Each pf In pt.PivotFields
For Each pi In pf.PivotItems
If pi.RecordCount = 0 And _
Not pi.IsCalculated Then
pi.Delete
End If
Next
Next
Next
Next
End Sub
'======================= >
Salutations,

Daniel M.




Céline Brien
Le #363467
Oups !
Deux lignes de plus :
1) If pi.RecordCount = 0 And Not pi.IsCalculated Then
pi.Delete
2) End If
Elles supprime seulement les éléments de champ qui ne sont pas utilisés
dans un calcul ?
En plus : You don't have to go through procedure twice to clear items
(for i= 1 to 2)!
Merci,
Céline


"Céline Brien" de news:
Salut Daniel,
Merci de ta réponse,
Ta macro comporte une ligne de plus :
If pi.RecordCount = 0 And Not pi.IsCalculated Then pi.Delete
Elle supprime seulement les éléments de champ qui ne sont pas utilisés
dans un calcul ?
Merci encore,
Céline


"Daniel.M" de

news:
Salut Denis, Céline,

Pour une version plus récente et AMA, plus sécure :
On peut adapter en suspendant les MAJ calculs/affichage écran.


' Published by Debra Dalgleish 21 Juin 2003
'
'===================== > > Sub DeleteOldItemsWB()
'gets rid of unused items in PivotTable
' based on MSKB (202232)
Dim WS As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim i As Integer

On Error Resume Next
For Each WS In ActiveWorkbook.Worksheets
For Each pt In WS.PivotTables
pt.RefreshTable
For Each pf In pt.PivotFields
For Each pi In pf.PivotItems
If pi.RecordCount = 0 And _
Not pi.IsCalculated Then
pi.Delete
End If
Next
Next
Next
Next
End Sub
'======================= > >
Salutations,

Daniel M.







gee-dee-
Le #363464
Bonsoir Céline,
si tu as jeté un oeil sur le site de Débra,
il y est marqué également que l'on peut sortir du TCD le pivot Item concerné
puis réactualiser alors les données
et ensuite remettre le pivot Item à sa place d'origine...

@+
"Céline Brien" news:%
Bonjour à toutes et à tous,
Lorsque des éléments d'un champ composant un tableau croisé dynamique ne
sont plus utilisés dans les données, ils font tout de même partie de la
liste déroulante du champ.
Exemple :
Le champ Sous-catégorie comprenait les éléments suivants RT 1 à 29 et RT
30 et +.
Les éléments ont été changés pour RT 1 à 39 et RT 40 et +.
Dans la liste déroulante du champ Sous-catégorie, dans le tableau croisé
dynamique, les éléments RT 1 à 29 et RT 30 et + apparaissent toujours.
La plupart du temps, cette particularité peut être très très utile. Par
exemple, si vous avez coché la case demandant d'Afficher les éléments
dans donnée. Vous souhaitez qu'un élément qui ne serait pas utilisé
pendant un certain temps fasse tout de même partie de votre tableau
croisé dynamique.
Tout de même, je me demande s'il est possible de "rafraîchir" cette
liste de temps en temps.
À part refaire le tableau croisé dynamique, auriez-vous un truc ?
Merci de votre aide,
Céline




Céline Brien
Le #363460
Salut toi !
Merci de ta contribution.
J'ai testé le tout et je n'ai pas obtenu le résultat souhaité !
Après avoir supprimé l'élément du TCD, après avoir mis à jour les
données, après avoir de nouveau insérer l'élément dans le TCD, les
éléments du champ inexistants et non -utilisés s'affichent toujours dans
la liste déroulante.
J'aurais bien aimé que cette solution très simple fonctionne !
Je vais aller faire un tour sur le site.
Merci encore,
Céline

"gee-dee-" news:%
Bonsoir Céline,
si tu as jeté un oeil sur le site de Débra,
il y est marqué également que l'on peut sortir du TCD le pivot Item
concerné

puis réactualiser alors les données
et ensuite remettre le pivot Item à sa place d'origine...

@+
"Céline Brien" de

news:%
Bonjour à toutes et à tous,
Lorsque des éléments d'un champ composant un tableau croisé
dynamique ne


sont plus utilisés dans les données, ils font tout de même partie de
la


liste déroulante du champ.
Exemple :
Le champ Sous-catégorie comprenait les éléments suivants RT 1 à 29
et RT


30 et +.
Les éléments ont été changés pour RT 1 à 39 et RT 40 et +.
Dans la liste déroulante du champ Sous-catégorie, dans le tableau
croisé


dynamique, les éléments RT 1 à 29 et RT 30 et + apparaissent
toujours.


La plupart du temps, cette particularité peut être très très utile.
Par


exemple, si vous avez coché la case demandant d'Afficher les
éléments


dans donnée. Vous souhaitez qu'un élément qui ne serait pas utilisé
pendant un certain temps fasse tout de même partie de votre tableau
croisé dynamique.
Tout de même, je me demande s'il est possible de "rafraîchir" cette
liste de temps en temps.
À part refaire le tableau croisé dynamique, auriez-vous un truc ?
Merci de votre aide,
Céline








Publicité
Poster une réponse
Anonyme