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 :

TCD - Modifier la position d'un Item [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Par défaut TCD - Modifier la position d'un Item
    Bonjour,

    J'ai un classeur contenant plusieurs feuilles avec des TCD.
    Tous les TCD se nomment "Indicateur X.XX".

    Je voudrais pouvoir boucler sur toutes les feuilles contenant un TCD, vérifier si le TCD contient un champs de ligne nommé "collège" par exemple et dans ce cas là, mettre l'item "Exécution" s'il apparaît en position 1.

    J'étais parti sur quelque chose comme ci-dessous, mais bien évidemment, ça ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim Pvt As PivotTable
    Dim Sh As Worksheet ' Définit la variable Sh comme étant une feuille de calcul
     
    Set Pvt = ActiveSheet.PivotTables(1)
     
    For Each Sh In ThisWorkbook.Worksheets ' Boucle sur toutes les feuilles du classeur
        With Pvt
        If Pvt.PivotFields = "collège" Then Pvt.PivotFields("Collège").PivotItems("Exécution").Position = 1
        End With
    Next Sh
     
    End Sub
    Ou plus simplement, existe-t-il un moyen d'obliger l'item à garder une position définie par l'utilisateur lors de l'actualisation ?
    J'ai beau avoir coché "Conserver la mise en forme" dans les options du TCD, l'item fait son rebelle à l'actualisation.

    Auriez-vous une idée ?

    Merci d'avance,
    Chtik

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    Bonjour,

    Ton code fonctionne si tu actualises le TCD.

    Ou plus simplement, existe-t-il un moyen d'obliger l'item à garder une position définie par l'utilisateur lors de l'actualisation ?
    Le positionnement ne change pas à l’actualisation (Excel 2013 au moins).

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour moi, il y a déjà un problème de logique dans l'algorithme.
    Tu définis le tableau croisé dynamique dans la feuille active (en ligne 5 de ta procédure) et ensuite tu parcoures les feuilles à la recherche d'un champs du tableau croisé dynamique présent dans cette feuille.
    sans avoir testé ta ligne de code, la syntaxe serait
    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
    Sub test()
      Dim Pvt As PivotTable
      Dim Sh As Worksheet ' Définit la variable Sh comme étant une feuille de calcul
     
      ' Set Pvt = ActiveSheet.PivotTables(1) - A enlever
     
      For Each Sh In ThisWorkbook.Worksheets ' Boucle sur toutes les feuilles du classeur
        For Each Pvt In Sh.PivotTables
          With Pvt
            Debug.Print Pvt.Name
            ' Ligne du dessous à vérifier 
            ' If .PivotFields = "collège" Then .PivotFields("Collège").PivotItems("Exécution").Position = 1
          End With
        Next Pvt
      Next Sh
    End Sub
    [EDIT]
    Voilà une procédure qui cherche le champs 'Collège' dans tous les TCD de toutes les feuilles
    Il te reste à placer ton code ligne 10
    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
    Sub test()
      Dim Pvt As PivotTable, pvtFld As PivotField
      Dim Sh As Worksheet ' Définit la variable Sh comme étant une feuille de calcul
      For Each Sh In ThisWorkbook.Worksheets ' Boucle sur toutes les feuilles du classeur
        For Each Pvt In Sh.PivotTables
          With Pvt
            For Each pvtFld In .PivotFields
             ' Test sur variable objet pvtFld
             If pvtFld = "Collège" Then
               MsgBox "Trouvé"
             End If
            Next pvtFld
          End With
        Next Pvt
      Next Sh
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre confirmé
    Homme Profil pro
    Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Par défaut
    Daniel.C, lorsque je remplace, par exemple, les données d'une entitée A par celles d'une entité B dans mon tableau me servant de source de données et que j'actualise les TCD, la position de l'item se trouve modifiée.

    Mon code générait une erreur 438 sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Pvt.PivotFields = "collège"
    C'est là que la réponse que m'a apportée Philippe Tulliez, m'a aidé à comprendre mon erreur.
    La proposition de Philippe me convient parfaitement.

    Merci à vous deux pour votre réponse rapide.
    Chtik

  5. #5
    Expert éminent

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

    Comme Daniel.C je confirme que l'actualisation ne joue pas sur le tri sauf si justement il y a un tri automatique déjà inscrit dans les paramètres du champ.

    Si la source ne change pas mais juste son contenu cela n'a pas d'incidence mais si tu changes la source, cela régénère un cube et nombre de paramètres sont perdus.

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

Discussions similaires

  1. Modifier la position des items d'un popup menu
    Par popo dans le forum Débuter
    Réponses: 3
    Dernier message: 13/05/2011, 15h16
  2. Réponses: 12
    Dernier message: 18/05/2007, 19h19
  3. Réponses: 2
    Dernier message: 06/02/2006, 23h15
  4. Modifier la position d'un popupMenu
    Par petitcoucou31 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/11/2005, 17h23
  5. Modifier la position d'un champs formulaire
    Par gg14bis dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/09/2005, 08h57

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