Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Déployer les "petites croix d'un TCD"

erics83

XLDnaute Impliqué
Bonjour,

j'imagine que c'est très simple, mais.....je cherche depuis 2 heures sans trouver de solutions...

J'ai un dossier, dans ce dossier des fichiers. Certains fichiers ont des TCD, d'autres non. Ceux qui ont des TCD sont parfois "développés" d'autres non....ce que j'appelle "petites croix ou "non développés", c'est : ., les nom des TCD, des PivotField ou Pivotitems changent naturellement, donc je cherche quelque chose d'"universel"...

Je cherche donc à : si le fichier contient un TCD, il faudrait le développer :

j'ai essayé une boucle :
VB:
Sub Ericboucle()
For Each p In ActiveSheet.PivotTables
        For Each q In p.PivotFields
                For Each r In q.PivotItems
                    On Error Resume Next
                    r.ShowDetail = True
                Next
        Next
Next p
End Sub
mais quand le TCD n'existe pas et/ou qu'il n'a que 2 lignes de champs , cela ne fonctionne pas...et la boucle est assez longue....
J'ai essayé
Code:
Sub EffacerFiltres()

Dim MyTCD As PivotTable
Set MyTCD = Sheets("Tableau croisé dynamique2").PivotTables(1)
MyTCD.ClearAllFilters
Set MyTCD = Nothing
End Sub
mais cela enlève le filtre et ne "déploie" pas la "petite croix"....j'ai essayé plusieurs instructions après MyTCD, mais aucune ne m'a déployé les petites croix...ou alors, j'ai oublié une instruction.....

Merci pour votre aide,
Eric
 

Pièces jointes

  • Test TCD.xlsx
    569.6 KB · Affichages: 8

Dan

XLDnaute Barbatruc
Bonjour

Pourquoi faire un code pour cela ?
Il vous suffit de cliquer dans le TCD puis click droite et choisir "Option du Tableau croisé..."
Sous l'onglet Affichage, décocher la case "afficher les boutons développer/Réduire

Cordialement
 

erics83

XLDnaute Impliqué
Bonjour Dan,
J'ai essayé, cela enlève juste la croix, je cherche à développer les lignes....et comme je le disais, les classeurs ont différents formats...mais si cela fonctionnait (Affichage, décocher case), ça aurait une bonne solution dans mon cas : j'aurai utilisé l'enregistreur de macro pour voir l'instruction et je l'aurais mise en début de ma boucle que ouvre les classeurs....mais là, votre proposition ne "déploie" pas les champs....

Merci pour votre aide,
 
Dernière édition:

erics83

XLDnaute Impliqué
Merci Cousinhub,

Effectivement, c'est simple et cela fonctionne très bien (merci aussi à Dan et à toi, car je ne connaissais pas cette possibilité), mais.....lorsque j'utilise l'enregistreur de macro, j'ai :
VB:
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("REG").PivotItems("1").DrillTo "Canton"
et comme je le disais dans mon post, les noms et structures des TCD des fichiers sont différents pour (presque) chaque fichiers....j'arrive à récupérer le nom du TCD
Code:
For Each p In ActiveSheet.PivotTables
        a = p.Name
Next
, mais je ne sais pas comment récupérer le nom des Pivotfields et Pivotitems, et surtout comment récupérer le "dernier" champ...(ici ="Canton")....

Merci pour votre aide,
Eric
 

Dan

XLDnaute Barbatruc
Re
Comme ceci dans votre fichier
VB:
Sub Macro1()
Dim pt As PivotField
For Each pt In ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields
    On Error Resume Next
    pt.ShowDetail = True
Next pt
End Sub
ou ceci si vous avez plusieurs TCD concernés
Code:
Sub Macro1()
Dim pt As PivotField

With ActiveSheet
    For Each pt In .PivotTables(.PivotTables.Count).PivotFields
        On Error Resume Next
        pt.ShowDetail = True
    Next pt
End With
End Sub
Mais comme précisé avant, je ne vois pas l'intérêt d'utiliser VBA vu que la fonctionnalité est de base dans excel et qu'il vous suffit de faire un clic dans la TCD.
Pour moi c'est mieux qu'un bouton...
Crdlt
 
Dernière édition:

erics83

XLDnaute Impliqué
Merci Dan,
Comme je le disais, je suis obligé de passer par VBA car j'ai 150 fichiers à ouvrir pour récupérer des données, dont certaines sont dans des TCD, donc j'essaie de voir comment toutes les récupérer et donc j'ai besoin d'utiliser le
Diff:
Drillto
.....mais il faut pour cela que je connaisse les champs du TCD....

Merci pour votre aide
 

erics83

XLDnaute Impliqué
Bonjour Dan,
J'ai dû avoir un problème de rafraichissement car je n'avais que "re" dans votre post...d'où ma réponse...

Je viens d'essayer votre code, il fonctionne parfaitement !!! MERCI

Comme dit, j'ai une boucle sur 150 fichiers, d'où la nécessité de passer via VBA...

En tout cas, merci pour votre aide, c'est exactement ce que je cherchais !
Merci,
Eric,
 

Dan

XLDnaute Barbatruc
- Dans mon post précédent, vous pouvez plutôt remplacer le .pivottables.count par le chiffre 1, si vous avez 1 seul TCD sur une même feuille
- Si vous avez plusieurs TCD sur une même feuille, comme dans votre fichier posté d'ailleurs, vous pouvez utilisez ce code-ci
VB:
Sub Macro1()
Dim pt As PivotField
Dim i As Byte

With ActiveSheet
    For i = 1 To .PivotTables.Count
        For Each pt In .PivotTables(i).PivotFields
            On Error Resume Next
            pt.ShowDetail = True
        Next pt
    Next i
End With
End Sub
Evitez la boucle i si vous n'avez qu'un seul TCD
Crdlt
 
Dernière édition:

erics83

XLDnaute Impliqué
Merci Dan,

effectivement j'ai plusieurs TCD parfois dans une feuille, donc ce code est très utile !! et pour éviter une boucle inutile, j'ai mis
VB:
if Activesheet.PivotTables.Count >1 then
'et là votre boucle i'

Merci,
Eric
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…