Discussion: VBA et PivotTable

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    novembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : novembre 2017
    Messages : 4
    Points : 1
    Points
    1

    Par défaut VBA et PivotTable

    Bonjour,

    Je butte depuis plusieurs heures sur un problème:
    J'ai plusieurs TCD qui comportent un champs commun "Date du TP", c'est comme ça qu'il apparaît dans la liste des champs disponibles.
    Je veux piloter ce champs à l'aide de 2 combobox: les valeurs du champs doivent être comprises entre les 2 valeurs des combobox.

    J'ai essayé le code ci-dessous mais il ne trouve pas d'Item.
    J'ai remplacé - Pt.PivotFields("[Plage].[Date du TP].[Date du TP]") - par ça - Pt.PivotFields("Date du TP") - mais ça me donne une erreur 1004.

    Je vous remercie par avance.

    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
        Dim DateDebut1 As String
        Dim DateFin1 As String
        Dim Pt As PivotTable
        Dim Sh As Worksheet
        Dim PlageDate As Object, Cel As Range
     
        DateDebut1 = ComboDateDebut.Value
        DateFin1 = ComboDateFin.Value
        Dim PvtItem As PivotItem
     
        For Each Sh In Worksheets
            For Each Pt In Sh.PivotTables
     
                With Pt.PivotFields("[Plage].[Date du TP].[Date du TP]")
                    For Each PvtItem In .PivotItems
                        If Not (IsNull(PvtItem.Value) Or IsEmpty(PvtItem.Value) Or IsMissing(PvtItem.Value) Or _
                            (Trim(PvtItem.Value) = "") Or (Trim(PvtItem.Value) = "(blank)")) Then
                            If (Format(CDate(PvtItem.Value), "yyyy/mm/dd") <= Format(DateFin1, "yyyy/mm/dd")) And (Format(CDate(PvtItem.Value), "yyyy/mm/dd") <= Format(DateDebut1, "yyyy/mm/dd")) Then
                                PvtItem.Visible = True
                            Else
                                PvtItem.Visible = False
                            End If
                        Else
                            PvtItem.Visible = False
                        End If
                    Next
                End With
            Next
     
        Next
    End Sub

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    novembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : novembre 2017
    Messages : 4
    Points : 1
    Points
    1

    Par défaut Mon problème avance

    Bon ben j'avance tout doucement.

    Je me suis aperçu que ceci fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    test = "2017-11-12T00:00:00"
    With Worksheets("TCD").PivotTables(1).PivotFields("[Plage].[Date du TP].[Date du TP]")
                    .ClearAllFilters
                    .CurrentPageName = "[Plage].[Date du TP].&[" & test & "]"
    End With
    Donc ça veut dire qu'il accepte ce format: "2017-11-12T00:00:00"

    J'ai fait une boucle qui permet d'enregistrer dans l'objet "PlageDate" plusieurs dates dont le format est identique au précédent.
    Le problème maintenant est de renvoyer ses dates dans le TCD. J'ai écrit ça mais ça ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each Sh In Worksheets
                   For Each Pt In Sh.PivotTables
                       With Pt.PivotFields("[Plage].[Date du TP].[Date du TP]")
                            .ClearAllFilters
                            .CurrentPageName = "[Plage].[Date du TP].&[" & PlageDate & "]"
                       End With
                    Next Pt
    Next Sh
    Je pense que le problème vient du fait que je veux envoyer plusieurs valeurs pour une seule page courante.

    Qu'en pensez vous ? Pourriez vous m'aider ?

  3. #3
    Expert éminent

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

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

    Informations forums :
    Inscription : février 2010
    Messages : 4 618
    Points : 8 432
    Points
    8 432

    Par défaut

    Bonjour

    Current page suppose un champ de page mono choix.

    En champ de page les filtres chronologiques, plus adaptés à ton problème de période avec un début et une fin, ne sont pas disponibles.

    Il serait plus simple à mon avis d'utiliser une chronologie, connectée à tes TCD, et la piloter, si nécessaire, par VBA.
    Chris

    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é...

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    novembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : novembre 2017
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Bonjour,
    Merci pour ta réponse.

    Je veux bien essayer, mais je ne vois pas ce que tu veux dire par "chronologie".

    Je pensais à quelque chose dans ce genre:

    - pour chaque valeur qui se trouve dans "Dateplage"
    - rendre la valeur de l'item égal à la valeur visible
    - valeur suivante

    Mais j'ai du mal à l'écrire en VBA.
    Pourriez vous m'aider ?

  5. #5
    Expert éminent

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

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

    Informations forums :
    Inscription : février 2010
    Messages : 4 618
    Points : 8 432
    Points
    8 432

    Par défaut

    Bonjour

    Les chronologies sont des segments spécifiques pour les champs dates des TCD (existent depuis la version 2013)

    J'ai du déjà donner un exemple de codage dans un fil ici.

    Je vais voir si je le retrouve.
    Chris

    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é...

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    novembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : novembre 2017
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Bonjour,

    J'ai finalement abandonné cette méthode, trop compliquée et aléatoire.

    J'ai choisi cette méthode qui fonctionne: en fonction de mes valeurs sélectionnées dans mes combobox, elles affectent un "0" ou un "1" dans une nouvelle colonne. Puis je trie mon TCD avec les "1".

    Merci tout de même pour votre aide.

    Cordialement.

Discussions similaires

  1. VBA PivotTables -> CalculatedItems
    Par Gabriel_K dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 10/05/2016, 11h18
  2. [XL-2007] Créer une liste en VBA à partir d'une pivottable
    Par yzf-r dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 06/02/2011, 21h29
  3. newbie vba pivottable
    Par maxtin dans le forum Général VBA
    Réponses: 1
    Dernier message: 01/12/2006, 01h02
  4. [VBA-E]extraire des datas de PivotTable
    Par stephv dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/11/2006, 14h24
  5. problème avec VBA
    Par Delph dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2002, 14h15

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