Création d'un graphique croisé dynamique en VBA Excel 2010

Bonjour à tous,

Je veux créer un graphique croisé dynamique à partir d'un fichier que j'ai copié coller d'un autre fichier excel. La 1ère partie copier/coller une plage de donnée d'un autre fichier le code marche bien. Mais la ou ça bloque c'est lorsque je veux créer un graphique tableau croisé dynamique. Pouvez-vous m'aider à résoudre ce problème s'il vous plait. J'ai essayé avec tablename = " " mais ça ne marche pas. Ci dessous le code avec les commentaire pour chaque étape du code :

Sub ouvre_copie_colle()
'
'
' Touche de raccourci du clavier: Ctrl+a
'
' déclaration des variables

  Dim wB As Workbook
    Dim ws As Worksheet
    Dim dl As Long
    dl = Cells(Application.Rows.Count, 1).End(xlUp).Row
    Dim my_FileName As Variant
' ouvrir un fichier source 
    my_FileName = Application.GetOpenFilename

    If my_FileName <> False Then

    Set wB = Workbooks.Open(Filename:=my_FileName)
    End If
' aller sur un onglet défini
    Sheets(" Detail").Activate
'selectionner et copier une plage de donnée
  Range("B2:X" & dl).Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy

' ouvrir le fichier excel d'analyse
ThisWorkbook.Activate
Range("A1").Select
' coller la plage de donnée copier dans le fichier template analyse
ActiveSheet.Paste
'fermer le fichier source
wB.Close SaveChanges:=False
Range("A1:V6510").Select

Static I As Long
Dim feuille As Worksheet
'créer un onglet analyse
I = I + 1
Set feuille = ThisWorkbook.Worksheets.Add
feuille.Name = "Analyse"
' créer le graphique croisé dynamique
ActiveSheet.Name = "Analyse"
    ActiveWorkbook.ActiveSheet("analyse").PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
             " Detail", Version:=xlPivotTableVersion14).CreatePivotTable _
              TableDestination:="", TableName:="TCD", _
              DefaultVersion:=xlPivotTableVersion14
 With ActiveSheet.PivotTables("TCD").PivotFields("code")
 .Orientation = xlRowField
 .Position = 1
 End With

Je vous remercie par avance pour votre aide

Bonjour

Sachant qu'en général on ne crée pas les TCD/GCD par macro, je comprends d'autant moins ton approche que tu colles les données dans un classeur d'analyse existant qui peut donc contenir un TCD/GCD qu'il sudfirait d'actualiser après collage.

On peut aussi privilégier un TCD/GCD réalisé sur un fichier externe ce qui évite le copier coller...

Bonjour 78chris,

je sais qu'on ne crée pas en générale des TCD par macro. Sauf que j'essaie de me simplifier la tache et surtout gagner du temps dans mon travail. En plus ça me permet d'apprendre de nouvelles choses et aussi m'améliorer en VBA. Pour être un peu plus claire dans ce je cherche à faire : J'ai un fichier template qui va me servir à faire les tableaux croisés dynamiques. J'ai un autre fichier, qu'on va appeler source, dans lequel il y a des données que je souhaite analyser via des TCD et GCD. Cependant ce fichier source ne doit pas être modifier donc pas d'ajout de nouvelle feuille ni de tableau ni de graph. Raison pour laquelle j'ai créer le fichier Template.

Donc ma macro copier dans le fichier source les données dont j'ai besoin et les colles dans le template sur une feuille appelé Detail. Puis créer une deuxième feuille (analyse) ou je veux retrouver tous mes TCD et GCD Code ci-dessous :

Sub ouvre_copie_colle()
'
'
' Touche de raccourci du clavier: Ctrl+a
'
' déclaration des variables

  Dim wB As Workbook
    Dim ws As Worksheet
    Dim dl As Long
    dl = Cells(Application.Rows.Count, 1).End(xlUp).Row
    Dim my_FileName As Variant
' ouvrir un fichier source sur le le serveur
    my_FileName = Application.GetOpenFilename

    If my_FileName <> False Then

    Set wB = Workbooks.Open(Filename:=my_FileName)
    End If
' aller sur un onglet défini
    Sheets("Costing Detail").Activate
'selectionner et copier une plage de donnée
  Range("B2:X" & dl).Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy

' ouvrir le fichier excel d'analyse
ThisWorkbook.Activate
Range("A1").Select
' coller la plage de donnée copier dans le fichier template
ActiveSheet.Paste
'fermer le fichier source
wB.Close SaveChanges:=False
Range("A1:V6510").Select
Static I As Long
Dim feuille As Worksheet
'créer une feuille analyse
I = I + 1
Set feuille = ThisWorkbook.Worksheets.Add
feuille.Name = "Analyse"

une fois cette tâche effectué, je sélectionne sur la feuille detail une plage de donnée puis je fais mon GCD, code via enregistrement par macro ci-dessous :

Sub Macro2()
'
' Macro2 Macro
'

'
    Range("A1:V6510").Select
    Sheets.Add
   [Surligner][color=#FF4000]ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Feuil1!R1C1:R6510C22", Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:="Feuil5!R3C1", TableName:="Tableau croisé dynamique2", _
        DefaultVersion:=xlPivotTableVersion14[/color][/Surligner]
    Sheets("Feuil5").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
        "childCode")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
        "Costing availability")
        .Orientation = xlRowField
        .Position = 2
    End With
    ActiveSheet.PivotTables("Tableau croisé dynamique2").CalculatedFields.Add _
        "Champ1", "= 0", True
    ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Champ1"). _
        Orientation = xlDataField
    ActiveSheet.PivotTables("Tableau croisé dynamique2").AddDataField ActiveSheet. _
        PivotTables("Tableau croisé dynamique2").PivotFields("childCode"), _
        "Nombre de childCode", xlCount
End Sub

Ce code que j'ai obtenu, ne marche pas systématiquement, lorsque je lance la macro. Je ne sais pas pourquoi, ma macro bloque toujours sur la parti surligner de mon code. Eh c'est la que je demande votre aide à comprendre et corriger mon erreur. Je vous remercie par avance

Bonjour,

Ta procédure est statique car enregistrée avec l'enregistreur de macros.

Joins un petit classeur pour la création TCD qui prendra en compte des données variables.

Cdlt.

Bonjour Jean-Eric,

Je vous remercie vous et 78chris pour votre aide. J'ai finalement réussi à obtenir ce que je voulais. Je met une partie du code que j'ai obtenu jusqu'ici ci-dessous pour ceux qui un jour rencontrerai le même problème:

Sub ouvre_copie_colle()
'
'
' Touche de raccourci du clavier: Ctrl+a
'
' déclaration des variables

  Dim wB As Workbook
    Dim ws As Worksheet
    Dim dl As Long
    dl = Cells(Application.Rows.Count, 1).End(xlUp).Row
    Dim my_FileName As Variant
' ouvrir un fichier source sur le serveur
    my_FileName = Application.GetOpenFilename

    If my_FileName <> False Then

    Set wB = Workbooks.Open(Filename:=my_FileName)
    End If
' aller sur un onglet défini
    Sheets(" Detail").Activate
'selectionner et copier une plage de donnée
  Range("B2:X" & dl).Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy

' ouvrir le fichier excel d'analyse
ThisWorkbook.Activate
Range("A1").Select
' coller la plage de donnée copier dans le fichier template
ActiveSheet.Paste
'fermer le fichier source
wB.Close SaveChanges:=False
Range("A1:V6510").Select

'creer un onglet et le renommer
Sheets(" Detail").Select
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = "analyse"
    'Cells.Select
    Sheets(" Detail").Select
    Range("A1").Select

   ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Detail!R2C1:R3063C44", Version:=xlPivotTableVersion14). _
        CreatepivotTable TableDestination:="Analyse!R3C1", TableName:= _
        "Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion14
 Sheets("Analyse").Select

 With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("code")
     .Orientation = xlRowField
     .Position = 1
 End With

    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
        "qty")
        .Orientation = xlRowField
        .Position = 2
    End With
    ActiveSheet.PivotTables("Tableau croisé dynamique1").CalculatedFields.Add _
        "Champ1", "= 0", True
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Champ1"). _
        Orientation = xlDataField
    ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
        PivotTables("Tableau croisé dynamique1").PivotFields("Code"), _
        "Nb Code", xlCount '
        End Sub

merci

Rechercher des sujets similaires à "creation graphique croise dynamique vba 2010"