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 :

Tableau Croisé Dynamique: prendre des titres en paramètres [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 45
    Points
    45
    Par défaut Tableau Croisé Dynamique: prendre des titres en paramètres
    Bonjour,

    Je souhaite réaliser un tableau Croisé Dynamique à partir d'un tableau source, auquel le nom "DATA" est attribué, dont le nombre de colonnes peut varier selon les cas. J'utilise donc une boucle pour parcourir ces colonnes.

    En ligne du tableau croisé, il y a déjà un champ (3ème colonne de DATA, insérée par une précédente macro en tant que ligne tableau croisé).

    L'étape suivante (sans succès) consisterait à mettre en colonnes du tableau croisé (sous forme de sommes), les colonnes du tableau DATA (cf. tableau qui a servi à construire ce dernier), la boucle doit aller de la 4ème à la dernière colonne de DATA.

    J'ai donc une boucle qui parcourt toutes les colonnes, à chaque itération, j'enregistre sous le nom de "titre_champ" le titre de la colonne dans DATA, et je veux utiliser ce paramètre (chaine de caractères) pour choisir le champ à insérer dans le tableau croisé (ça, ça marche) ET aussi pour que ce soit donc le titre de cette colonne dans le TCD (c'est là que ça ne marche pas).

    Voici la partie du code concernée (la boucle a été mise en commentaire pour l'instant):
    (la feuille ou il y a le tableau croisé s'appelle "TCD", et letableau croisé dynamique lui même s'appelle "TCD" aussi).

    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
    Sub Remplir_col_TCD()
    Dim titre_Champ As String
     
    (...)
     
    'BOUCLE POUR COMPLETER CHAQUE CHAMP DE DATA DANS LE TCD
     
         Sheets("TCD").Select
     
    'For 
         Indice_Champ = 4 'To NbColData
    'ENREGISTREMENT DE TITRE_CHAMP (en utilisant la cellule A1)
        Sheets("feuil1").Select
        Range("A1").Value = "=Index(Data, 1," & Indice_Champ & ")"
        titre_Champ = Range("A1").Value
     
    'METTRE COLONNE DANS LE TABLEAU CROISE
        Sheets("TCD").Select
     
        ActiveSheet.PivotTables("TCD").AddDataField ActiveSheet.PivotTables("TCD"). _
            PivotFields(titre_Champ), titre_Champ, xlSum
    'Next Indice_Champ
     
     
    End Sub
    L'erreur renvoyée est:
    "erreur d'execution 1004:
    Erreur définie par l'application ou par l'objet"

    Les lignes surlignées par le débogage sont celles là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ActiveSheet.PivotTables("TCD").AddDataField ActiveSheet.PivotTables("TCD"). _
            PivotFields(titre_Champ), titre_Champ, xlSum
    Il y 2 fois "titre_champ" dans ces lignes, mais si je remplace le deuxième par n'importe quoi entre guillemets, ça marche, c'est donc le deuxième qui pose problème:
    ex de code qui marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ActiveSheet.PivotTables("TCD").AddDataField ActiveSheet.PivotTables("TCD"). _
            PivotFields(titre_Champ), "test", xlSum
    mais avec cet exemple, dans la boucle, toutes les colonnes du tableau croisé auraient alors le nom ("test") donc ça ne va pas.

    Avez-vous une idée de solution?

    Merci d'avance pour votre aide

  2. #2
    Membre habitué Avatar de LouiMz
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 104
    Points : 154
    Points
    154
    Par défaut
    Bonjour,

    Un petit exemple pour le champ Heures que je met dans les donnees.
    Pour le nom d'un champ utilisé la propriété Caption.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Heures")
          .Orientation = xlDataField
          .Caption = "Somme Heures"
          .Function = xlSum
    End With
    Pour des champs en colonne ou en ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:=Array("Champ1", "Champ11"), ColumnFields:="Champ2", PageFields:="Champ3"
    Le Array permet, ici, d'insérer deux champs en ligne

    Cordialement

  3. #3
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 45
    Points
    45
    Par défaut
    ok merci bcp

    Je me suis aussi aperçue que le titre du champ dans le TCD ne peut pas être le même que celui d'origine, c'est pour ça qu'il y avait une erreur je crois.

    Merci

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

Discussions similaires

  1. [XL-2010] Tableau croisé dynamique : affichage des dates
    Par awa123 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/01/2015, 23h48
  2. [XL-2013] Tri de données / Tableau Croisé Dynamique / Gestions des Doublons.
    Par arnachronox dans le forum Excel
    Réponses: 5
    Dernier message: 29/12/2014, 14h41
  3. [AC-2003] Tableau croisé dynamique, importation des champs
    Par HenriJ dans le forum Contribuez
    Réponses: 0
    Dernier message: 17/12/2013, 20h25
  4. Tableau croisé dynamique : forme des graphiques
    Par onejock dans le forum Excel
    Réponses: 6
    Dernier message: 12/08/2008, 15h44
  5. Réponses: 3
    Dernier message: 22/11/2007, 14h44

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