Bonjour,
Je souhaite créer un TCD par une macro en consolidant les données provenant d'une seule feuille, ce qui est assez bizarre je l'avoue. Je suis obligé de procéder comme cela car plusieurs colonnes ont le même intitulé, et je veux les réunir (voir l'image ici, on prend les données à partir de B3).
Je suis passé par l'enregistreur de macro, qui m'a donné le code suivant :
J'ai voulu l'adapter de façon à supprimer puis recréer le TCD à partir des données d'une autre feuille, après appui sur un bouton (voir l'image ici, le tcd est déjà créé) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:=Array("'Feuille d''heure (27)'!R3C2:R28C67"), Version:=xlPivotTableVersion10).CreatePivotTable TableDestination:="'[Feuilled''heuresAlexandre2009-2010.xls]Stat_semaine'!R57C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTables("Tableau croisé dynamique1").DataPivotField.PivotItems("Nombre de Valeur").Position = 1 With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Colonne") .Orientation = xlRowField .Position = 2 End With With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Ligne") .Orientation = xlColumnField .Position = 1 End With
Seulement ça ne marche pas, j'ai éssayé en changeant database par bdd, en supprimant "Array("... mais rien à faire, ça bloque sur la ligne de création du TCD...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Dim database As Object Dim tcd As String Dim semaine As String Dim bdd As String tcd = ActiveSheet.Name 'ActiveSheet.PivotTables("TCD_semaine").PivotSelect "", xlDataAndLabel, True 'Selection.Clear semaine = Cells(1, 2).Value Sheets(semaine).Select Set database = Range(Cells(3, 2).End(xlDown), Cells(3, 2).End(xlToRight)) bdd = "'" & semaine & "'!R3C2:R" & (database.Rows.Count + 2) & "C" & (database.Columns.Count + 1) Sheets(tcd).Select ' voila ce que je souhaite remplacer : SourceData:="'Feuille d''heure (27)'!R3C2:R45C67" ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:=Array(database), Version:=xlPivotTableVersion10).CreatePivotTable TableDestination:=ActiveSheet.Cells(57, 1), TableName:="TCD_semaine", DefaultVersion:=xlPivotTableVersion10 With ActiveSheet.PivotTables("TCD_semaine").PivotFields("Colonne") .Orientation = xlRowField .Position = 2 End With With ActiveSheet.PivotTables("TCD_semaine").PivotFields("Ligne") .Orientation = xlColumnField .Position = 1 End With With ActiveSheet.PivotTables("TCD_semaine").PivotFields("Nombre de Valeur") .Caption = "Somme de Valeur" .Function = xlSum End With
Une idée ?
Merci d'avance !!
Partager