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 :

Boucle sur les valeurs de champs de page d un tcd [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Boucle sur les valeurs de champs de page d un tcd
    Bonjour à tous,

    Je n'ai pas trouvé de quoi répondre à mon problème sur le forum. Je m'excuse par avance si je me suis trompé dans ma recherche.

    Mon objectif est de réaliser une boucle sur des valeurs de champs de page (plus de 80 différentes) afin de récupérer les données du TCD dans un autre fichier. Fichier contenant 1 feuille par valeur différente de ce champ de page.

    Ce que j'arrive à obtenir :
    1ere possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For i = 1 To 8
        ActiveSheet.PivotTables("TCD_PHARMATREND").PivotFields("Région"). _
            ClearAllFilters
        ActiveSheet.PivotTables("TCD_PHARMATREND").PivotFields("Région").CurrentPage = _
            i
    ...
    next i
    Cela fonctionne bien si mes régions ont comme valeur 1 à 8.
    Cependant, dans d'autres cas, j'ai parfois des régions qui peuvent valoir 1;2;5;8

    J'ai donc un message d'erreur lorsque la variable i est égale à une valeur inexistante. 1ere possibilité ==> gestion des erreurs mais je n'y arrive pas.

    2eme possibilité :

    J'arrive, sur le même problème, à obtenir les valeurs existantes dans un msgbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To ActiveSheet.PivotTables("TCD_PHARMATREND").PivotFields("région").PivotItems.Count
    MsgBox ActiveSheet.PivotTables("TCD_PHARMATREND").PivotFields("région").PivotItems(i).Name
    Next i
    Mais je n'arrive pas à utiliser ces pivotitems.name dans ma boucle ce qui résoudrait mon problème d'erreur.

    En vous remerciant par avance.

    Christophe

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    La macro suivante affiche les pivotitems visibles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test1()
        With Sheets("Feuil1").PivotTables("TCD_PHARMATREND").PivotFields("région")
            For i = 1 To .PivotItems.Count
                If .PivotItems(i).Visible Then
                    MsgBox .PivotItems(i).Name
                End If
            Next i
        End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Bonjour Daniel,

    Merci pour ton code qui va me servir à un autre moment.

    J'ai fini par trouver une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For i = 1 To ActiveSheet.PivotTables("MonTCD").PivotFields("région").PivotItems.Count
            ActiveSheet.PivotTables("MonTCD").PivotFields("région").CurrentPage = _
            ActiveSheet.PivotTables("MonTCD").PivotFields("région").PivotItems(i).Name
     
            nom_feuille = ActiveSheet.PivotTables("TCD_PHARMATREND").PivotFields("région").PivotItems(i).Name
     
    ...
    Next i
    J'ai rajouté une variable qui renommera ma feuille par la valeur du champ de page.

    Petite question subsidiaire, je vais devoir filtrer sur 12 mois mobile, sachant que le mois de départ est variable (exemple : si je saisis la date 201210, je veux la période 201210 à 201111). Je sais faire sur un mois, mais sur plusieurs qui sont variables ....

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Quelle est ta version d'Excel ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    2007 pourquoi ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    2007 pourquoi ?
    Bonjour,

    Parce que le traitement des TCD n'est pas tout à fait le même depuis la version 2007. Dans le classeur mis en PJ, la date sous la forme aaaamm est en I1. Les dates, en champ de,ligne sont regroupées par mois et années. La macro "test" filtre les dates :

    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 DateDeb As String, DateFin As String
        DateDeb = DateSerial(Left([I1], 4) - 1, Right([I1], 2) + 1, 1)
        DateFin = DateSerial(Left([I1], 4), Right([I1], 2) + 1, 0)
        With ActiveSheet.PivotTables(1).PivotFields("Date")
            For i = 1 To .PivotFilters.Count
                .PivotFilters(i).Delete
            Next
            .PivotFilters.Add Type:=xlDateBetween, Value1:=DateDeb, Value2:= _
            DateFin
        End With
    End Sub
    Fichiers attachés Fichiers attachés
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Ok pigé

    Très malin de filtrer sur la date avec le critère "Entre".

    Cependant cela m'oblige à l'utiliser en champ de ligne ou colonne et non champ de page, mais je me met cela de coté car je sais où je vais en avoir besoin.

    Merci à toi

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Avec le champ "Date" en champ de page (les dates dissociées) :

    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
    Sub test()
        Dim DateDeb As String, DateFin As String, Pi As PivotItem
        DateDeb = Format(DateSerial(Left([I1], 4) - 1, Right([I1], 2) + 1, 1), "yyyy/mm/dd")
        DateFin = Format(DateSerial(Left([I1], 4), Right([I1], 2) + 1, 0), "yyyy/mm/dd")
        With ActiveSheet.PivotTables(1).PivotFields("Date")
            .ClearAllFilters
            For Each Pi In .PivotItems
                Var = Split(Pi.Name, "/")(2) & "/" & Format(Split(Pi.Name, "/")(0), "00") & "/" & _
                    Format(Split(Pi.Name, "/")(1), "00")
                If Var > DateFin Or Var < DateDeb Then
                    Pi.Visible = False
                Else
                    var1 = 1
                End If
            Next Pi
        End With
    End Sub
    mais dans ce cas, tu ne peux plus filtrer par mois.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    J'ai une dernière question Daniel,

    Peux tu tester la valeur (Tous) d'un champ de page et faire en sorte qu'un nom de feuille se nomme "FRANCE" si c'est le cas ?

    Merci

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Excuse-moi, j'ai du mal à comprendre le sens de ta question (il commence à se faire tard ). Peux-tu détailler davantage ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Oublis cela fonctionne .... je ne sais pas ce que j'ai bien pu faire pour que cela ne marche pas ...



    Un champ de page sans filtre actif a pour valeur affichée (Tous)

    cf copie d'écran

    J'aimerais tester le fait que si il n'y a rien de sélectionné, alors la feuille se nommera FRANCE. un test sur la valeur (tous) ne fonctionne pas.
    Images attachées Images attachées  

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    A condition que les champs ne soient pas des champs "date" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Dim Teste As Boolean, Pi As PivotItem
        With ActiveSheet.PivotTables(1)
            For Each Pi In .PivotFields("UREG").PivotItems
                If Pi.Visible = False Then Teste = True
            Next Pi
            For Each Pi In .PivotFields("USEC").PivotItems
                If Pi.Visible = False Then Teste = True
            Next Pi
            If Teste = False Then ActiveSheet.Name = "FRANCE"
        End With
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    J avais trouvé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        If Num_reg = "(Tous)" And Num_sect = "(Tous)" Then
            ActiveSheet.Name = "FRANCE"
        ElseIf Num_reg <> "(Tous)" Then
            ActiveSheet.Name = Num_reg
        Else: ActiveSheet.Name = Num_sect
        End If

  14. #14
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    "Num_reg", ça représente quoi ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  15. #15
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Num_Reg represente la valeur en B1

    et Num_sect en B2

  16. #16
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Tellement simple...

    Bonnes fêtes.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

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

Discussions similaires

  1. [AC-2003] Boucle sur les enregistrements du champ clé primaire
    Par Maude_84 dans le forum VBA Access
    Réponses: 21
    Dernier message: 04/11/2013, 15h30
  2. récupérer les valeurs des champs d'une autre page
    Par owenho dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/02/2013, 00h47
  3. Réponses: 2
    Dernier message: 12/08/2012, 18h43
  4. Trier une Map sur les valeurs de façon décroissante
    Par ddams dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 27/12/2011, 18h33
  5. boucle sur les champs dynamiques
    Par Anduriel dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/06/2006, 19h49

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