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 :

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
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
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
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...

Une idée ?

Merci d'avance !!