VBA - Création d'un tableau croisé dynamique

Mappie

XLDnaute Junior
Bonjour,

A partir d'une base de données de taille variable, je souhaiterais automatiser, par une macro, la création d'un TCD avec les mêmes champs et avec un champ calculé.

J'ai fait l'enregistrement mais lorsque j'appelle la macro une nouvelle fois, j'ai une erreur d'exécution:

PHP:
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Bdd!R1C1:R5C4", Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:="Feuil9!R3C1", TableName:="Tableau croisé dynamique27", _
        DefaultVersion:=xlPivotTableVersion14

Je ne sais pas comment résoudre le problème qui doit se trouver, je pense, au niveau du nom du TCD, de la définition des variables et de la feuille de destination.

Je vous remercie par avance pour votre aide
 

Pièces jointes

  • Tcd_Macro.xlsm
    36 KB · Affichages: 141
  • Tcd_Macro.xlsm
    36 KB · Affichages: 95
  • Tcd_Macro.xlsm
    36 KB · Affichages: 124

JCGL

XLDnaute Barbatruc
Re : VBA - Création d'un tableau croisé dynamique

Bonjour à tous,

Après avoir mis les données sous forme de Tableau et l'avoir nommé "Tablo" :

VB:
Sub Création_TCD()
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "TCD" & Format(Sheets.Count - 1, "00")
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
             "Tablo", Version:=xlPivotTableVersion15).CreatePivotTable _
              TableDestination:=ActiveSheet.Cells(4, 2), TableName:="TCD", _
              DefaultVersion:=xlPivotTableVersion15
    With ActiveSheet.PivotTables("TCD").PivotFields("Nom")
        .Orientation = xlRowField
        .Position = 1
    End With
    ActiveSheet.PivotTables("TCD").CompactLayoutRowHeader = "Noms"
    With ActiveSheet.PivotTables("TCD").PivotFields("Ville")
        .Orientation = xlPageField
        .Position = 1
    End With
    ActiveSheet.PivotTables("TCD").AddDataField ActiveSheet. _
               PivotTables("TCD").PivotFields("Prix A"), _
               "Somme de Prix A", xlSum
    With ActiveSheet.PivotTables("TCD").PivotFields( _
         "Somme de Prix A")
        .Caption = " Prix A"
        .NumberFormat = "# ##0,00"
    End With
    ActiveSheet.PivotTables("TCD").AddDataField ActiveSheet. _
                PivotTables("TCD").PivotFields("Prix B"), _
                "Somme de Prix B", xlSum
    With ActiveSheet.PivotTables("TCD").PivotFields( _
         "Somme de Prix B")
        .Caption = " Prix B"
        .NumberFormat = "# ##0,00"
    End With
    ActiveSheet.PivotTables("TCD").CalculatedFields.Add _
            "Prix C", "='Prix A' +'Prix B'", True
    ActiveSheet.PivotTables("TCD").PivotFields("Prix C"). _
            Orientation = xlDataField
    ActiveSheet.PivotTables("TCD").PivotFields( _
            "Somme de Prix C").Caption = " Prix C"
End Sub

A+ à tous
 

Pièces jointes

  • JC TCD_Macro.xlsm
    45.4 KB · Affichages: 406

Mappie

XLDnaute Junior
Re : VBA - Création d'un tableau croisé dynamique

Bonjour JCGL,

Merci pour votre aide, cela correspond à ce que je recherche!

Est-il possible de mettre sous vba la conversion et de nommer le tableau en macro?

J'ai trouvé comment nommer la plage de cellules mais je ne sais pas comment convertir en tableau.

Je vous remercie par avance.

Bonne journée
 

JCGL

XLDnaute Barbatruc
Re : VBA - Création d'un tableau croisé dynamique

Bonjour à tous,

Rajoute ces lignes en début de code :

VB:
Sub Création_TCD()
    Dim DerL&
    DerL = Sheet1.Range("A" & Rows.Count).End(xlUp).Row


    ActiveSheet.ListObjects("Tablo").Unlist
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$" & DerL), , xlYes).Name = "Tablo"
    ActiveSheet.ListObjects("Tablo").TableStyle = "TableStyleLight15"


    Sheets.Add After:=Sheets(Sheets.Count)
 

Discussions similaires

Réponses
1
Affichages
514

Membres actuellement en ligne

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 869
dernier inscrit
radyreth