Création d'une macro pour générer un tableau croisé dynamique

Bonjour,

Je souhaiterais créer un bouton de macro pour générer un tableau croisé dynamique.

J'ai donc créé un bouton de formulaire (avec l'onglet développeur) puis dans l'onglet affichage d'excel / macro /enregistrer une macro j'ai fait ma manipulation (sélectionner le tableau qui se trouve dans un autre onglet du même fichier, insérer tableau croisé dynamique et sélectionner les champs à afficher). Puis macro/arrêter l'enregistrement.

Mais la macro ne s'exécute pas quand je la teste sur le bouton auquel je l'ai affectée et j'ai le message suivant qui s'affiche :

"Erreur d’exécution 1004

Impossible de lire la propriété pivots table de la classe Worksheet"

Pourriez-vous me dépanner? j'avoue ne pas bien connaître les macros encore.

Merci !

Sandrine

PS : De façon plus complète, voici ce qui est indiqué dans VBA :

"Sheets("3_Export_BDN_brut").Select

Range("A1").Select

Selection.CurrentRegion.Select

ActiveWorkbook.Worksheets("4_Changement_de_nom").PivotTables( _

"Tableau croisé dynamique5").PivotCache.CreatePivotTable TableDestination:= _

"4_Changement_de_nom!R63C1", TableName:="Tableau croisé dynamique6", _

DefaultVersion:=xlPivotTableVersion15

Sheets("4_Changement_de_nom").Select

Cells(63, 1).Select

With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Taxon")

.Orientation = xlRowField

.Position = 1

End With

End Sub"

Bonjour,

Tu peux commencer pas tester cette procédure.

Mais sans avoir de fichier ou la totalité de ta macro, cela va être difficle pour la suite.

Cdlt.

Public Sub CreatePivotTable()
Dim wb As Workbook
Dim wsData As Worksheet, wsPT As Worksheet
Dim rngPT As Range
Dim PTCache As PivotCache
Dim pt As PivotTable

    Set wb = ActiveWorkbook

    Set wsData = wb.Worksheets("3_Export_BDN_brut")
    Set rngPT = wsData.Cells(1).CurrentRegion

    Set wsPT = wb.Worksheets("4_Changement_de_nom")

    Set PTCache = wb.PivotCaches.Create(xlDatabase, rngPT)
    Set pt = PTCache.CreatePivotTable(wsPT.Cells(63, 1), "TCD_1")

    With pt
        .ManualUpdate = True
        .AddFields RowFields = "Taxon"
        '....
        '....
        '....
        .ManualUpdate = False
    End With

End Sub

Bonjour,

Merci pour votre réponse! J'ai essayé le script que vous m'avez envoyé mais rien ne se passe. Je pense que je manque de compréhension du fonctionnement des macros; je pensais qu'il suffisait d'enregistrer la macro au moment où on fait la manip sans avoir forcément à se plonger dans le langage VBA (que j'avoue ne pas connaître du tout).

J'espère quand même trouver une solution. Aussi, je vous envoie le fichier de travail joint :

  • dans le 1er onglet, j'ai une base de données qui sera modifiée, complétée... d'où le besoin d'avoir une macro qui refera le travail automatiquement
  • dans le 2nd onglet, je voudrais insérer un bouton (j'ai opté pour un bouton de formulaire mais ça n'est peut-être pas la meilleure façon de procéder) qui lance une macro simple : aller sélectionner la totalité de la base du 1er onglet (le nb de lignes variera à l'avenir), et créer un tableau croisé dynamique qui pour le moment n'affichera que la liste des "taxons" du champ "taxons".
Jusqu'à présent j'avais procédé bêtement sans regarder le VBA en lançant la macro avant la manip et en l'enregistrant.

Pensez-vous qu'il soit possible d'effectuer ce genre de création de macro sans apprendre les codes VBA ? Et dans tous les cas auriez-vous un support de tutoriel à me conseiller sur la création de macro (je n'en n'ai pas trouvé dans la rubrique "cours excel"?

Merci beaucoup

Cordialement,

Sandrine

Bonjour à tous

De façon générale on ne crée jamais de TCD par macro.

On crée et paramètre le TCD manuellement, un code VBA pouvant éventuellement en modifier la source si nécessaire...

Bonjour,

Merci pour cette information.

Ma difficulté est que la base à partir de laquelle le tableau croisé dynamique va être créé sera actualisée (le nombre de lignes sera amené à évoluer, mais le nom des colonnes restera identique). Je peux donc créer un tableau croisé dynamique vide, mais comment faire pour qu'il intègre la totalité de la base à chaque mise à jour?

Merci par avance

Bonjour,

Merci pour cette information.

Ma difficulté est que la base à partir de laquelle le tableau croisé dynamique va être créé sera actualisée (le nombre de lignes sera amené à évoluer, mais le nom des colonnes restera identique). Je peux donc créer un tableau croisé dynamique vide, mais comment faire pour qu'il intègre la totalité de la base à chaque mise à jour?

Merci par avance

Bonjour, salut 78chris, Jean-Eric

Il suffit d'utiliser un Tableau Structuré comme source pour votre TCD. Pour le créer : Sélectionnez la totalité de votre base de données-->Insertion-->Tableau.

tblstruc1 tblstruc3

Bonjour à tous

Pour compléter, quand tu mets sous forme de tableau, un onglet spécifique Outils de tableau apparait : on peut y changer le nom du tableau à gauche et cliquer juste à côté sur Synthétiser avec un TCD.

Merci, j'essaye et vous tiens au courant.

Bonjour,

Merci pour votre aide. Le tableau structuré est un outil génial qui va bien m'aider, je ne connaissais pas et j'ai lu la doc que vous m'avez envoyé en lien. Merci beaucoup!

La 1e macro de ma vie fonctionne ! Prise par mon élan, je lui ai demandé d'éditer le tableau croisé dynamique et ça fonctionne. Mais au vu de votre message 78Chris ça n'est pas conseillé. Quel problème peut survenir quand on intègre un tableau croisé dynamique à une macro?

Merci encore pour le tuyau

Cordialement,

Bonjour,

Un TCD est conçu pour s'en sortir tout seul, comme un grand !

Comme il est dynamique, il est facile de l'actualiser, d'en modifier la structure, le rendu ou lui appliquer des filtres (le tout sans VBA). Il n'y a donc besoin de le créer qu'une seule fois, le reste étant à réaliser au besoin par l'utilisateur.

Je partage l'avis de 78chris, je ne vois pas l'intérêt de VBA dans l'histoire...

Rechercher des sujets similaires à "creation macro generer tableau croise dynamique"