IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Lister filtres visibles de TCD avec VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Par défaut Lister filtres visibles de TCD avec VBA
    Bonjour,

    Je viens chercher de l'aide pour surmonter un problème qui consiste à lister les critères de filtrage cochés d'un tableau croisé dynamique.

    J'utilise le code suivant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
        Sub lister_filtres_tcd_1()
            Dim pvtTable As PivotTable
            Dim pvtItem As PivotItem
            Dim nwSheet As Worksheet
     
            Set nwSheet = Worksheets.Add
            nwSheet.Activate
     
            Worksheets("tcd").Select
     
            Set pvtTable = Worksheets("tcd").PivotTables("tcd1")
     
            rw = 0
            For Each pvtItem In pvtTable.PivotFields("NOM_FORMATEUR").PivotItems
                If pvtItem.Visible = True Then
                    rw = rw + 1
                    nwSheet.Cells(rw, 1).Value = pvtItem.Name
                End If
            Next pvtItem
        End Sub
    Mais il ne passe jamais dans la condition si plusieurs items sont sélectionnés dans le filtre (en revanche il y passe quand un seul item est sélectionné).

    J'ai aussi essayé avec le code suivant mais je n'obtiens que la valeur "All" en cas de sélection multiple. Quand un seul item est sélectionné ça fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
        Sub lister_filtres_tcd_2()
            Dim pvtTable As PivotTable
            Dim pvtItem As PivotItem
            Dim pvtField As PivotField
            Dim nwSheet As Worksheet
     
            Set nwSheet = Worksheets.Add
            nwSheet.Activate
     
            Worksheets("tcd").Select
     
            Set pvtTable = Worksheets("tcd").PivotTables("tcd1")
     
            For i = 1 To pvtTable.VisibleFields.Count
                Set pvtField = pvtTable.VisibleFields(i)
                With pvtField
                   If pvtField.Orientation = xlPageField Then
                       For j = 1 To pvtField.VisibleItems.Count
                           Set pvtItem = pvtField.VisibleItems(j)
                           nwSheet.Cells(j, 1).Value = pvtItem.Name
                       Next j
                   End If
                End With
            Next i
        End Sub
    Pouvez-vous me dire où je me trompe svp ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Olive17 Voir le message
    Mais il ne passe jamais dans la condition si plusieurs items sont sélectionnés dans le filtre (en revanche il y passe quand un seul item est sélectionné).
    Bonjour,

    Votre premier code fonctionne chez moi aussi bien en champ page qu'en champ ligne. A quel moment intervient votre code ? Est-il inclus dans une autre procédure ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     Sub ListerLesItemsFormateursSelectionnes()
     
    Dim PvtTable As PivotTable
    Dim PvtItem As PivotItem
    Dim NwSheet As Worksheet
    Dim Rw As Long
     
            Set NwSheet = Worksheets.Add
            Set PvtTable = Worksheets("tcd").PivotTables("tcd1")
            'PvtTable.PivotCache.Refresh
     
            Rw = 0
            For Each PvtItem In PvtTable.PivotFields("NOM_FORMATEUR").PivotItems
                If PvtItem.Visible = True Then
                    Rw = Rw + 1
                    NwSheet.Cells(Rw, 1) = PvtItem.Name
                End If
            Next PvtItem
     
            Set PvtTable = Nothing
            Set NwSheet = Nothing
     
     End Sub
    Le fichier sur lequel j'ai appliqué le code Pièce jointe 226541

    Cordialement.

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    une variante de ton code initial
    ici, on affiche chaque item visible du champs NOM_FORMATEUR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
    Dim i as Long
        With Worksheets("tcd").PivotTables("tcd1").PivotFields("NOM_FORMATEUR")
            For i = 1 To .PivotItems.Count
                If .PivotItems(i).Visible Then MsgBox .PivotItems(i)
            Next i
        End With
    End Sub

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Par défaut
    Bonjour,
    et merci pour vos réponses.

    Je ne parviens malheureusement pas à télécharger votre fichier Eric.

    Pour répondre à votre question je joins mon propre fichier auquel j'aimerais bien que vous jetiez un coup d'oeil.

    Vous verrez que mes codes ne fonctionnent que si la sélection n'est pas multiple dans le filtre du rapport de tcd.

    Joe, j'ai intégré ton code dans le fichier mais, de la même façon, il ne renvoit aucune valeur car la condition (visible) n'est jamais satisfaite en cas de sélection multiple. Peux-tu me dire ce que tu en penses ?

    Je ne sais plus comment m'y prendre...
    Fichiers attachés Fichiers attachés

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Je n'ai aucun souci avec une selection multiple de mon côté

    plutôt que de fournir ton fichier complet, montre-nous simplement un fichier SANS MACRO (.xslx dans l'idéal) avec le TCD uniquement afin de reproduire ton comportement.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Olive17 Voir le message
    Je ne parviens malheureusement pas à télécharger votre fichier Eric.
    Je n'arrive pas non plus à charger votre fichier bien que zipé. Sans doute un problème côté Développez.net.

    Cordialement.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Par défaut
    En effet, je ne parviens même pas à télécharger le fichier que j'ai déposé.

    Je tente malgré tout de déposer un nouveau fichier, sans macro celui-ci.

    Cdlt
    Fichiers attachés Fichiers attachés

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Olive17 Voir le message
    Je tente malgré tout de déposer un nouveau fichier, sans macro celui-ci.
    Toujours impossible à charger.

    Cordialement.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Olive17 Voir le message
    J'ai réussi à récupérer le dernier fichier. Effectivement, le code ne fonctionne pas sur ce fichier.

    J'ai donc copié les données sur un nouveau classeur .xlsm par un copier-coller et reconstitué le Tcd. Là, le code fonctionne.

    Je n'ai pas réussi à voir ce qui ne fonctionnait pas dans l'onglet Data.

    Cordialement.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Je n'ai pas réussi à voir ce qui ne fonctionnait pas dans l'onglet Data.
    J'ai réussi à sortir la liste avec ce mode opératoire :

    - Actualiser le TCD.
    - Dans Options du TCD et l'onglet Totaux et Filtres, décocher Autoriser plusieurs filtres par champ.
    - Dans la liste des champs du Tcd, supprimer le champ page Nom_Formateur.
    - Sauvegarder le TCD.
    - Remettre Nom_Formateur en champ page (éventuellement actualiser?).

    Le programme devrait fonctionner.


    Pièce jointe 226576

    Cordialement.

  11. #11
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    directement fonctionnel sur le fichier fourni, j'ai ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub t()
    Dim Element As PivotItem, Resultat As String
    Resultat = "Elements sélectionnés : " & vbCrLf & vbCrLf
        With Worksheets("tcd").PivotTables("tcd1")
            .PivotCache.Refresh
            With .PivotFields("NOM_FORMATEUR")
                If .EnableMultiplePageItems = False Then MsgBox "Multisélection désactivée = champs complet": Exit Sub
     
                For Each Element In .PivotItems
                    If Element.Visible Then Resultat = Resultat & "- " & Element.Name & vbCrLf
                Next Element
            End With
        End With
    MsgBox Resultat
    End Sub

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour Joe,

    Tu as obtenu la liste des formateurs sélectionnés sans rien modifier ?

    Cordialement.

  13. #13
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    apparemment presque oui, étant donné que c'est un champs de "filtrage" et pas un champs ligne/colonne, le fait d'avoir ajouté l'actualisation du cache et d'extraire le cas où on est pas en sélection multiple permet de mettre à jour l'état du .Visible ... qui était à False pour tous les éléments, même les visibles.

    là où je viens de me souvenir d'une chose, c'est que (habitude inexplicable) j'avais au préalable tout sélectionné puis décoché certaines valeurs. Et là en retestant, je constate que c'est, mine de rien, LE truc qui semble avoir restauré les bonnes valeurs au .Visible des éléments

    du coup, il suffirait de mettre dans l'évènement activate de la feuille une ligne de code qui afficherait tout les éléments quand on arrive devant le TCD (quitte à mettre une seconde ligne de code pour décocher ce qu'on ne voulait pas)

Discussions similaires

  1. [XL-2007] Filtre imposé sur TCD par VBA
    Par meolimo dans le forum Excel
    Réponses: 0
    Dernier message: 23/02/2014, 20h05
  2. [XL-2010] Automatiser un filtre d'un TCD en VBA via une liste
    Par Safety147 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 29/03/2012, 00h31
  3. [XL-2003] filtrer un TCD avec VBA
    Par David1259 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/02/2011, 19h12
  4. ajouter et supprimer des données dans un tcd avec vba
    Par pscoool dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/12/2009, 18h14
  5. Enlever le filtre d'une feuille avec VBA
    Par ghosty04 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/02/2009, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo