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 :

VBA filtre dans un tableau croisé dynamique [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Stagiaire contrôle de gestion
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire contrôle de gestion

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut VBA filtre dans un tableau croisé dynamique
    Bonjour,

    Ayant un problème avec une macro VBA, je me permets de demander votre aide!

    Je voudrais pouvoir imposer un filtre "date" en retenant les 4 dernières périodes lors d'une mise à jour du TCD.

    Donc dans l'onglet période, l'utilisateur renseigne la date de l'importation des données. Ma formule à coté retient les 4 dernières périodes en tant que période 1, période2, période 3, période 4.

    En cliquant sur mise à jour ma macro se lance pour retenir que les 4 dernières période dans le TCD.

    Le TCD est issu des données de l'onglet détail facture.

    Ci joint ma macro: Dans celle-là je n'arrive pas à imposer les périodes. Je pense n'ai pas très bien compris le rôle de
    .PivotItems(i.Value).Visible = False. (avec Excel 2010)

    Je joindrais le fichier filtre_TCD par la suite. (J’ai un problème de par feux)

    D'avance merci de votre aide et de votre temps. !!!

    Cordialement,

    Code vb : 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
    41
    42
    Sub miseajour()
     
    Dim periode1, periode2, periode3, periode4 As Date
    Dim PvI As Object
     
     
        Sheets("23 - Période").Activate
        periode1 = Cells(6, 4).Value
        periode2 = Cells(7, 4).Value
        periode3 = Cells(8, 4).Value
        periode4 = Cells(9, 4).Value
     
     
        Sheets("19 - RAFF Qté Zone").Select
        Sheets("19 - RAFF Qté Zone").Activate
     
     
    'Set Field = Sheet.PivotTables("14 - Graph Détail RAFF Qté Zone").PivotFields("[Date Observation].[Calendrier].[Annee]").VisibleItemsList = Array("")
    'Sheet.PivotTables("14 - Graph Détail RAFF Qté Zone").PivotFields("[Date Observation].[Calendrier].[Mois]").VisibleItemsList = Array("", "[Date Observation].[Calendrier].[Mois].&[" & rng2 & "]", "[Date Observation].[Calendrier].[Mois].&[" & Rng & "]", "[Date Observation].[Calendrier].[Mois].&[" & rng3 & "]")
     
        Application.ScreenUpdating = False
        ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotSelect "Mois[All]", _
            xlLabelOnly + xlFirstRow, True
     
        With ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Mois")
                For Each PvI In .PivotItems
                    Select Case PvI.Name
                        Case Is <> periode1 'Pour tout qui est différent de la période 1,
                        'Il ne m'affichera pas la date
                        PvI.Visible = False 'Il me donne une erreur??? or je ne comprends pas???
                        Case Is <> periode2
                        PvI.Visible = False
                        Case Is <> periode3
                        PvI.Visible = False
                        Case Is <> periode4
                        PvI.Visible = False
                    End Select
                Next
        End With
            Sheets("21 - Détails Factures").Select
            MsgBox ("Ok")
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Le tableau doit toujours avoir au moins un item sélectionné.
    Peut-être que tu devrais tous les activer avant de passer les lignes de code qui les décoche (?)
    MPi²

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Stagiaire contrôle de gestion
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire contrôle de gestion

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Je prend note! mais pour l’instant cela ne change pas! J'ai toujours une erreur. Le format date complique peut être le problème. (cf macro pour tous les sélectionner)

    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 activertousitems()
     
    Dim i As Integer 'j'ai aussi tester avec Date même erreur.
     
        Sheets("19 - RAFF Qté Zone").Select
        Sheets("19 - RAFF Qté Zone").Activate
     
        nb = ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Mois").PivotItems.Count
        For i = 1 To nb - 1
        With ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Mois")
            .PivotItems(i).Visible = False
        End With
        Next
     
    End Sub
    Je joins le fichier cette fois-ci! http://www.partage-facile.com/N9RT82..._tcd.xlsm.html
    D'avance merci! !

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 421
    Points : 16 265
    Points
    16 265
    Par défaut
    Bonjour


    Il y a une bug sur les dates dans les TCD (et sur les vides).

    Un contournement ici http://www.excel-formations.fr/Trucs_astuces/TCD08.php
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Stagiaire contrôle de gestion
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire contrôle de gestion

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour cette astuce, mais je suis un peu perdu!!!

    Sur ce site, il parle rajouter une fonction ou un bout de code pour tester le champ mois mais je ne sais pas à quelle endroit je dois l’appeler cette fonction ou rajouter ce code. !

    D'avance Merci!

    Liens vers mon fichier filtreTCD:
    http://www.partage-facile.com/N9RT82..._tcd.xlsm.html
    http://cjoint.com/14av/DDfuTBX1cDH.htm

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 421
    Points : 16 265
    Points
    16 265
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub miseajour()
     
    Dim periode1, _
        periode2, _
        periode3, _
        periode4
    Dim PvI As PivotItem
     
     
        Sheets("23 - Période").Activate
        periode1 = Cells(6, 4).Value
        periode2 = Cells(7, 4).Value
        periode3 = Cells(8, 4).Value
        periode4 = Cells(9, 4).Value
     
     
        Sheets("19 - RAFF Qté Zone").Select
        Sheets("19 - RAFF Qté Zone").Activate
     
     
    'Set Field = Sheet.PivotTables("14 - Graph Détail RAFF Qté Zone").PivotFields("[Date Observation].[Calendrier].[Annee]").VisibleItemsList = Array("")
    'Sheet.PivotTables("14 - Graph Détail RAFF Qté Zone").PivotFields("[Date Observation].[Calendrier].[Mois]").VisibleItemsList = Array("", "[Date Observation].[Calendrier].[Mois].&[" & rng2 & "]", "[Date Observation].[Calendrier].[Mois].&[" & Rng & "]", "[Date Observation].[Calendrier].[Mois].&[" & rng3 & "]")
     
        Application.ScreenUpdating = False
     
        With ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Mois")
                For Each PvI In .PivotItems
                If PvI.Name <> periode1 And PvI.Name <> periode2 And PvI.Name <> periode3 And PvI.Name <> periode4 Then
                    Valini = PvI.Name
                    PvI.Name = Format(PvI.Name, "m/d/yyyy")
                    PvI.Visible = False
                    PvI.Name = Valini
                End If
                Next
        End With
            Sheets("21 - Détails Factures").Select
            MsgBox ("Ok")
    End Sub
     
    Sub activertousitems()
     
    Dim i As Integer
     
        Sheets("19 - RAFF Qté Zone").Select
        Sheets("19 - RAFF Qté Zone").Activate
     
       ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Mois").ClearAllFilters
     
    End Sub
    Edit :
    il serait plus simple de réaliser cela sans macro avec un segment sur Mois
    On peut aussi automatiser les 4 dernières périodes par une colonne supplémentaires.
    Mettre la source sous forme de tableau est une bien meilleure solution que de traiter 1 millions de lignes dans le TCD
    Voir ci-joint les 2 solutions
    Fichiers attachés Fichiers attachés
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Stagiaire contrôle de gestion
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire contrôle de gestion

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    de ton aide!
    Je viens de comprendre le fonctionnement de cette astuce. Et la macro fonctionne très bien! ! Par contre comment faire pour éviter d'avoir des erreurs #Ref et Vide?

    Edit:
    J'avais pas vu la deuxième solution.

    Effectivement, c'est beaucoup plus simple avec la fonction "GRANDE VALEUR" je n'y avais pas du tout pensée merci de cette astuce! Cela évite ce problème de date et les erreurs de vide ou de #REF!
    Mon problème est donc résolu!




  8. #8
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 421
    Points : 16 265
    Points
    16 265
    Par défaut
    RE

    Les problèmes de #REF et vides viennent de la source : le filtre les masque mais je te conseille VIVEMENT de nettoyer les lignes sous les données qui contiennent des erreurs et de mettre la source sous forme de tableau.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Stagiaire contrôle de gestion
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire contrôle de gestion

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci! je prends note!

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

Discussions similaires

  1. Filtre dans un tableau croisé dynamique
    Par cabaye123 dans le forum Excel
    Réponses: 5
    Dernier message: 07/07/2014, 20h52
  2. [XL-2007] Utilisation d'une fonction VBA dans un tableau croisé dynamique?
    Par Keketo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/01/2011, 10h36
  3. VBA Excel :séparation dans un tableau croisé dynamique
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/11/2006, 08h52
  4. Réponses: 4
    Dernier message: 27/11/2006, 23h20
  5. [VBA-Excel] Faire un filtre dans un tableau croisé dynamique
    Par SFrane dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/11/2006, 15h05

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