Pb cocher/decocher un item sur regroupement de date (jour) par VBA

Le
manubole
Bonjour,

Sur une macro qui tournait TRES BIEN sur Office 2007, avant l'installation
de l'update Pack 2, je me retrouve avec le problème suivant:

Un message d'erreur apparaît lorsque je demande l'exécution du code:

With ActiveSheet.PivotTables(1).PivotFields("Date")
.PivotItems(3).Visible = True
.PivotItems("6-jan").Visible = True
End With

Explications: le champ "Date" est la partie 'Jour' provenant d'un champ de
type 'date' regroupée en jour/mois/année.

L'erreur intervient en ligne 2 et en ligne 3, ce n'est donc pas un problème
de format! De plus, cette macro a été écrite en mode 'Automatique' (sauf la
ligne 2). Je n'y comprends plus rien.

Le message d'erreur est précisément:
Sur ligne 2: "Impossible de définir la propriété Visible de la classe
PivotItem"
Sur ligne 3: "Impossible de lire la propriété PivotItems de la classe
PivotField"

Si vous pouviez m'aider, ça serait super!! Je compte sur vous
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
manubole
Le #19283841
Bonjour MichDenis,

ci après le lien.
http://cjoint.com/?fjaYTYeLJH

Merci de ton aide,

A bientôt


"MichDenis" a écrit :

Bonjour Manubole,

Est-ce possible de publier seulement une petite partie du fichier
relatif à ton problème (assure toi d'enlever toutes les informations
sensibles) en utilisant une de ces ressources :
Cjoint.com ou Cijoint.Fr

Tu publies ici, l'adresse de la location obtenue



"manubole" Bonjour,

Sur une macro qui tournait TRES BIEN sur Office 2007, avant l'installation
de l'update Pack 2, je me retrouve avec le problème suivant:

Un message d'erreur apparaît lorsque je demande l'exécution du code:

With ActiveSheet.PivotTables(1).PivotFields("Date")
.PivotItems(3).Visible = True
.PivotItems("6-jan").Visible = True
End With

Explications: le champ "Date" est la partie 'Jour' provenant d'un champ de
type 'date' regroupée en jour/mois/année.

L'erreur intervient en ligne 2 et en ligne 3, ce n'est donc pas un problème
de format! De plus, cette macro a été écrite en mode 'Automatique' (sauf la
ligne 2). Je n'y comprends plus rien.

Le message d'erreur est précisément:
Sur ligne 2: "Impossible de définir la propriété Visible de la classe
PivotItem"
Sur ligne 3: "Impossible de lire la propriété PivotItems de la classe
PivotField"

Si vous pouviez m'aider, ça serait super!! Je compte sur vous..


manubole
Le #19284261
Ah zut! J'ai zippé le fichier on va voir ce que ça donne.

http://cjoint.com/?fjcbc7eeSr



"MichDenis" a écrit :

Il y a un problème avec le contenu de ton fichier que tu as publié.
Essaie de l'ouvrir tu verras !



"manubole" Bonjour MichDenis,

ci après le lien.
http://cjoint.com/?fjaYTYeLJH

Merci de ton aide,

A bientôt


"MichDenis" a écrit :

> Bonjour Manubole,
>
> Est-ce possible de publier seulement une petite partie du fichier
> relatif à ton problème (assure toi d'enlever toutes les informations
> sensibles) en utilisant une de ces ressources :
> Cjoint.com ou Cijoint.Fr
>
> Tu publies ici, l'adresse de la location obtenue
>
>
>
> "manubole" > Bonjour,
>
> Sur une macro qui tournait TRES BIEN sur Office 2007, avant l'installation
> de l'update Pack 2, je me retrouve avec le problème suivant:
>
> Un message d'erreur apparaît lorsque je demande l'exécution du code:
>
> With ActiveSheet.PivotTables(1).PivotFields("Date")
> .PivotItems(3).Visible = True
> .PivotItems("6-jan").Visible = True
> End With
>
> Explications: le champ "Date" est la partie 'Jour' provenant d'un champ de
> type 'date' regroupée en jour/mois/année.
>
> L'erreur intervient en ligne 2 et en ligne 3, ce n'est donc pas un problème
> de format! De plus, cette macro a été écrite en mode 'Automatique' (sauf la
> ligne 2). Je n'y comprends plus rien.
>
> Le message d'erreur est précisément:
> Sur ligne 2: "Impossible de définir la propriété Visible de la classe
> PivotItem"
> Sur ligne 3: "Impossible de lire la propriété PivotItems de la classe
> PivotField"
>
> Si vous pouviez m'aider, ça serait super!! Je compte sur vous.


manubole
Le #19286211
Merci de ta réponse,

Mais elle ne répond pas tout à fait à ma demande, dans le sens où je
souhaite non pas sélectionner qu'un seul item, mais plutôt faire une
sélection de plusieurs items. D'où l'emploi de la fonction 'visible'. Et
c'est bien cela qui ne marche pas.

Quant au format de la date, ce n'est pas l'origine du problème puisque j'ai
utilisé le n° de l'item également, et ça ne marche toujours pas....

Une idée?




"MichDenis" a écrit :

J'ai omis de te mentionner que le 3-Jan
représente un format "américain" 3 january et non janvier
d'où l'abréviation différente.

Si c'était le mois d'août, tu aurais "3-Aug"

La macro enregistre elle le format tel qu'il apparaît dans ton tableau
parce que tu as utilisé l'outil "enregistreur de macro" dans l'interface
de la feuille de calcul. Mais en VBA, c'est le format américain mois/jour/année
qui est en vigueur.



"MichDenis" Bonjour Manubole,

Tu parlais d'un champ "Page" dans ton TDC.
Voici ta macro et j'ai seulement utilisé des variables objets

'----------------------------------------------
Sub Macro2()

Dim Pt As PivotTable
Dim Pf As PivotField

With Sheets("hebdo_reseau")
Set Pt = .PivotTables(1)
End With
Set Pf = Pt.PivotFields("Jour")

'Cette ligne pour afficher toutes les données
'Pf.CurrentPage = "(All)"

Pf.CurrentPage = "3-Jan"
End Sub
'----------------------------------------------

Ta macro peut se résumer dans une ligne de code :

ActiveSheet.PivotTables(1).PivotFields("Jour").CurrentPage = "6-Jan"

Attention au format de la date en VBA





"manubole" Ah zut! J'ai zippé le fichier on va voir ce que ça donne.

http://cjoint.com/?fjcbc7eeSr



"MichDenis" a écrit :

> Il y a un problème avec le contenu de ton fichier que tu as publié.
> Essaie de l'ouvrir tu verras !
>
>
>
> "manubole" > Bonjour MichDenis,
>
> ci après le lien.
> http://cjoint.com/?fjaYTYeLJH
>
> Merci de ton aide,
>
> A bientôt
>
>
> "MichDenis" a écrit :
>
> > Bonjour Manubole,
> >
> > Est-ce possible de publier seulement une petite partie du fichier
> > relatif à ton problème (assure toi d'enlever toutes les informations
> > sensibles) en utilisant une de ces ressources :
> > Cjoint.com ou Cijoint.Fr
> >
> > Tu publies ici, l'adresse de la location obtenue
> >
> >
> >
> > "manubole" > > Bonjour,
> >
> > Sur une macro qui tournait TRES BIEN sur Office 2007, avant l'installation
> > de l'update Pack 2, je me retrouve avec le problème suivant:
> >
> > Un message d'erreur apparaît lorsque je demande l'exécution du code:
> >
> > With ActiveSheet.PivotTables(1).PivotFields("Date")
> > .PivotItems(3).Visible = True
> > .PivotItems("6-jan").Visible = True
> > End With
> >
> > Explications: le champ "Date" est la partie 'Jour' provenant d'un champ de
> > type 'date' regroupée en jour/mois/année.
> >
> > L'erreur intervient en ligne 2 et en ligne 3, ce n'est donc pas un problème
> > de format! De plus, cette macro a été écrite en mode 'Automatique' (sauf la
> > ligne 2). Je n'y comprends plus rien.
> >
> > Le message d'erreur est précisément:
> > Sur ligne 2: "Impossible de définir la propriété Visible de la classe
> > PivotItem"
> > Sur ligne 3: "Impossible de lire la propriété PivotItems de la classe
> > PivotField"
> >
> > Si vous pouviez m'aider, ça serait super!! Je compte sur vous


manubole
Le #19286901
Bluffant....

Les éléments fantômes disparus, ça remarche (j'ai essayé avec la toute
première version de la macro, et ça roule...). Pourtant, je venais juste de
recréer un tout nouveau classeur Excel. C'est quoi, exactement, les éléments
'fantômes'? Des éléments affichés en tant qu'item mais qui n'existent pas
dans le tableau source?

Merci beaucoup pour ton aide,

Et continue comme ça!

Merci encore


"MichDenis" a écrit :

2 procédures :

Tu dois avoir des éléments fantômes dans ton TDC.

Pour nettoyer ton tdc, tu colles cette macro dans un module standard
et tu exécutes une fois. Cela va faire le bouton pour tous les TDC
de toutes les feuilles de ton classeur

Cette macro fut proposee par Daniel Maher.
------------------------------------------------
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
------------------------------------------------

Dans un second temps, tu exécutes cette macro :

Comme tu veux fonctionner en utilisant leur position
dans la liste, tu dois dans la procédure le dire le select case
Teste avec Excel 2007

------------------------------------------------
Sub test()
Dim A as Long
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem

With Sheets("hebdo_reseau")
Set Pt = .PivotTables(1)
End With

Set Pf = Pt.PivotFields("Jour")
Pf.EnableMultiplePageItems = True
For Each Pi In Pf.PivotItems
a = a + 1
Select Case a
'Inscrit en dessous les numéros des items
Case 1, 5, 9
Pf.PivotItems(a).Visible = True
End Select
Next
End Sub
------------------------------------------------




"manubole" Merci de ta réponse,

Mais elle ne répond pas tout à fait à ma demande, dans le sens où je
souhaite non pas sélectionner qu'un seul item, mais plutôt faire une
sélection de plusieurs items. D'où l'emploi de la fonction 'visible'. Et
c'est bien cela qui ne marche pas.

Quant au format de la date, ce n'est pas l'origine du problème puisque j'ai
utilisé le n° de l'item également, et ça ne marche toujours pas....

Une idée?




"MichDenis" a écrit :

> J'ai omis de te mentionner que le 3-Jan
> représente un format "américain" 3 january et non janvier
> d'où l'abréviation différente.
>
> Si c'était le mois d'août, tu aurais "3-Aug"
>
> La macro enregistre elle le format tel qu'il apparaît dans ton tableau
> parce que tu as utilisé l'outil "enregistreur de macro" dans l'interface
> de la feuille de calcul. Mais en VBA, c'est le format américain mois/jour/année
> qui est en vigueur.
>
>
>
> "MichDenis" > Bonjour Manubole,
>
> Tu parlais d'un champ "Page" dans ton TDC.
> Voici ta macro et j'ai seulement utilisé des variables objets
>
> '----------------------------------------------
> Sub Macro2()
>
> Dim Pt As PivotTable
> Dim Pf As PivotField
>
> With Sheets("hebdo_reseau")
> Set Pt = .PivotTables(1)
> End With
> Set Pf = Pt.PivotFields("Jour")
>
> 'Cette ligne pour afficher toutes les données
> 'Pf.CurrentPage = "(All)"
>
> Pf.CurrentPage = "3-Jan"
> End Sub
> '----------------------------------------------
>
> Ta macro peut se résumer dans une ligne de code :
>
> ActiveSheet.PivotTables(1).PivotFields("Jour").CurrentPage = "6-Jan"
>
> Attention au format de la date en VBA
>
>
>
>
>
> "manubole" > Ah zut! J'ai zippé le fichier on va voir ce que ça donne.
>
> http://cjoint.com/?fjcbc7eeSr
>
>
>
> "MichDenis" a écrit :
>
> > Il y a un problème avec le contenu de ton fichier que tu as publié.
> > Essaie de l'ouvrir tu verras !
> >
> >
> >
> > "manubole" > > Bonjour MichDenis,
> >
> > ci après le lien.
> > http://cjoint.com/?fjaYTYeLJH
> >
> > Merci de ton aide,
> >
> > A bientôt
> >
> >
> > "MichDenis" a écrit :
> >
> > > Bonjour Manubole,
> > >
> > > Est-ce possible de publier seulement une petite partie du fichier
> > > relatif à ton problème (assure toi d'enlever toutes les informations
> > > sensibles) en utilisant une de ces ressources :
> > > Cjoint.com ou Cijoint.Fr
> > >
> > > Tu publies ici, l'adresse de la location obtenue
> > >
> > >
> > >
> > > "manubole" > > > Bonjour,
> > >
> > > Sur une macro qui tournait TRES BIEN sur Office 2007, avant l'installation
> > > de l'update Pack 2, je me retrouve avec le problème suivant:
> > >
> > > Un message d'erreur apparaît lorsque je demande l'exécution du code:
> > >
> > > With ActiveSheet.PivotTables(1).PivotFields("Date")
> > > .PivotItems(3).Visible = True
> > > .PivotItems("6-jan").Visible = True
> > > End With
> > >
> > > Explications: le champ "Date" est la partie 'Jour' provenant d'un champ de
> > > type 'date' regroupée en jour/mois/année.
> > >
> > > L'erreur intervient en ligne 2 et en ligne 3, ce n'est donc pas un problème
> > > de format! De plus, cette macro a été écrite en mode 'Automatique' (sauf la
> > > ligne 2). Je n'y comprends plus rien.
> > >
> > > Le message d'erreur est précisément:
> > > Sur ligne 2: "Impossible de définir la propriété Visible de la classe
> > > PivotItem"
> > > Sur ligne 3: "Impossible de lire la propriété PivotItems de la classe
> > > PivotField"
> > >
> > > Si vous pouviez m'aider, ça serait super!! Je compte sur vous


manubole
Le #19309601
Alors ça bloque toujours, et notamment sur les jours qui commencent par '0'
(type 09-Janv" par exemple).

J'ai mis cette macro toute simple:

'
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem

Application.ScreenUpdating = False
With Sheets("hebdo_reseau")
Set Pt = .PivotTables(1)
End With

i = 0
Set Pf = Pt.PivotFields("Jour")
Pt.ManualUpdate = False
Pf.EnableMultiplePageItems = True
For Each Pi In Pf.PivotItems
i = i + 1
If Pf.PivotItems.Count > i Then Pi.Visible = False
Next
'

J'ai une erreur à chaque fois que le jour commence par un "0"...

Je ne sais plus quoi faire, faut-il changer le format du regroupement "jour"
dans le TCD (mais alors comment faire?)??

Même si j'essaye avec une macro qui spécifie le n°, et non plus le nom, de
l'item, le résultat est le même.

Help...!







"MichDenis" a écrit :

2 procédures :

Tu dois avoir des éléments fantômes dans ton TDC.

Pour nettoyer ton tdc, tu colles cette macro dans un module standard
et tu exécutes une fois. Cela va faire le bouton pour tous les TDC
de toutes les feuilles de ton classeur

Cette macro fut proposee par Daniel Maher.
------------------------------------------------
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
------------------------------------------------

Dans un second temps, tu exécutes cette macro :

Comme tu veux fonctionner en utilisant leur position
dans la liste, tu dois dans la procédure le dire le select case
Teste avec Excel 2007

------------------------------------------------
Sub test()
Dim A as Long
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem

With Sheets("hebdo_reseau")
Set Pt = .PivotTables(1)
End With

Set Pf = Pt.PivotFields("Jour")
Pf.EnableMultiplePageItems = True
For Each Pi In Pf.PivotItems
a = a + 1
Select Case a
'Inscrit en dessous les numéros des items
Case 1, 5, 9
Pf.PivotItems(a).Visible = True
End Select
Next
End Sub
------------------------------------------------




"manubole" Merci de ta réponse,

Mais elle ne répond pas tout à fait à ma demande, dans le sens où je
souhaite non pas sélectionner qu'un seul item, mais plutôt faire une
sélection de plusieurs items. D'où l'emploi de la fonction 'visible'. Et
c'est bien cela qui ne marche pas.

Quant au format de la date, ce n'est pas l'origine du problème puisque j'ai
utilisé le n° de l'item également, et ça ne marche toujours pas....

Une idée?




"MichDenis" a écrit :

> J'ai omis de te mentionner que le 3-Jan
> représente un format "américain" 3 january et non janvier
> d'où l'abréviation différente.
>
> Si c'était le mois d'août, tu aurais "3-Aug"
>
> La macro enregistre elle le format tel qu'il apparaît dans ton tableau
> parce que tu as utilisé l'outil "enregistreur de macro" dans l'interface
> de la feuille de calcul. Mais en VBA, c'est le format américain mois/jour/année
> qui est en vigueur.
>
>
>
> "MichDenis" > Bonjour Manubole,
>
> Tu parlais d'un champ "Page" dans ton TDC.
> Voici ta macro et j'ai seulement utilisé des variables objets
>
> '----------------------------------------------
> Sub Macro2()
>
> Dim Pt As PivotTable
> Dim Pf As PivotField
>
> With Sheets("hebdo_reseau")
> Set Pt = .PivotTables(1)
> End With
> Set Pf = Pt.PivotFields("Jour")
>
> 'Cette ligne pour afficher toutes les données
> 'Pf.CurrentPage = "(All)"
>
> Pf.CurrentPage = "3-Jan"
> End Sub
> '----------------------------------------------
>
> Ta macro peut se résumer dans une ligne de code :
>
> ActiveSheet.PivotTables(1).PivotFields("Jour").CurrentPage = "6-Jan"
>
> Attention au format de la date en VBA
>
>
>
>
>
> "manubole" > Ah zut! J'ai zippé le fichier on va voir ce que ça donne.
>
> http://cjoint.com/?fjcbc7eeSr
>
>
>
> "MichDenis" a écrit :
>
> > Il y a un problème avec le contenu de ton fichier que tu as publié.
> > Essaie de l'ouvrir tu verras !
> >
> >
> >
> > "manubole" > > Bonjour MichDenis,
> >
> > ci après le lien.
> > http://cjoint.com/?fjaYTYeLJH
> >
> > Merci de ton aide,
> >
> > A bientôt
> >
> >
> > "MichDenis" a écrit :
> >
> > > Bonjour Manubole,
> > >
> > > Est-ce possible de publier seulement une petite partie du fichier
> > > relatif à ton problème (assure toi d'enlever toutes les informations
> > > sensibles) en utilisant une de ces ressources :
> > > Cjoint.com ou Cijoint.Fr
> > >
> > > Tu publies ici, l'adresse de la location obtenue
> > >
> > >
> > >
> > > "manubole" > > > Bonjour,
> > >
> > > Sur une macro qui tournait TRES BIEN sur Office 2007, avant l'installation
> > > de l'update Pack 2, je me retrouve avec le problème suivant:
> > >
> > > Un message d'erreur apparaît lorsque je demande l'exécution du code:
> > >
> > > With ActiveSheet.PivotTables(1).PivotFields("Date")
> > > .PivotItems(3).Visible = True
> > > .PivotItems("6-jan").Visible = True
> > > End With
> > >
> > > Explications: le champ "Date" est la partie 'Jour' provenant d'un champ de
> > > type 'date' regroupée en jour/mois/année.
> > >
> > > L'erreur intervient en ligne 2 et en ligne 3, ce n'est donc pas un problème
> > > de format! De plus, cette macro a été écrite en mode 'Automatique' (sauf la
> > > ligne 2). Je n'y comprends plus rien.
> > >
> > > Le message d'erreur est précisément:
> > > Sur ligne 2: "Impossible de définir la propriété Visible de la classe
> > > PivotItem"
> > > Sur ligne 3: "Impossible de lire la propriété PivotItems de la classe
> > > PivotField"
> > >
> > > Si vous pouviez m'aider, ça serait super!! Je compte sur vous


MichDenis
Le #19313101
| Alors ça bloque toujours, et notamment sur les jours qui commencent par
'0'

Avec ton explication très précise sur les manipulations que tu as faites, le
code que tu utilises et les tests que tu as faits pour résoudre ton
problème, qu'est-ce que tu veux que je te dise ?

C'est comme si j'entrais dans un atelier de mécanique automobile et que je
me contentais de dire, mon auto ne fonctionne pas, qu'a-t-elle ?
manubole
Le #19316281
Sous la pression du public, je donne plus de détails:

Sur un TCD reprenant plusiseurs champs, dont un champ 'date', j'ai groupé le
champ 'date' en jour/mois/années'.

A l'aide de marcos VBA, je souhaite rendre visible certains jours et pas
d'autres.

Suite à différents problèmes dont tu as eu la primeur, MichDenis, et que tu
as essayé de résoudre, je me suis décidé à créer un fichier et une macro
simplissimes, afin d'éliminer un maximum de paramètres qui pourraient être
sources d'erreur.

J'ai donc créé un nouveau fichier, en n'y mettant que mes données source et
un TCD, dont la date est groupée, en jour/mois/années.

La macro ne fait qu'essayer de décocher l'ensemble des items du champ
'jour', sauf le dernier item.

Je la remets:
'
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem

Application.ScreenUpdating = False
With Sheets(1)
Set Pt = .PivotTables(1)
End With

i = 0
Set Pf = Pt.PivotFields("Jour")
Pt.ManualUpdate = False
Pf.EnableMultiplePageItems = True
For Each Pi In Pf.PivotItems
i = i + 1
If Pf.PivotItems.Count > i Then Pi.Visible = False
Next
'

Les items du champ jour sont sous la forme "jj-mmm" (en américain sous VBA).
Le problème intervient sur la ligne "If Pf.PivotItems.Count > i Then
Pi.Visible = False", seulement lorsque l'item est un jour inférieur à 10
("09-xxx", "08-xxx", jusqu'à "01-xxx"). Chose que je ne m'explique pas.

J'ajoute que ces dates 'blocantes' existent bel et bien dans les données
source du TCD.

Voilà, je pense avoir tout dit. Merci de votre aide!







"manubole" a écrit :

Alors ça bloque toujours, et notamment sur les jours qui commencent par '0'
(type 09-Janv" par exemple).

J'ai mis cette macro toute simple:

'
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem

Application.ScreenUpdating = False
With Sheets("hebdo_reseau")
Set Pt = .PivotTables(1)
End With

i = 0
Set Pf = Pt.PivotFields("Jour")
Pt.ManualUpdate = False
Pf.EnableMultiplePageItems = True
For Each Pi In Pf.PivotItems
i = i + 1
If Pf.PivotItems.Count > i Then Pi.Visible = False
Next
'

J'ai une erreur à chaque fois que le jour commence par un "0"...

Je ne sais plus quoi faire, faut-il changer le format du regroupement "jour"
dans le TCD (mais alors comment faire?)??

Même si j'essaye avec une macro qui spécifie le n°, et non plus le nom, de
l'item, le résultat est le même.

Help...!







"MichDenis" a écrit :

> 2 procédures :
>
> Tu dois avoir des éléments fantômes dans ton TDC.
>
> Pour nettoyer ton tdc, tu colles cette macro dans un module standard
> et tu exécutes une fois. Cela va faire le bouton pour tous les TDC
> de toutes les feuilles de ton classeur
>
> Cette macro fut proposee par Daniel Maher.
> ------------------------------------------------
> 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
> ------------------------------------------------
>
> Dans un second temps, tu exécutes cette macro :
>
> Comme tu veux fonctionner en utilisant leur position
> dans la liste, tu dois dans la procédure le dire le select case
> Teste avec Excel 2007
>
> ------------------------------------------------
> Sub test()
> Dim A as Long
> Dim Pt As PivotTable
> Dim Pf As PivotField
> Dim Pi As PivotItem
>
> With Sheets("hebdo_reseau")
> Set Pt = .PivotTables(1)
> End With
>
> Set Pf = Pt.PivotFields("Jour")
> Pf.EnableMultiplePageItems = True
> For Each Pi In Pf.PivotItems
> a = a + 1
> Select Case a
> 'Inscrit en dessous les numéros des items
> Case 1, 5, 9
> Pf.PivotItems(a).Visible = True
> End Select
> Next
> End Sub
> ------------------------------------------------
>
>
>
>
> "manubole" > Merci de ta réponse,
>
> Mais elle ne répond pas tout à fait à ma demande, dans le sens où je
> souhaite non pas sélectionner qu'un seul item, mais plutôt faire une
> sélection de plusieurs items. D'où l'emploi de la fonction 'visible'. Et
> c'est bien cela qui ne marche pas.
>
> Quant au format de la date, ce n'est pas l'origine du problème puisque j'ai
> utilisé le n° de l'item également, et ça ne marche toujours pas....
>
> Une idée?
>
>
>
>
> "MichDenis" a écrit :
>
> > J'ai omis de te mentionner que le 3-Jan
> > représente un format "américain" 3 january et non janvier
> > d'où l'abréviation différente.
> >
> > Si c'était le mois d'août, tu aurais "3-Aug"
> >
> > La macro enregistre elle le format tel qu'il apparaît dans ton tableau
> > parce que tu as utilisé l'outil "enregistreur de macro" dans l'interface
> > de la feuille de calcul. Mais en VBA, c'est le format américain mois/jour/année
> > qui est en vigueur.
> >
> >
> >
> > "MichDenis" > > Bonjour Manubole,
> >
> > Tu parlais d'un champ "Page" dans ton TDC.
> > Voici ta macro et j'ai seulement utilisé des variables objets
> >
> > '----------------------------------------------
> > Sub Macro2()
> >
> > Dim Pt As PivotTable
> > Dim Pf As PivotField
> >
> > With Sheets("hebdo_reseau")
> > Set Pt = .PivotTables(1)
> > End With
> > Set Pf = Pt.PivotFields("Jour")
> >
> > 'Cette ligne pour afficher toutes les données
> > 'Pf.CurrentPage = "(All)"
> >
> > Pf.CurrentPage = "3-Jan"
> > End Sub
> > '----------------------------------------------
> >
> > Ta macro peut se résumer dans une ligne de code :
> >
> > ActiveSheet.PivotTables(1).PivotFields("Jour").CurrentPage = "6-Jan"
> >
> > Attention au format de la date en VBA
> >
> >
> >
> >
> >
> > "manubole" > > Ah zut! J'ai zippé le fichier on va voir ce que ça donne.
> >
> > http://cjoint.com/?fjcbc7eeSr
> >
> >
> >
> > "MichDenis" a écrit :
> >
> > > Il y a un problème avec le contenu de ton fichier que tu as publié.
> > > Essaie de l'ouvrir tu verras !
> > >
> > >
> > >
> > > "manubole" > > > Bonjour MichDenis,
> > >
> > > ci après le lien.
> > > http://cjoint.com/?fjaYTYeLJH
> > >
> > > Merci de ton aide,
> > >
> > > A bientôt
> > >
> > >
> > > "MichDenis" a écrit :
> > >
> > > > Bonjour Manubole,
> > > >
> > > > Est-ce possible de publier seulement une petite partie du fichier
> > > > relatif à ton problème (assure toi d'enlever toutes les informations
> > > > sensibles) en utilisant une de ces ressources :
> > > > Cjoint.com ou Cijoint.Fr
> > > >
> > > > Tu publies ici, l'adresse de la location obtenue
> > > >
> > > >
> > > >
> > > > "manubole" > > > > Bonjour,
> > > >
> > > > Sur une macro qui tournait TRES BIEN sur Office 2007, avant l'installation
> > > > de l'update Pack 2, je me retrouve avec le problème suivant:
> > > >
> > > > Un message d'erreur apparaît lorsque je demande l'exécution du code:
> > > >
> > > > With ActiveSheet.PivotTables(1).PivotFields("Date")
> > > > .PivotItems(3).Visible = True
> > > > .PivotItems("6-jan").Visible = True
> > > > End With
> > > >
> > > > Explications: le champ "Date" est la partie 'Jour' provenant d'un champ de
> > > > type 'date' regroupée en jour/mois/année.
> > > >
> > > > L'erreur intervient en ligne 2 et en ligne 3, ce n'est donc pas un problème
> > > > de format! De plus, cette macro a été écrite en mode 'Automatique' (sauf la
> > > > ligne 2). Je n'y comprends plus rien.
> > > >
> > > > Le message d'erreur est précisément:
> > > > Sur ligne 2: "Impossible de définir la propriété Visible de la classe
> > > > PivotItem"
> > > > Sur ligne 3: "Impossible de lire la propriété PivotItems de la classe
> > > > PivotField"
> > > >
> > > > Si vous pouviez m'aider, ça serait super!! Je compte sur vous


Publicité
Poster une réponse
Anonyme