Création d'un tableau croisé dynamique

Bonjour,

J'ai un problème lors de la création d'un TCD via VBA.

Le but étant de créer mon TCD en cellule "AI1" de la feuille 1, où se situe mon tableau parcourant les colonnes "A:AE".

Je dispose des en têtes de colonne suivantes postées en PJ.

Voici ma macro

Sub créer_tdc()

'Dimension des variables

Dim wshTCD      As Worksheet
Dim PvtTCD      As PivotTable

   'Affectation du TCD à la feuille "Feuil1"
    Set wshTCD = Worksheets("Feuil1")

   'Suppression de tous les TCD existants dans la feuille
    For Each PvtTCD In wshTCD.PivotTables
        PvtTCD.TableRange2.Clear
    Next PvtTCD

   'Ajout d'un TCD sur la feuille "TCD automatique"
   Set PvtTCD = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=[Feuil1!A1].CurrentRegion.Address(, , xlR1C1, True)) _
                .CreatePivotTable(TableDestination:=wshTCD.Range("AN1"), TableName:="TCD_ADPP")[/color][/color][/b][/b]

   'Ajout des champs au TCD
       With PvtTCD

        'Ajout d'une Ligne
        With .PivotFields("Customer for final sales")
            .Orientation = xlRowField
            .Position = 1
        End With

        'Ajout d'une Colonne
        With .PivotFields("Nombre de Commercial Variety ")

            .Function = xlCountNums
            .Orientation = xlColumnNums
            .Position = 1
        End With

    End With

End Sub

Un message d'erreur est indiqué au niveau de la ligne surlignée, et je n'ai pu tester le reste de la macro!

En pièce jointe, je vous ai un extrait du résultat que je souhaiterai obtenir

Merci de votre aide !

en tetes colonnes tcd voulu

Bonjour,

Essaie ainsi mais n'oublie pas d'indiquer le nom de la feuille du TCD (voir partie surlignée).

Sinon, tu joins un fichier à ta demande.

Cdlt.

Option Explicit

Sub créer_tdc()
Dim wb As Workbook
Dim wsData As Worksheet, wsPT As Worksheet
Dim rngData As Range
Dim PTCache As PivotCache
Dim pt As PivotTable

    Application.ScreenUpdating = False

    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Feuil1")
    Set rngData = wsData.Cells(1).CurrentRegion
    Set wsPT = wb.Worksheets("xxx")
    For Each pt In wsPT.PivotTables
        pt.TableRange2.Clear
    Next pt

    Set PTCache = wb.PivotCaches.Create _
                  (SourceType:=xlDatabase, _
                   SourceData:=rngData)

    Set pt = PTCache.CreatePivotTable _
             (TableDestination:=wsPT.Range("AN1"), _
              TableName:="TCD_ADPP")

    With pt
        .AddFields RowFields:="Customer for final sales"
        With .PivotFields("Nombre de Commercial Variety ")
            .Orientation = xlDataField
            .Function = xlCount
        End With
    End With

    Set rngData = Nothing
    Set pt = Nothing
    Set PTCache = Nothing
    Set wsPT = Nothing: Set wsData = Nothing
    Set wb = Nothing

End Sub

Merci Jean-Eric de ta réponse.

J'ai un message d'erreur sur cette ligne (voir partie surlignée) : " Impossible de lire la propriété PivotFields de la classe PivotTable."

Dim pt As PivotTable

    Application.ScreenUpdating = False

    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Feuil1")
    Set rngData = wsData.Cells(1).CurrentRegion
    Set wsPT = wb.Worksheets("Feuil1")
    For Each pt In wsPT.PivotTables
        pt.TableRange2.Clear
    Next pt

    Set PTCache = wb.PivotCaches.Create _
                  (SourceType:=xlDatabase, _
                   SourceData:=rngData)

    Set pt = PTCache.CreatePivotTable _
             (TableDestination:=wsPT.Range("AN1"), _
              TableName:="TCD_ADPP")

    With pt
        .AddFields RowFields:="Customer for final sales"
       With .PivotFields("Nombre de Commercial Variety ")
            .Orientation = xlDataField
            .Function = xlCount
        End With
    End With

    Set rngData = Nothing
    Set pt = Nothing
    Set PTCache = Nothing
    Set wsPT = Nothing: Set wsData = Nothing
    Set wb = Nothing

End Sub

Je n'ai pas les compétences pour résoudre ce genre de problème sachant que je débute en VBA...

J'ai aussi indiquer le nom de la feuille du TCD, comme tu m'avais conseillé, par Feuil1 car je veux que mon TCD se trouve sur cette feuille. Est-ce juste ?

Merci

Bonjour,

Vérifie le nom du champ "Nombre de Commercial Variety". Le texte entre guillemets doit être identique au texte dans la feuille de calcul (retire l'espace en fin de texte ?).

Sinon, pour le nom de la feuille pour le TCD, si je comprends bien ton TCD est sur la même feuille que tes données.

Ce qui signifie que wsData = wsPT.

Si c'est le cas la procédure doit être modifiée comme ci-dessous.

Mais n'hésite pas à joindre un fichier à ta demande. Ce sera plus simple.

Option Explicit

Sub créer_tdc()
Dim wb As Workbook
Dim wsData As Worksheet
Dim rngData As Range
Dim PTCache As PivotCache
Dim pt As PivotTable

    Application.ScreenUpdating = False

    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Feuil1")
    Set rngData = wsData.Cells(1).CurrentRegion
    For Each pt In wsPT.PivotTables
        pt.TableRange2.Clear
    Next pt

    Set PTCache = wb.PivotCaches.Create _
                  (SourceType:=xlDatabase, _
                   SourceData:=rngData)

    Set pt = PTCache.CreatePivotTable _
             (TableDestination:=wsData.Range("AN1"),_
              TableName:="TCD_ADPP")

    With pt
        .AddFields RowFields:="Customer for final sales"
        With .PivotFields("Nombre de Commercial Variety")
            .Orientation = xlDataField
            .Function = xlCount
        End With
    End With

    Set rngData = Nothing
    Set pt = Nothing
    Set PTCache = Nothing
    Set wsPT = Nothing: Set wsData = Nothing
    Set wb = Nothing

End Sub

Je te joins le fichier en PJ.

Dans les macro il y a les deux codes que tu m'as conseillé de faire.

Dans le fichier, les en-têtes de colonne avec les nombres (44,45, etc...) représentent les semaines.

Je souhaite obtenir le tableau en PJ.

Je voudrai que :

  • le TCD soit sur la même feuille que les données, soit en feuille 1
  • le nom de mon TCD soit "TCD_ADPP"
  • le nombre de "commercial variety"

Merci de ton aide en tout cas !


Pour info, ta deuxième macro fonctionne mais ne m'affiche que les étiquettes de lignes, soit les Customer for final sales


Pardon je me suis trompé, ta première macro fonctionne mais n'affiche que les customers for final sales

tcd voulu
9classeur2.xlsm (35.67 Ko)

RE,

Tu as 2 fichiers :

v1 - tel que tu l'as demandé

v2 - tel qu'il devrait être avec des données normalisées en tableau.

Je te laisse découvrir.

Les explications viendront après.

A te relire.

Cdlt.

20xlp-picture-v1.xlsm (44.97 Ko)
29xlp-picture-v2.xlsm (56.25 Ko)

Merci de ton travail.

J'ai cependant réussi à trouver la solution avec ton début de macro, et cela fonctionne !

Sub créer_tdc1()

Dim wb As Workbook
Dim wsData As Worksheet, wsPT As Worksheet
Dim rngData As Range
Dim PTCache As PivotCache
Dim pt As PivotTable

    Application.ScreenUpdating = False

    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Feuil1")
    Set rngData = wsData.Cells(1).CurrentRegion
    Set wsPT = wb.Worksheets("Feuil1")
    For Each pt In wsPT.PivotTables
        pt.TableRange2.Clear
    Next pt

    Set PTCache = wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rngData)

    Set pt = PTCache.CreatePivotTable(TableDestination:=wsPT.Range("AN1"), TableName:="TCD_ADPP")

    '1. placer la colonne "Customer for final sales" dans la case "étiquettes de lignes"
    With pt.PivotFields( _
        "Customer for final sales")
        .Orientation = xlRowField
        .Position = 1
    End With

    '2. placer la colonne "Commercial variety" dans la case "Valeurs", et choisir "Nombre" comme fonction de calcul
     nom_colonne = Sheets("Feuil1").Range("B1").Value
     Titre_colonne_resultat = "Nombre " & nom_colonne

     pt.AddDataField pt.PivotFields(nom_colonne), Titre_colonne_resultat, xlCount

    Set rngData = Nothing
    Set pt = Nothing
    Set PTCache = Nothing
    Set wsPT = Nothing: Set wsData = Nothing
    Set wb = Nothing

End Sub

J'en suis venu enfin venu à bout

Bonne fêtes de fin d'année et merci

Rechercher des sujets similaires à "creation tableau croise dynamique"