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

Excel Discussion :

Filtre Tableau Croisé Dynamique [XL-2007]


Sujet :

Excel

  1. #1
    Membre averti
    Homme Profil pro
    Divers
    Inscrit en
    Août 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Août 2014
    Messages : 54
    Par défaut Filtre Tableau Croisé Dynamique
    Bonjour à tous!

    Je viens vers vous car le membre d'un autre forum (non spécialisé en développement) m'a conseillé de venir ici pour résoudre un problème que j'ai sur Excel.
    Avant toute chose, je préfère vous prévenir que je ne m'y connais pas en développement et utilisation de VBA, ce qui explique pourquoi je viens vous demander directement votre aide sans pouvoir proposer une ébauche de réflexion.
    Pour être plus clair et simplifier les choses, je vous met en pièce jointe le fichier simplifié qui me pose problème. Pluvio.xlsx

    Dans une feuille j'ai 2 tableaux croisés dynamiques. Le premier indique la pluviométrie par mois (colonne) et par jour (ligne). J'ai mis en place un filtre par campagne pluviométrique (cellule B1) ce qui permettra aux utilisateurs de choisir la période qui les intéresse.
    Dans le 2ème tableau, j'ai mis toute la pluviométrie depuis que nous avons des données avec en ligne le mois et en colonne la campagne pluvio, ce qui me permet de calculer une moyenne inter-annuelle des cumuls mensuels (ligne 37). J'aimerai donc que ce 2ème tableau se base sur la campagne choisie dans le 1er tableau pour m'afficher les données suitées entre la campagne choisie dans le 1er tableau et le début de mes données.
    Je pensais donc utiliser le filtre de ma cellule B42 en mettant un filtre inférieur ou égal à ma cellule B1. Sauf que malheureusement, quand je tape B1, il ne comprend pas que je fais référence à une cellule.

    J'espère que je suis suffisamment clair.

    Visiblement seule une programmation pourrait m'aider, mais je n'y connais rien. Est ce que quelqu'un pourrait m'aider? Sinon je préciserai aux utilisateurs du fichier de bien penser à modifier la campagne du TCD1 ET d'utiliser le filtre du TCD2.

    Merci d'avance.

    Cordialement,

    Boboxien

  2. #2
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Bonjour,

    Je n'ai pas ouvert ta PJ.
    C'est inspiré d'un autre post (http://www.developpez.net/forums/d10...plusieurs-tcd/)

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Sub OneForAll()
    Dim PT_MAIN As PivotTable
    Dim PT As PivotTable
    Dim PFN(), PF As Integer, P, I
     
    'table de référence
    Set PT_MAIN = ActiveSheet.PivotTables("Tableau croisé dynamique1")
    I = 1
     
    'recuperer les noms de filtres inactifs
    For PF = 1 To PT_MAIN.PivotFields("Région").PivotItems.Count
        If Not PT_MAIN.PivotFields("Région").PivotItems(PF).Visible Then
            ReDim Preserve PFN(1 To I)
            PFN(I) = PT_MAIN.PivotFields("Région").PivotItems(PF).Name
            I = I + 1
        End If
    Next PF
     
    'les appliquer sur les autres tables pivot
    For Each PT In ActiveSheet.PivotTables
        'sauf si c'est la table pivot de référence
        If Not PT.Name = PT_MAIN.Name Then
     
    'activer tous les filtres
    With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Région")
        For Each monPivIt In .PivotItems
            monPivIt.Visible = True
        Next
    End With
    'Pour sélectionner celui que l'on veut
            With PT
                PT.PivotFields("Région").EnableMultiplePageItems = True
                For PF = 1 To UBound(PFN)
                    PT.PivotFields("Région").PivotItems(PFN(PF)).Visible = False
                Next PF
            End With
        End If
    Next PT
     
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Divers
    Inscrit en
    Août 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Août 2014
    Messages : 54
    Par défaut
    Bonjour et merci de bien vouloir m'aider.

    Alors malheureusement comme je l'ai dit, je ne connais rien en langage VB.
    Donc je ne sais pas si j'ai fait la bonne manip pour intégrer votre code puisque ça ne semble pas fonctionner.
    j'ai ouvert VB avec Alt+F11, je me suis mis sur la feuille où se situent mes tableaux et j'ai copier votre code.
    j'ai remplacé "Tableau croisé dynamique1" par le nom de mon tableau: "TCD1" et idem "Tableau croisé dynamique2" par "TCD2" (mais faut-il que je garde les guillemets?)

    Et je suppose que "Région" doit être remplacer par le nom de ma cellule: B1.

    ça me donne donc:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Sub OneForAll()
    Dim PT_MAIN As PivotTable
    Dim PT As PivotTable
    Dim PFN(), PF As Integer, P, I
     
    'table de référence
    Set PT_MAIN = ActiveSheet.PivotTables("TCD1")
    I = 1
     
    'recuperer les noms de filtres inactifs
    For PF = 1 To PT_MAIN.PivotFields("B1").PivotItems.Count
        If Not PT_MAIN.PivotFields("B1").PivotItems(PF).Visible Then
            ReDim Preserve PFN(1 To I)
            PFN(I) = PT_MAIN.PivotFields("B1").PivotItems(PF).Name
            I = I + 1
        End If
    Next PF
     
    'les appliquer sur les autres tables pivot
    For Each PT In ActiveSheet.PivotTables
        'sauf si c'est la table pivot de référence
        If Not PT.Name = PT_MAIN.Name Then
     
    'activer tous les filtres
    With ActiveSheet.PivotTables("TCD2").PivotFields("B1")
        For Each monPivIt In .PivotItems
            monPivIt.Visible = True
        Next
    End With
    'Pour sélectionner celui que l'on veut
            With PT
                PT.PivotFields("B1").EnableMultiplePageItems = True
                For PF = 1 To UBound(PFN)
                    PT.PivotFields("B1").PivotItems(PFN(PF)).Visible = False
                Next PF
            End With
        End If
    Next PT
     
    End Sub
    Je sauvegarde et ferme VB, mais quand je sélectionne mon filtre de mon TCD1, rien ne semble se produire.
    Je dois donc rater ou mal taper quelque chose mais je ne sais pas quoi...

  4. #4
    Membre averti
    Homme Profil pro
    Divers
    Inscrit en
    Août 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Août 2014
    Messages : 54
    Par défaut
    En parcourant un peu le forum, je constate que vous êtes nombreux à ne pas ouvrir les pièces jointes et je comprends pourquoi.
    Donc plutôt que de mettre une pièce jointe, je vais mettre une capture d'écran, ça vous permettra de voir de quoi je parle sans risquer de chopper un virus.
    Nom : Pluvio.JPG
Affichages : 216
Taille : 349,1 Ko
    J'espère que ça sera plus clair pour vous avec cette image. Le 1er tableau part de la ligne 1 à la ligne 36. Les lignes 37 et 38 étant des lignes de calcul. Le 2ème tableau part de la ligne 42 à la ligne 56 (que vous ne voyez pas).
    Dans l'exemple ci-dessus, j'aimerai donc que sur la ligne 43 ne soient affichées que les données allant de 2009/2010 (date de début de la collecte de données) à 2011/2012 (cellule B1 servant de filtre pour mon 1er tableau)
    J'espère que maintenant c'est un peu plus clair.

    Cordialement,

    Boboxien

  5. #5
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Bonjour,

    J'ai modifié le code

    Le 1er tcd a comme nom "...6" et le 2e "...1". C'est ok. Pour les filtres, j'ai utilisé (au lieu de région, mon exemple) 'campagne pluvio'.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Sub OneForAll()
    Dim PT_MAIN As PivotTable
    Dim PT As PivotTable
    Dim PFN(), PF As Integer, P, I
     
    'table de référence
    Set PT_MAIN = ActiveSheet.PivotTables("Tableau croisé dynamique6")
    I = 1
     
    'recuperer les noms de filtres inactifs
    For PF = 1 To PT_MAIN.PivotFields("campagne pluvio").PivotItems.Count
        If Not PT_MAIN.PivotFields("campagne pluvio").PivotItems(PF).Visible Then
            ReDim Preserve PFN(1 To I)
            PFN(I) = PT_MAIN.PivotFields("campagne pluvio").PivotItems(PF).Name
            I = I + 1
        End If
    Next PF
     
    'les appliquer sur les autres tables pivot
    For Each PT In ActiveSheet.PivotTables
        'sauf si c'est la table pivot de référence
        If Not PT.Name = PT_MAIN.Name Then
     
    'activer tous les filtres
     ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Campagne pluvio"). _
            ClearAllFilters
    'Pour sélectionner celui que l'on veut
            With PT
                PT.PivotFields("campagne pluvio").EnableMultiplePageItems = True
                For PF = 1 To UBound(PFN)
                    PT.PivotFields("campagne pluvio").PivotItems(PFN(PF)).Visible = False
                Next PF
            End With
        End If
    Next PT
     
    End Sub

  6. #6
    Membre averti
    Homme Profil pro
    Divers
    Inscrit en
    Août 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Août 2014
    Messages : 54
    Par défaut
    Bonjour,

    j'ai repris ton code et puis j'ai enregistré mon fichier en xlsm. Enfin, je suis allé modifier ma case B1. Rien ne s'est passé jusqu'à ce que je me dise qu'il fallait peut être que j'aille exécuter la macro... Quand je vous disais que j'étais pas un grand utilisateur des macros!
    (dans l'idéal, ça serait bien que dès que la campagne est modifiée dans mon 1er tableau, la macro s'exécute automatiquement. Avec mes utilisateurs, moins il y aura de manipulations, moins il y aura de risque d'erreur puisque je suis presque certain qu'il y en a qui ne modifieront que la campagne!)

    Bref, en dehors de cette parenthèse, quand j'exécute la macro, le filtre du 2ème tableau se modifie bien, mais malheureusement, il n'affiche que la campagne pluvio sélectionnée dans le 1er tableau et les données "vides". J'aurai voulu qu'il affiche la campagne pluvio et les campagnes précédentes pour ensuite pouvoir en sortir une moyenne.

    Cordialement,

    Boboxien

  7. #7
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Un essai avec lancement via bouton
    Fichiers attachés Fichiers attachés

  8. #8
    Membre averti
    Homme Profil pro
    Divers
    Inscrit en
    Août 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Août 2014
    Messages : 54
    Par défaut
    Génial pour le bouton! Merci beaucoup!
    Par contre, je n'ai toujours pas les données du début jusqu'à la campagne désirée...

  9. #9
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    ce sera pour la semaine prochaine ... bon we

  10. #10
    Membre averti
    Homme Profil pro
    Divers
    Inscrit en
    Août 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Août 2014
    Messages : 54
    Par défaut
    Bonjour
    Citation Envoyé par QuestVba Voir le message
    ce sera pour la semaine prochaine ... bon we
    Pas de souci! il n'y a pas d'urgence et c'est déjà très sympa de prendre du temps de vous occuper de ça pour moi.

  11. #11
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Bonjour, Boboxien,

    Chose promise, chose due. Tu as la PJ et 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub OneForAll()
    Dim PT_MAIN As PivotTable
    Dim PT As PivotTable
    Dim PFN(), PF As Integer, p, I
     
    'table de référence
    Set PT_MAIN = ActiveSheet.PivotTables("Tableau croisé dynamique6")
    I = 1
     
    'recuperer les noms de filtres inactifs
    For PF = 1 To PT_MAIN.PivotFields("campagne pluvio").PivotItems.Count
        If PT_MAIN.PivotFields("campagne pluvio").PivotItems(PF).Visible Then
            FiltreTCD6 = PT_MAIN.PivotFields("campagne pluvio").PivotItems(PF).Name
        End If
    Next PF
     
    'activer tous les filtres
     ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Campagne pluvio"). _
            ClearAllFilters
     
    'Cacher les filtres supérieurs à la sélection du TCD6
     
    Dim trouve As Boolean
     
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("campagne pluvio")
           For I = 1 To .PivotItems.Count
               trouve = False
                 If Left(ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("campagne pluvio").PivotItems(I), 4) > Left(FiltreTCD6, 4) Then trouve = True
                 If trouve = True Then .PivotItems(I).Visible = False
            Next
         End With
     
    End Sub
    Fichiers attachés Fichiers attachés

  12. #12
    Membre averti
    Homme Profil pro
    Divers
    Inscrit en
    Août 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Août 2014
    Messages : 54
    Par défaut
    Bonjour QuestVBA,

    c'est exactement ça!! je vous remercie beaucoup pour votre patience et le temps que vous m'avez accordé!!

    Cordialement,

    Boboxien

  13. #13
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Avec plaisir.

    Ne pas oublier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD19] Filtre tableau croisé dynamique
    Par mimi1255 dans le forum WinDev
    Réponses: 0
    Dernier message: 23/09/2014, 18h14
  2. [Toutes versions] Problème condition pour filtre tableau croisé dynamique VBA
    Par Mikamac dans le forum Excel
    Réponses: 0
    Dernier message: 07/09/2014, 18h23
  3. [XL-2010] Filtre Tableau Croisé Dynamique
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/04/2013, 14h59
  4. Mise a jour filtre tableau croisé dynamique en VBA
    Par excelstef dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/12/2012, 17h43
  5. Filtre Tableau croisé dynamique
    Par adrien.gendre dans le forum Excel
    Réponses: 1
    Dernier message: 29/07/2007, 14h06

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