OVH Cloud OVH Cloud

Décocher un item de TCD par VBA

11 réponses
Avatar
René Delcourt
Bonjour,
Dans un TCD, il y a moyen de décocher les items que l’on ne veut pas voir.
Comment traduit-on cette commande en VBA sachant que certains items
(indésirables) ne seront là qu’en fonction de l’alimentation de la base de
données.
J’ai essayé ceci sans succès :
If PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible = True Then
ActiveSheet.PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible
= False
Merci

--
René Delcourt

10 réponses

1 2
Avatar
michdenis
Bonjour René,

En supposant que j'ai compris ta question :

Adpate le nom des objets selon ton application.

Procédure non testée !

'------------------------------
Sub Test()

Dim pt As PivotTable
Dim pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("toto", "titi", "tutu")


With Worksheets("Feuil1") ' à déterminer
Set pt = .PivotTables("SonNom") 'ou index
End With

Set pf = pt.PivotFields("NomDuPivotField") 'à déterminer
On Error Resume Next
For Each Pi In pf.PivotItems
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
If Not IsError(A) Then
Pi.Visible = False
Else
Err = 0
End If
Next

End Sub
'----------------------------------


Salutations!



"René Delcourt" a écrit dans le message de news:
Bonjour,
Dans un TCD, il y a moyen de décocher les items que l'on ne veut pas voir.
Comment traduit-on cette commande en VBA sachant que certains items
(indésirables) ne seront là qu'en fonction de l'alimentation de la base de
données.
J'ai essayé ceci sans succès :
If PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible = True Then
ActiveSheet.PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible
= False
Merci

--
René Delcourt
Avatar
Modeste
Bonsour® René
je suppose que tu parles des items qui ne se trouvent plus dans ta base de
données
plus connus sous le termes d'items "fantomes" ...
toutes les solutions là :
http://www.contextures.com/xlPivot04.html
les explications officielles là :
http://support.microsoft.com/default.aspx?scid=kb;en-us;202232

--
n'oubliez pas les FAQ :
http://www.excelabo.net http://dj.joss.free.fr/faq.htm
http://www.faqoe.com http://faqword.free.fr
--
Feed Back
http://viadresse.com/?94912042
Avatar
René Delcourt
Bonjour Miche (ou Denis)
Tu as très bien compris la question et ton code m'a laissé beaucoup d'espoir.
Cependant, il bloque (erreur 1004 : impossible de lire la propriété Match) sur
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
J'y a ajouté A = Application.WorksheetFunction.Match(Pi.Name, Arr, 0)

mais rien n'y fait.
Je pense que tu es sur la bonne voie...
J'espère que tu persévéreras.
A+
--
René Delcourt



Bonjour René,

En supposant que j'ai compris ta question :

Adpate le nom des objets selon ton application.

Procédure non testée !

'------------------------------
Sub Test()

Dim pt As PivotTable
Dim pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("toto", "titi", "tutu")


With Worksheets("Feuil1") ' à déterminer
Set pt = .PivotTables("SonNom") 'ou index
End With

Set pf = pt.PivotFields("NomDuPivotField") 'à déterminer
On Error Resume Next
For Each Pi In pf.PivotItems
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
If Not IsError(A) Then
Pi.Visible = False
Else
Err = 0
End If
Next

End Sub
'----------------------------------


Salutations!



"René Delcourt" a écrit dans le message de news:
Bonjour,
Dans un TCD, il y a moyen de décocher les items que l'on ne veut pas voir.
Comment traduit-on cette commande en VBA sachant que certains items
(indésirables) ne seront là qu'en fonction de l'alimentation de la base de
données.
J'ai essayé ceci sans succès :
If PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible = True Then
ActiveSheet.PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible
= False
Merci

--
René Delcourt





Avatar
René Delcourt
Bonjour Modeste,
Merci pour ta (tes) réponse(s).
Il ne s'agit pas des items fantômes dont les réponses m'ont déjà été
conseillées dansun post "items obsolètes" mais des items indésirables.
Je m'explique :
Dans un champ de ma DB il peut y avoir une dizaine de données différentes
mais je ne veux en faire apparaître que 2 dans mon TCD.
Michdenis y travaille mais ne dit-on pas "Du choc des idées jaillit la
lumière"?

PS :
Je n'ai pas très bien compris (dans un post précédent - ascenseur - César,
forum)
;o))) Celui qui touche au hash est c.. comme un manche !!
--
René Delcourt



Bonsour® René
je suppose que tu parles des items qui ne se trouvent plus dans ta base de
données
plus connus sous le termes d'items "fantomes" ...
toutes les solutions là :
http://www.contextures.com/xlPivot04.html
les explications officielles là :
http://support.microsoft.com/default.aspx?scid=kb;en-us;202232

--
n'oubliez pas les FAQ :
http://www.excelabo.net http://dj.joss.free.fr/faq.htm
http://www.faqoe.com http://faqword.free.fr
--
Feed Back
http://viadresse.com/?94912042





Avatar
Modeste
Bonsour® René
../.. mais je ne veux en faire apparaître que 2 dans mon TCD.


une approche possible est de boucler comme tu l'a fais...
mais l'écueil est qu'il en faut absolument un de coché
donc en effet il faut traiter les erreurs en cours de boucle
et surtout que l'item que tu souhaite afficher appartienne à la liste, cela
suppose une boucle préalable pour s'en assurer...
de toutes façons, supprimer les items fantômes est une bonne hygiene ;o)))
mais je ne doute pas que "Michel" ;o) te trouve la solution rapidement...

PS :
Je n'ai pas très bien compris (dans un post précédent - ascenseur ->
César, forum)
c'est un détournement de la citation :

éleveur de trolls depuis César, qui disait : Avec une hache, celui qui
tient le manche a toujours raison !

--
n'oubliez pas les FAQ :
http://www.excelabo.net http://dj.joss.free.fr/faq.htm
http://www.faqoe.com http://faqword.free.fr

Avatar
michdenis
Bonjour René,

essaie ceci : Cela devrait fonctionner !

Attention, je ne crois pas que cela s'applique à toutes les versions "excel" en particulier pour la version 97 !

'---------------------------------
Sub Test()

Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("DIVERS", "61.2")

With Sheets("Feuil1") ' à déterminer
Set Pt = .PivotTables("NomDuPivotField") 'à déterminer
End With
Pt.ManualUpdate = True

Set Pf = Pt.PivotFields("NomDuPivotField") 'à déterminer
On Error Resume Next
For Each Pi In Pf.PivotItems
If IsError(WorksheetFunction.Match(Pi.Name, Arr, 0)) Then
Err = 0
Else
If Pi.Visible <> False Then
Pi.Visible = False
End If
End If
Next
Pt.ManualUpdate = False
Pt.Update

Set Pt = Nothing: Set Pf = Nothing: Set Pi = Nothing
End Sub
'---------------------------------


Salutations!




"René Delcourt" a écrit dans le message de news:
Bonjour Miche (ou Denis)
Tu as très bien compris la question et ton code m'a laissé beaucoup d'espoir.
Cependant, il bloque (erreur 1004 : impossible de lire la propriété Match) sur
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
J'y a ajouté A = Application.WorksheetFunction.Match(Pi.Name, Arr, 0)

mais rien n'y fait.
Je pense que tu es sur la bonne voie...
J'espère que tu persévéreras.
A+
--
René Delcourt



Bonjour René,

En supposant que j'ai compris ta question :

Adpate le nom des objets selon ton application.

Procédure non testée !

'------------------------------
Sub Test()

Dim pt As PivotTable
Dim pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("toto", "titi", "tutu")


With Worksheets("Feuil1") ' à déterminer
Set pt = .PivotTables("SonNom") 'ou index
End With

Set pf = pt.PivotFields("NomDuPivotField") 'à déterminer
On Error Resume Next
For Each Pi In pf.PivotItems
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
If Not IsError(A) Then
Pi.Visible = False
Else
Err = 0
End If
Next

End Sub
'----------------------------------


Salutations!



"René Delcourt" a écrit dans le message de news:
Bonjour,
Dans un TCD, il y a moyen de décocher les items que l'on ne veut pas voir.
Comment traduit-on cette commande en VBA sachant que certains items
(indésirables) ne seront là qu'en fonction de l'alimentation de la base de
données.
J'ai essayé ceci sans succès :
If PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible = True Then
ActiveSheet.PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible
= False
Merci

--
René Delcourt





Avatar
René Delcourt
Le message d'erreur reste le même et bloque sur le Match
Voici le code que j'utilise
PS : Modeste te fait confiance (voir post)...et moi aussi

Sub test2()
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("Offre", "Formation", "Présentation nouveautés", "Sujet",
"Coaching", "Présentation convention", "Signature convention", "Courtoisie",
"Gestion de sinistre")
With Feuil2 ' à déterminer
Set Pt = .PivotTables("Tableau croisé dynamique1") 'à déterminer
End With
Pt.ManualUpdate = True

Set Pf = Pt.PivotFields("Pourquoi?") 'à déterminer
On Error Resume Next
For Each Pi In Pf.PivotItems
If IsError(WorksheetFunction.Match(Pi.Name, Arr, 0)) Then
Err = 0
Else
If Pi.Visible <> False Then
Pi.Visible = False
End If
End If
Next
Pt.ManualUpdate = False
Pt.Update

Set Pt = Nothing: Set Pf = Nothing: Set Pi = Nothing
End Sub
--
René Delcourt



Bonjour René,

essaie ceci : Cela devrait fonctionner !

Attention, je ne crois pas que cela s'applique à toutes les versions "excel" en particulier pour la version 97 !

'---------------------------------
Sub Test()

Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("DIVERS", "61.2")

With Sheets("Feuil1") ' à déterminer
Set Pt = .PivotTables("NomDuPivotField") 'à déterminer
End With
Pt.ManualUpdate = True

Set Pf = Pt.PivotFields("NomDuPivotField") 'à déterminer
On Error Resume Next
For Each Pi In Pf.PivotItems
If IsError(WorksheetFunction.Match(Pi.Name, Arr, 0)) Then
Err = 0
Else
If Pi.Visible <> False Then
Pi.Visible = False
End If
End If
Next
Pt.ManualUpdate = False
Pt.Update

Set Pt = Nothing: Set Pf = Nothing: Set Pi = Nothing
End Sub
'---------------------------------


Salutations!




"René Delcourt" a écrit dans le message de news:
Bonjour Miche (ou Denis)
Tu as très bien compris la question et ton code m'a laissé beaucoup d'espoir.
Cependant, il bloque (erreur 1004 : impossible de lire la propriété Match) sur
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
J'y a ajouté A = Application.WorksheetFunction.Match(Pi.Name, Arr, 0)

mais rien n'y fait.
Je pense que tu es sur la bonne voie...
J'espère que tu persévéreras.
A+
--
René Delcourt



Bonjour René,

En supposant que j'ai compris ta question :

Adpate le nom des objets selon ton application.

Procédure non testée !

'------------------------------
Sub Test()

Dim pt As PivotTable
Dim pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("toto", "titi", "tutu")


With Worksheets("Feuil1") ' à déterminer
Set pt = .PivotTables("SonNom") 'ou index
End With

Set pf = pt.PivotFields("NomDuPivotField") 'à déterminer
On Error Resume Next
For Each Pi In pf.PivotItems
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
If Not IsError(A) Then
Pi.Visible = False
Else
Err = 0
End If
Next

End Sub
'----------------------------------


Salutations!



"René Delcourt" a écrit dans le message de news:
Bonjour,
Dans un TCD, il y a moyen de décocher les items que l'on ne veut pas voir.
Comment traduit-on cette commande en VBA sachant que certains items
(indésirables) ne seront là qu'en fonction de l'alimentation de la base de
données.
J'ai essayé ceci sans succès :
If PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible = True Then
ActiveSheet.PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible
= False
Merci

--
René Delcourt










Avatar
michdenis
L'exemple que je t'ai envoyé était fonctionnel sous excel 2003.

Si tu veux, envoie moi ton classeur dans ma bal...j'y regarderai de plus près. Données et TCD. Je n'ai pas besoin de tout le
classeur.


Salutations!





"René Delcourt" a écrit dans le message de news:
Le message d'erreur reste le même et bloque sur le Match
Voici le code que j'utilise
PS : Modeste te fait confiance (voir post)...et moi aussi

Sub test2()
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("Offre", "Formation", "Présentation nouveautés", "Sujet",
"Coaching", "Présentation convention", "Signature convention", "Courtoisie",
"Gestion de sinistre")
With Feuil2 ' à déterminer
Set Pt = .PivotTables("Tableau croisé dynamique1") 'à déterminer
End With
Pt.ManualUpdate = True

Set Pf = Pt.PivotFields("Pourquoi?") 'à déterminer
On Error Resume Next
For Each Pi In Pf.PivotItems
If IsError(WorksheetFunction.Match(Pi.Name, Arr, 0)) Then
Err = 0
Else
If Pi.Visible <> False Then
Pi.Visible = False
End If
End If
Next
Pt.ManualUpdate = False
Pt.Update

Set Pt = Nothing: Set Pf = Nothing: Set Pi = Nothing
End Sub
--
René Delcourt



Bonjour René,

essaie ceci : Cela devrait fonctionner !

Attention, je ne crois pas que cela s'applique à toutes les versions "excel" en particulier pour la version 97 !

'---------------------------------
Sub Test()

Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("DIVERS", "61.2")

With Sheets("Feuil1") ' à déterminer
Set Pt = .PivotTables("NomDuPivotField") 'à déterminer
End With
Pt.ManualUpdate = True

Set Pf = Pt.PivotFields("NomDuPivotField") 'à déterminer
On Error Resume Next
For Each Pi In Pf.PivotItems
If IsError(WorksheetFunction.Match(Pi.Name, Arr, 0)) Then
Err = 0
Else
If Pi.Visible <> False Then
Pi.Visible = False
End If
End If
Next
Pt.ManualUpdate = False
Pt.Update

Set Pt = Nothing: Set Pf = Nothing: Set Pi = Nothing
End Sub
'---------------------------------


Salutations!




"René Delcourt" a écrit dans le message de news:
Bonjour Miche (ou Denis)
Tu as très bien compris la question et ton code m'a laissé beaucoup d'espoir.
Cependant, il bloque (erreur 1004 : impossible de lire la propriété Match) sur
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
J'y a ajouté A = Application.WorksheetFunction.Match(Pi.Name, Arr, 0)

mais rien n'y fait.
Je pense que tu es sur la bonne voie...
J'espère que tu persévéreras.
A+
--
René Delcourt



Bonjour René,

En supposant que j'ai compris ta question :

Adpate le nom des objets selon ton application.

Procédure non testée !

'------------------------------
Sub Test()

Dim pt As PivotTable
Dim pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("toto", "titi", "tutu")


With Worksheets("Feuil1") ' à déterminer
Set pt = .PivotTables("SonNom") 'ou index
End With

Set pf = pt.PivotFields("NomDuPivotField") 'à déterminer
On Error Resume Next
For Each Pi In pf.PivotItems
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
If Not IsError(A) Then
Pi.Visible = False
Else
Err = 0
End If
Next

End Sub
'----------------------------------


Salutations!



"René Delcourt" a écrit dans le message de news:
Bonjour,
Dans un TCD, il y a moyen de décocher les items que l'on ne veut pas voir.
Comment traduit-on cette commande en VBA sachant que certains items
(indésirables) ne seront là qu'en fonction de l'alimentation de la base de
données.
J'ai essayé ceci sans succès :
If PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible = True Then
ActiveSheet.PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible
= False
Merci

--
René Delcourt










Avatar
michdenis
Bonjour René,

Certains usagers ont déjà énoncé sur ce forum que WorksheetFunction et Match ne faisait pas bon ménage à l'occasion.

Et si tu remplaçais WorksheetFunction.Match(....) par Application.Match(....) est-ce que cela solutionnerait ton problème ?


Salutations!



"René Delcourt" a écrit dans le message de news:
Le message d'erreur reste le même et bloque sur le Match
Voici le code que j'utilise
PS : Modeste te fait confiance (voir post)...et moi aussi

Sub test2()
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("Offre", "Formation", "Présentation nouveautés", "Sujet",
"Coaching", "Présentation convention", "Signature convention", "Courtoisie",
"Gestion de sinistre")
With Feuil2 ' à déterminer
Set Pt = .PivotTables("Tableau croisé dynamique1") 'à déterminer
End With
Pt.ManualUpdate = True

Set Pf = Pt.PivotFields("Pourquoi?") 'à déterminer
On Error Resume Next
For Each Pi In Pf.PivotItems
If IsError(WorksheetFunction.Match(Pi.Name, Arr, 0)) Then
Err = 0
Else
If Pi.Visible <> False Then
Pi.Visible = False
End If
End If
Next
Pt.ManualUpdate = False
Pt.Update

Set Pt = Nothing: Set Pf = Nothing: Set Pi = Nothing
End Sub
--
René Delcourt



Bonjour René,

essaie ceci : Cela devrait fonctionner !

Attention, je ne crois pas que cela s'applique à toutes les versions "excel" en particulier pour la version 97 !

'---------------------------------
Sub Test()

Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("DIVERS", "61.2")

With Sheets("Feuil1") ' à déterminer
Set Pt = .PivotTables("NomDuPivotField") 'à déterminer
End With
Pt.ManualUpdate = True

Set Pf = Pt.PivotFields("NomDuPivotField") 'à déterminer
On Error Resume Next
For Each Pi In Pf.PivotItems
If IsError(WorksheetFunction.Match(Pi.Name, Arr, 0)) Then
Err = 0
Else
If Pi.Visible <> False Then
Pi.Visible = False
End If
End If
Next
Pt.ManualUpdate = False
Pt.Update

Set Pt = Nothing: Set Pf = Nothing: Set Pi = Nothing
End Sub
'---------------------------------


Salutations!




"René Delcourt" a écrit dans le message de news:
Bonjour Miche (ou Denis)
Tu as très bien compris la question et ton code m'a laissé beaucoup d'espoir.
Cependant, il bloque (erreur 1004 : impossible de lire la propriété Match) sur
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
J'y a ajouté A = Application.WorksheetFunction.Match(Pi.Name, Arr, 0)

mais rien n'y fait.
Je pense que tu es sur la bonne voie...
J'espère que tu persévéreras.
A+
--
René Delcourt



Bonjour René,

En supposant que j'ai compris ta question :

Adpate le nom des objets selon ton application.

Procédure non testée !

'------------------------------
Sub Test()

Dim pt As PivotTable
Dim pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("toto", "titi", "tutu")


With Worksheets("Feuil1") ' à déterminer
Set pt = .PivotTables("SonNom") 'ou index
End With

Set pf = pt.PivotFields("NomDuPivotField") 'à déterminer
On Error Resume Next
For Each Pi In pf.PivotItems
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
If Not IsError(A) Then
Pi.Visible = False
Else
Err = 0
End If
Next

End Sub
'----------------------------------


Salutations!



"René Delcourt" a écrit dans le message de news:
Bonjour,
Dans un TCD, il y a moyen de décocher les items que l'on ne veut pas voir.
Comment traduit-on cette commande en VBA sachant que certains items
(indésirables) ne seront là qu'en fonction de l'alimentation de la base de
données.
J'ai essayé ceci sans succès :
If PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible = True Then
ActiveSheet.PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible
= False
Merci

--
René Delcourt










Avatar
René Delcourt
On peut enfin clore ce chapitre.
Bravo et merci!
--
René Delcourt



Bonjour René,

Certains usagers ont déjà énoncé sur ce forum que WorksheetFunction et Match ne faisait pas bon ménage à l'occasion.

Et si tu remplaçais WorksheetFunction.Match(....) par Application.Match(....) est-ce que cela solutionnerait ton problème ?


Salutations!



"René Delcourt" a écrit dans le message de news:
Le message d'erreur reste le même et bloque sur le Match
Voici le code que j'utilise
PS : Modeste te fait confiance (voir post)...et moi aussi

Sub test2()
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("Offre", "Formation", "Présentation nouveautés", "Sujet",
"Coaching", "Présentation convention", "Signature convention", "Courtoisie",
"Gestion de sinistre")
With Feuil2 ' à déterminer
Set Pt = .PivotTables("Tableau croisé dynamique1") 'à déterminer
End With
Pt.ManualUpdate = True

Set Pf = Pt.PivotFields("Pourquoi?") 'à déterminer
On Error Resume Next
For Each Pi In Pf.PivotItems
If IsError(WorksheetFunction.Match(Pi.Name, Arr, 0)) Then
Err = 0
Else
If Pi.Visible <> False Then
Pi.Visible = False
End If
End If
Next
Pt.ManualUpdate = False
Pt.Update

Set Pt = Nothing: Set Pf = Nothing: Set Pi = Nothing
End Sub
--
René Delcourt



Bonjour René,

essaie ceci : Cela devrait fonctionner !

Attention, je ne crois pas que cela s'applique à toutes les versions "excel" en particulier pour la version 97 !

'---------------------------------
Sub Test()

Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("DIVERS", "61.2")

With Sheets("Feuil1") ' à déterminer
Set Pt = .PivotTables("NomDuPivotField") 'à déterminer
End With
Pt.ManualUpdate = True

Set Pf = Pt.PivotFields("NomDuPivotField") 'à déterminer
On Error Resume Next
For Each Pi In Pf.PivotItems
If IsError(WorksheetFunction.Match(Pi.Name, Arr, 0)) Then
Err = 0
Else
If Pi.Visible <> False Then
Pi.Visible = False
End If
End If
Next
Pt.ManualUpdate = False
Pt.Update

Set Pt = Nothing: Set Pf = Nothing: Set Pi = Nothing
End Sub
'---------------------------------


Salutations!




"René Delcourt" a écrit dans le message de news:
Bonjour Miche (ou Denis)
Tu as très bien compris la question et ton code m'a laissé beaucoup d'espoir.
Cependant, il bloque (erreur 1004 : impossible de lire la propriété Match) sur
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
J'y a ajouté A = Application.WorksheetFunction.Match(Pi.Name, Arr, 0)

mais rien n'y fait.
Je pense que tu es sur la bonne voie...
J'espère que tu persévéreras.
A+
--
René Delcourt



Bonjour René,

En supposant que j'ai compris ta question :

Adpate le nom des objets selon ton application.

Procédure non testée !

'------------------------------
Sub Test()

Dim pt As PivotTable
Dim pf As PivotField
Dim Pi As PivotItem
Dim Arr(), A As Variant

''liste indésirable que tu veux rendre invisible
Arr = Array("toto", "titi", "tutu")


With Worksheets("Feuil1") ' à déterminer
Set pt = .PivotTables("SonNom") 'ou index
End With

Set pf = pt.PivotFields("NomDuPivotField") 'à déterminer
On Error Resume Next
For Each Pi In pf.PivotItems
A = WorksheetFunction.Match(Pi.Name, Arr, 0)
If Not IsError(A) Then
Pi.Visible = False
Else
Err = 0
End If
Next

End Sub
'----------------------------------


Salutations!



"René Delcourt" a écrit dans le message de news:
Bonjour,
Dans un TCD, il y a moyen de décocher les items que l'on ne veut pas voir.
Comment traduit-on cette commande en VBA sachant que certains items
(indésirables) ne seront là qu'en fonction de l'alimentation de la base de
données.
J'ai essayé ceci sans succès :
If PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible = True Then
ActiveSheet.PivotTables("TCD ").PivotFields(T40).PivotItem("T" & X).Visible
= False
Merci

--
René Delcourt















1 2