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 :

Filtre et réduction TCD


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 10
    Par défaut Filtre et réduction TCD
    Bonjour à tous,

    Je crée actuellement un tableau de bord pour suivre différentes activités et je voudrais savoir s'il est possible de réduire/développer un champs depuis un onglet graph.

    Je m'explique : Sur mon onglet Graph ( de type charts), j'ai un graphique dynamique comprenant plusieurs agents, avec comme étiquettes de lignes ces agents, l'année et le mois.
    Pour plus de lecture visuelle, j'ai une procédure qui réduit tous les champs afin de ne voir apparaitre que les agents (pas les mois et année), de cette manière le graphique n'est pas illisible d'entrée, et l'utilisateur peut visualiser l'activité globale de chaque agent.

    J'aimerais que lorsque je sélectionne un ou plusieurs agents via le ShowPivotChartActiveFields, les champs se développe automatiquement sans avoir besoin d'aller les dérouler dans l'onglet contenant les TCD.
    J'ai essayé d'utiliser le déclenchement de macro à la modification de cellule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Not Application.Intersect(Target, Range("B7")) Is Nothing Then
    Dim ws As Worksheet
    Dim pt As PivotTable
    Dim pf As PivotField
     
        For Each ws In ActiveWorkbook.Worksheets
            For Each pt In ws.PivotTables
                    pt.PivotFields("Chargé de travaux").ShowDetail = True
            Next pt
        Next ws
     
     End If
    End Sub
    ce qui fonctionne assez bien mais uniquement pour le premier agent sélectionner, les sélections suivantes subissent le développement.

    Si vous avez des idées, je joint un exemple concret pour illustrer.

    Merci d'avance !!
    Fichiers attachés Fichiers attachés

  2. #2
    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,

    si j'ai bien compris, tu voudrais déplier ou replier des champs de ton TCD, depuis le graphique croisés dynamique issu de la même source ?

    quand je génère un TCD, j'en exporte un graphique croisé et j'insère des segments (slicers).
    dès que je modifie la valeur d'un segment, ça déplie/replie mes champs dans le TCD et ça modifie aussi l'affichage du graphique


    je ne suis pas un pro avec ces objets là (à mon grand regret), mais c'est peut être une piste pour toi ?

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 10
    Par défaut
    C'est exactement ça ! Par contre, je ne connait absolument pas cette technique de slicers mais ça va aller très vite puisqu'ils n'existent pas sur Excel 2007 ^^

    Si quelqu'un a une autre idée avec éventuellement l'utilisation de worksheet_change ou un truc du genre ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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 Test()
    If FiltrePivotTables(ActiveSheet.PivotTables("TDC"), "NameFiltre", Array("toto", "titi")) = False Then MsgBox "Pas trouvé"
    End Sub
     
     
    Public Function FiltrePivotTables(TDC, Champ As String, V) As Boolean
    On Error Resume Next
    Dim I As Integer
    FiltrePivotTables = True
    TDC.PivotFields(Champ).ClearAllFilters
    For I = 1 To TDC.PivotFields(Champ).PivotItems.Count
    Debug.Print TDC.PivotFields(Champ).PivotItems(I).Name
        For f = 0 To UBound(V)
            If Trim("" & TDC.PivotFields(Champ).PivotItems(I).Name) <> Trim("" & V(f)) Then
                TDC.PivotFields(Champ).PivotItems(I).Visible = False
                If Err Then FiltrePivotTables = False: Exit Function
            Else
                TDC.PivotFields(Champ).PivotItems(I).Visible = True
                Exit For
            End If
        Next
    Next
     On Error GoTo 0
    End Function

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 10
    Par défaut
    Merci rdurupt je test ça !

    Par contre, à quoi correspond V, un des paramètres de ta fonction ?

    So j'ai bien compris, c'est un array des différentes valeurs possibles de mon étiquettes de lignes, mais le problème est que j'ai une cinquantaine d'agents, dois-je tous les écrire ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    v est le tableau des valeur à filtrer.

    si tu as une centaine d'agents, j'imagine que tu les connais via un ongle Agents?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Test()
    Dim Agents()
    Dim I As Long, IdxAgent As Long
    Dim RangeAgents As Range
    Set RangeAgents = ActiveWorkbook.Sheets("Agents").UsedRange
    For I = 2 To RangeAgents.Rows.Count
        ReDim Preserve Agents(IdxAgent)
        Agents(IdxAgent) = RangeAgents(I, 3) ' I la ligne , 3 la colonne
        IdxAgent = IdxAgent + 1
    Next
    If FiltrePivotTables(ActiveSheet.PivotTables("TDC"), "NameFiltre", Agents) = False Then MsgBox "Pas trouvé"
    End Sub
    Dernière modification par AlainTech ; 20/06/2015 à 12h40. Motif: Suppression de la citation inutile

Discussions similaires

  1. [XL-2010] Ajouter un filtre dans un TCD
    Par Live83 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 06/01/2012, 14h40
  2. [XL-2007] filtre sur un TCD
    Par dodo69 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/07/2011, 11h24
  3. filtre variable sur TCD
    Par FloFlosu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/02/2011, 22h08
  4. Un filtre pour plusieurs TCD - C'est possible ?
    Par taisherg dans le forum Excel
    Réponses: 11
    Dernier message: 16/10/2007, 14h55
  5. filtre dans un TCD
    Par k-eisti dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/07/2007, 21h43

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