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 :

Création d'un TCD par macro [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Par défaut Création d'un TCD par macro
    Bonjour,

    Je voudrais créer un TCD par macro. Celle-ci serait utilisable sur d'autre fichier excel.
    Sur chacun des fichiers excel je dois utilisé les données de l'onglet "Source" (toujours prénommé ainsi), pour les insérer dans un TCD, où l'onglet se nomme "TCD". Etant débutant, je trouve des bouts de code que j'essaye d'adapter à ma situation, mais je reste bloqué. De plus, j'ai beaucoup de mal à décrypter la ligne concernant la création de ce TCD.
    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
     
    Sub test_creation_tcd()
    '
    ' CREERTCD Macro
    '
    ' Sélection des données
        Sheets("Source").Select
        Columns("A:S").Select
     
    ' Création du TCD
        ActiveWorkbook.Worksheets("TCD").PivotTables( _
            "Tableau croisé dynamique").PivotCache.CreatePivotTable TableDestination:= _
            "", TableName:="Tableau croisé dynamique", DefaultVersion:= _
            xlPivotTableVersion12
     
    ' Actualiser
        Range("C9").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique").PivotCache.Refresh
    End Sub
    Ici j'ai une erreur 1004 (Très récurrente à ce que j'ai lus), à la création du TCD : "Impossible de lire la prorpiété PivotTables de la classe Worksheet"

    D'autre message d'erreur que j'ai pus avoir en essayant divers code :
    "Le nom de champ de tableau croisé dynamique n’est pas valide. Pour créer un tableau croisé dynamique, vous devez utiliser des données qui sont organisées sous forme de liste avec des étiquettes de colonnes. Si vous modifiez le nom d’un champ de tableau croisé dynamique, vous devez taper un nouveau nom pour le champ. "



    Merci d'avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableName:="Tableau croisé dynamique"
    C'est ici qu'il va cherché la source du TCD, as-tu bien une table nommée :="Tableau croisé dynamique" dans ton classeur?

    si non, essaye d'ajouter ceci avant la création du TCD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Source").ListObjects.Add(xlSrcRange, Sheets("Source").SelectRange("A:S", , xlNo).Name = "Tableau croisé dynamique"

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Source").ListObjects.Add(xlSrcRange, Sheets("Source").SelectRange("A:S", , xlNo).Name = "Tableau croisé dynamique")
    Il semblerait y avoir une erreur de syntaxe.

    Table = Feuille ? Si oui, j'ai bien essayé d'en rajouter une nommée : "Tableau Croisé Dynamique" et une seconde nommée "TCD". Mais, l'erreur persiste.

    Merci de votre réponse.

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Chez moi le code fonctionne, et d'après ce que tu as posté il y a une paranthèse a la fin que je n'ai pas. Tu as bien une feuille nommée "Source"?
    Une table n'est pas un feuille.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Par défaut
    Bonjour,

    Il manquais une parenthèse pour le ".Add()"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Source").ListObjects.Add(xlSrcRange, Sheets("Source")).SelectRange("A:S", , xlNo).Name = "Tableau croisé dynamique"
    Ceci corrigé, cette ligne fonctionne avec ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     Sheets("Source").Select
     Columns("A:S").Select
     Sheets("Source").ListObjects.Add(xlSrcRange, Sheets("Source")).SelectRange("A:S", , xlNo).Name = "Tableau croisé dynamique"
    ' Création du TCD
        ActiveWorkbook.Worksheets("TCD").PivotTables( _
            "Tableau croisé dynamique").PivotCache.CreatePivotTable TableDestination:= _
            "", TableName:="Tableau croisé dynamique", DefaultVersion:= _
            xlPivotTableVersion12
     
    ' Actualiser
        Range("C9").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique").PivotCache.Refresh
    Mais il me donne une erreur de compilation : "Argument ou appel de procédure incorrect"

    Ceci est une table ? Il se peut que certaine cellule soit vide, sans aucun caractère. Cela peut-il poser problème ?


  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Pour mettre les données sous forme de table:
    Nom : exemple.jpg
Affichages : 1241
Taille : 188,4 Ko

    Tu n'est pas obligé d'utiliser une table pour faire un TCD mais c'est ce qu'il y avait dans ton code.
    Un TCD peut se créer avec une table vide

    Mais il me donne une erreur de compilation : "Argument ou appel de procédure incorrect"
    Quel ligne?

  7. #7
    Expert éminent

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

    Si tu laisses la ligne 1 vide, tu ne peux utiliser la plage A:S car alors la source n'as pas d'en-têtes.

    Soit supprimer cette ligne, soit calculer la hauteur de la plage à partir de la ligne 2.

    Edit : non Halaster08, Tablename est le nom donné au TCD pas celui de la source qui était depuis le début supposée être la plage A:S mais qui manque dans le code : Quitte à créer un tableau, le nommer Source ou Data ou Données plutôt que Tableau Croisé Dynamique...

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

Discussions similaires

  1. Problème création de TCD par macro
    Par aziz1015 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/09/2015, 22h21
  2. [XL-2010] Changer les champs d'un TCD par macro
    Par stevenring dans le forum Excel
    Réponses: 1
    Dernier message: 21/09/2014, 14h41
  3. TCD par macro et filtre
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2012, 10h02
  4. [VI-2003] création png avec option par macro
    Par Ju1.0 dans le forum Visio
    Réponses: 11
    Dernier message: 25/11/2010, 14h32
  5. Ouvrir les résultats d'un TCD par macro
    Par illight dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 31/03/2008, 11h41

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