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