Créer un Tableau Dynamique Croisé

Bonjour à tous !

Je souhaiterais créer une macro qui me permettrait, sur ce fichier :

, de :

  • Copier le tableau dans une nouvelle feuille
  • Créer un Tableau Dynamique Croisé

Pour copier le tableau je pense avoir la bonne formule ( Cf exemple )

Pour le TDC, le code qui est avec l'exemple fonctionne, mais, si le tableau de départ change, alors la macro ne fonctionne plus et affiche le message d'erreur :

" Le nom du champ de tableau croisé dynamique n'est pas valide. Pour créer un rapport de tableau croisé dynamique, vous devez utiliser des données sous forme de liste avec des étiquettes de colonnes. Si vous changez le nom d'un champ de tableau croisé dynamique, vous devez taper un nouveau nom pour le champ."

Vu que je travaille sur beaucoup de fichiers différents, j'aimerais que ma macro fonctionne pour tous ....

Auriez vous une idée pour régler ce problème ?

Merci d'avance !

Jeremulus

Bonjour,

Un exemple à étudier.

Pourquoi copier la feuille avant de créer le TCD ?

ALT F8, puis exécuter la procédure.

Cdlt.

Bonjour Jean Eric,

Merci beaucoup pour ton aide ! Ta macro marche très bien

Le seul petit soucis ... C'est que dans le fichier sur lequel je travaille, je n'ai pas que l'onglet "sans infos" mais également beaucoup d'autres onglets, et lorsque je lance la macro, ils disparaissent tous ! Comment cela se fait ?

Edit : en enlevant la ligne If ws.Name <> wsData.Name Then ws.Delete leproblème semble résolu !

Bonjour,

Je t'ai donné un exemple !...

Avec les éléments que tu as donné.

Tu précises donc ta demande.

Cdlt.

Ci-dessous la procédure (ALT F11 pour ouvrir l'éditeur VBE).

Public Sub CreatePivotTable()
Dim ws As Worksheet, wsData As Worksheet, wsTable As Worksheet, wsPT As Worksheet
Dim rngData As Range, rngPT As Range
Dim PTCache As PivotCache, PT As PivotTable
Dim lRow As Long, lastRow As Long, lastCol As Integer

    Set wsData = Worksheets("Sans infos")

    Application.DisplayAlerts = False
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> wsData.Name Then ws.Delete
    Next ws
    Application.DisplayAlerts = True

    With wsData
        lRow = 10
        lastCol = .Cells(lRow, .Columns.Count).End(xlToLeft).Column
        lastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
        Set rngData = .Cells(lRow, 2).Resize(lastRow - lRow + 1, lastCol)
    End With

    Set wsTable = ActiveWorkbook.Worksheets.Add
    wsTable.Name = "Table"
    rngData.Copy Destination:=wsTable.Cells(1)
    Set rngPT = Cells(1).CurrentRegion

    Set PTCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, rngPT)

    Set wsPT = ActiveWorkbook.Worksheets.Add
    wsPT.Name = "TCD"

    Set PT = PTCache.CreatePivotTable(Cells(1), "TCD")

    With PT
        .ManualUpdate = True
        .AddFields RowFields:="Niveau"
        With .PivotFields("Surface Prot?g?e 1 (mm2)")
            .Orientation = xlDataField
            .Function = xlSum
            .NumberFormat = "#,##0.00;[Red](#,##0.00);"
            .Caption = ChrW(931) & " Surface Prot?g?e 1 (mm2)"""
        End With
        .ManualUpdate = False
    End With

End Sub

bonjour à tous

il est très étrange de construire un TCD par macro

si on a bien organisé ses fichiers, on crée un TCD au départ, une seule fois pour toutes, au clavier/souris

ensuite, on ne fait que "actualiser"

quelle est l'organisation des fichiers de données qui oblige ainsi à créer sans cesse le même TCD ?

Bonjour jmd,

En fait les différents fichiers possèdent la même trame mais sont à chaque fois différents, ce qui suppose de générer un nouveau TCD à chaque fois.

Je suis d'accord ça ne prend pas beaucoup de temps de créer un TCD, mais c'est toujours ça de pris

Une fois le TCD générique crée il n'y a plus qu'à le modifier en fonction de ce que je veux dans les lignes et colonnes

Rechercher des sujets similaires à "creer tableau dynamique croise"