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 :

Macro de selection plage de dates - PivotTable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut Macro de selection plage de dates - PivotTable
    Bonjour,

    Je souhaiterais sélectionner via une macro une plage de dates dans un des filtres de mon TCD.
    J'ai rédigé le code suivant mais cela ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        With ActiveSheet.PivotTables("PivotTable29").PivotFields("Reporting Date")
            For Each pi In .PivotItems
     
                    If CDate(pi.Value) > CDate("01/01/2017") And CDate(pi.Value) < CDate("01/03/2017") Then
                    pi.Visible = True
                    End If
     
                    If CDate(pi.Value) < CDate("01/01/2017") And CDate(pi.Value) > CDate("01/03/2017") Then
                    pi.Visible = False
                    End If
     
            Next pi
     
        End With
    A noter, il semble, qu'il y ait aussi un problème au niveau du format. En effet dans le TCD mes dates sont stockées sous forme "dd/mm/yyyy" et lorsque j'utilise l'enregistreur de macro les dates sont sous forme "mm/dd/yyyy".


    Merci beaucoup de votre aide,

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Bonjour,
    mais cela ne marche pas
    Peux-tu être plus précis ? As-tu un message d'erreur? Le code tourne-t-il, mais ne fait pas ce que tu veux? Que fait-il?

    Néanmoins,
    Essaie de remplacer CDate("01/01/2017") par DateSerial(2017, 1, 1).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CDate(pi.Value) < CDate("01/01/2017") And CDate(pi.Value) > CDate("01/03/2017") Then
    Cette condition veut dire : si pi est inférieure à 01/01/2017 et supérieur à 01/03/2017, alors ... Ou encore, si pi est avant janvier et après le 1er mars, alors... Ce qui n'arrive jamais
    Est-ce que tu ne veux pas plutôt dire : si la première condition est fausse, alors on rend l'item invisible? A ce moment-là, utilise Else. VOici la syntaxe de la condition If :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If condition Then
        action
    Else
       action
    End If

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 573
    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 573
    Par défaut
    Bonjour

    En complément pour filtrer on commence par tout afficher et ensuite on masque ligne par ligne ce qui n'est pas dans la cible.

    Il serait bien de préciser ta version Excel car les TCD évoluent beaucoup d'une version à l'autre

    Il existe aussi des filtre chrono de type entre date1 et date2 plus rapide que les boucles.

    Il serait de préciser aussi si le champ du TCD est en ligne, colonne ou page (filtre) car cela ne se code pas pareil.

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut
    Bonjour,

    Effectivement la seconde condition n'est pas bonne, j'aurai du mettre un or

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        With ActiveSheet.PivotTables("PivotTable29").PivotFields("Reporting Date")
        .ClearAllFilters
            For Each pi In .PivotItems
     
                    'test_date = pi.Value
                    'MsgBox test_date
                    If CDate(pi.Value) < DateSerial(2017, 1, 1) Or CDate(pi.Value) > DateSerial(2017, 3, 1) Then
                    pi.Visible = False
                    End If
     
            Next pi
     
        End With
    En mettant ce code, c'est mieux, je n'ai plus d'erreur d'exécution mais j'ai des plage de date "04/01/2017"=> "12/01/2017" qui ne sont pas cochées et du "13/01/01" au "02/02/2017" les dates sont cochées...

  5. #5
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Essaie pi.Value2 au lieu de CDate(pi.Value).
    Attention aussi à être sûr qu'au moins 1 champ est visible, sinon tu auras une erreur.

  6. #6
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut
    Merci Riaolle. Ca y est voici la solution:

    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
    With ActiveSheet.PivotTables("PivotTable29").PivotFields("Reporting Date")
     
        .ClearAllFilters
        .EnableMultiplePageItems = True
        .NumberFormat = "dd/mm/yyyy"
     
            For Each pi In .PivotItems
     
            If CDate(pi) < CDate("01/01/2017") Or CDate(pi) > CDate("01/03/2017") Then
            pi.Visible = False
            End If
     
            Next pi
     
    End With

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

Discussions similaires

  1. [XL-2010] Macro VBA sélectionner plage entre deux dates
    Par arochab dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/09/2016, 15h13
  2. Selection de plage de date
    Par titibou dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/07/2012, 09h38
  3. [XL-2007] Modification macro pour selection d'une plage de données
    Par bedoch dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/03/2010, 07h34
  4. Sélection d'une plage de dates par macro très lente
    Par yvesduc dans le forum QlikView
    Réponses: 1
    Dernier message: 11/03/2010, 15h48
  5. Sélection d'une plage de dates
    Par Bouanda dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/10/2004, 20h27

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