Macro pour Tableau Croisé Dynamique automatisée

Bonjour !

Je m'amuse depuis quelques jours à explorer les différentes fonctionnalités d'Excel et désormais les fonctions VBA afin d'automatiser le bidouillage d'une base de donnée que j'exporte et analyse quotidiennement.

Je me retrouve face à un souci que je ne parviens pas à résoudre en lisant des tutoriels ou par une recherche forum :

Je souhaite qu'à un moment donné la macro crée un TCD avec les données de ma feuille active.

Avec l'outil "Enregistrer une macro", j'obtiens ceci :
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "RS!R1C1:R189", Version:=6).CreatePivotTable TableDestination:= _
        "Feuil1!R3C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=6

J'ai un problème avec le "189" qui correspond au nombre de ligne de la base de donnée que j'ai utilisée pour enregistrer la macro, car ce chiffre peut varier, et je voudrais une macro qui crée ce TCD avec toutes les lignes, quelque soit le fichier.

J'ai essayé de compter le nombre de ligne avec la formule suivante en début de code :

    Dim LastRw As Long
    LastRw = Sheets("RS").Cells(Rows.Count, 1).End(xlUp).Row

Mais je n'arrive pas à intégrer ce "LastRw" dans "R1C1:R189"

J'espère avoir été suffisamment clair et concis !

Je vous remercie par avance si quelqu'un a une idée pour résoudre mon problème (et je ne doute pas que la solution est simple mais je débute)

Bonjour,

    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "RS!R1C1:R" & LastRw, Version:=6).CreatePivotTable TableDestination:= _
        "Feuil1!R3C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=6

attention à ce que ce nom n'existe pas déjà (sinon ne rien mettre et laisser excel attribuer un nom tout seul)

"Tableau croisé dynamique1"

Bonjour et merci pour votre réponse rapide !

En effectuant cela, je me retrouve avec ce message d'erreur :

image

Pour être un peu plus clair, au moment où je veux insérer mon TCD, la feuille ressemble au tableau ci-joint.
Pour la suite des opérations je n'ai pas de souci, mais j'ai ce bloquage sur la création du TCD

27rs-bidouillage.xlsm (47.43 Ko)

Il arrive qu'une macro, même enregistrée, en réalité ne fonctionne pas. Et ici l'intégration de LastRw n'y fait rien ... c'est la macro d'origine qui n'est pas bonne.

Je regarde.

Ceci fonctionne

Sub rs()

    Dim LastRw As Long, plage As Range, f As Worksheet
    LastRw = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    Set plage = ActiveSheet.Range(Cells(1, 1), Cells(LastRw, 7))
    Set f = Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        plage, Version:=xlPivotTableVersion15).CreatePivotTable _
        TableDestination:="R3C1", _
        DefaultVersion:=xlPivotTableVersion15

End Sub

je n'ai pas donné de nom au tableau, dans ce cas, dans la suite, remplace

With ActiveSheet.PivotTables("Tableau croisé dynamique1")

par

With ActiveSheet.PivotTables(1)

Bonjour à tous

On ne crée pas de TCD par macro : on le crée et le peaufine manuellement puis si besoin on en change la source par VBA

Sur 2019 on utilise PowerQuery intégré à Excel pour attaquer directement la bonne source...

Merci beaucoup @Steelson, ça fonctionne impeccablement !

@78chris, merci pour les conseils ! A vrai dire je découvre tout juste les possibilités d'excel et je les explore progressivement.

J'avais effectivement créé et peaufiné manuellement le TCD sur une première base de donnée en ayant au préalable activé "Enregistrer une macro", afin de pouvoir par la suite avoir le même résultat en un clic sur d'autres bases de données similaires.

J'irai me renseigner sur PowerQuery, merci du tuyau !

@Dry

Merci beaucoup @Steelson, ça fonctionne impeccablement !

Je suis un peu de l'avis de Chris, du reste je ne l'avais jamais fait et c'est pour cela que ça m'a pris un peu de temps

Le problème de la macro enregistrée, c'est qu'excel attribue des noms qui au deuxième tour ne fonctionnent plus car déjà attribués. C'est pourquoi je m'en suis affranchi.

En réalité, la seule chose que je fais, c'est, si besoin, changer la source d'un TCD déjà créé. De plus, chercher la fin des données n'est pas optimal, il suffit que ces données soient structurées en tableau.

Rechercher des sujets similaires à "macro tableau croise dynamique automatisee"