Modifier source TCDs
G
Bonjour à tous,
Je cherche à mettre à jour la source des TCD lorsque le Range de la source est censé évoluer, mais, malgré le rafraichissement correct des TCD lorsque les données se vident, je n'arrive pas à faire prendre en compte l'agrandissement du Range due à l'ajout de données. Du coup les TCD se rafraichissent mais le Range de la source ne semble pas évoluer.
Sub TEST()
Dim ws As Worksheet
Dim wsData As Worksheet
Dim wsPT As Worksheet
Dim lastCol As Long, LastRow As Long
Dim rngPT As Range
Dim PCache As PivotCache
Dim PT As PivotTable
Set wsData = Worksheets("Combined Table")
Set wsPT = Worksheets("Calculation")
With wsData
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row - 1
Set rngPT = .Cells(2, 1).Resize(LastRow, 61)
End With
Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rngPT.Address)
'ActiveWorkbook.PT.ChangePivotCache ActiveWorkbook. _
'PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rngPT.Address, _
'Version:=xlPivotTableVersion15)
'Pour la partie ci-dessus j'ai toujours des codes d'erreur "Object does not support this property or method".
For Each PT In wsPT.PivotTables
PT.SourceData = address_source
PT.PivotCache.Refresh
Next PT
End Sub
A la base j'ai créé les TCD ainsi :
Dim wsData As Worksheet
Dim wsPT As Worksheet
Dim lastCol As Long, LastRow As Long
Dim rngPT As Range
Dim PCache, PCache1 As PivotCache
Dim PT, PT2, PT3, PT4, pT5, PT6, PT7 As PivotTable
Set wsData = Worksheets("Combined Table")
Set wsPT = Worksheets("Calculation")
With wsData
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row - 1
Set rngPT = .Cells(2, 1).Resize(LastRow, 61)
End With
wsData.Activate
Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rngPT.Address)
Set PT = PCache.CreatePivotTable(TableDestination:="Calculation!R1C1", TableName:="TCD_1")
Set PT2 = PCache.CreatePivotTable(TableDestination:="Calculation!R20C1", TableName:="TCD_2")
Set PT3 = PCache.CreatePivotTable(TableDestination:="Calculation!R40C1", TableName:="TCD_3")
Set PT4 = PCache.CreatePivotTable(TableDestination:="Calculation!R60C1", TableName:="TCD_4")
Set pT5 = PCache.CreatePivotTable(TableDestination:="Calculation!R80C1", TableName:="TCD_5")
Set PT6 = PCache.CreatePivotTable(TableDestination:="Calculation!R100C1", TableName:="TCD_6")
Set PT7 = PCache.CreatePivotTable(TableDestination:="Calculation!R120C1", TableName:="TCD_7")
Merci bien de m'éclairer.
Bonjour,
Peux-tu envoyer un fichier avec des données (quelques lignes suffisent avec l'ensemble de tes procédures (de test) ?
Cdlt.
G
Re,
Merci de la réponse.
J'ai modifié cela et ça fonctionne :
Dim address_source As String
Ajouté cela aussi :
rngPT.Name = "address_source"
Où rngPT est le range définissant la source des données.
For Each PT In wsPT.PivotTables
PT.SourceData = "address_source"
PT.PivotCache.Refresh
Next PT