Je crée un tableau croisé dynamique simple par VBA. Je ne sais pas ce qui ne va pas avec mon code. Mon code s'exécute sans erreur, mais le résultat est différent. Pourriez-vous s'il vous plaît me dire où est le problème dans mon code.
Sub CreatePivotTable()
Dim sht As Worksheet
Dim pvtCache As PivotCache
Dim pvt As PivotTable
Dim StartPvt As String
Dim SrcData As String
'Determine the data range you want to pivot
SrcData = ActiveSheet.Name & "!" & Range("A1:B53821").Address(ReferenceStyle:=xlR1C1)
'Create a new worksheet
Set sht = Sheets.Add
'Where do you want Pivot Table to start?
StartPvt = sht.Name & "!" & sht.Range("A1").Address(ReferenceStyle:=xlR1C1)
'Create Pivot Cache from Source Data
Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData)
'Create Pivot table from Pivot Cache
Set pvt = pvtCache.CreatePivotTable(TableDestination:=StartPvt, TableName:="PivotTable1")
pvt.PivotFields("Module").Orientation = xlRowField
pvt.PivotFields("KW").Orientation = xlColumnField
pvt.AddDataField pvt.PivotFields("Module"), "Anzahl von Module", xlCount
pvt.PivotFields("Module").PivotFilters.Add Type:=xlTopCount, DataField:=pvt.PivotFields("Anzahl von Module"), Value1:=12
End Sub
Si je le fais manuellement, c’est le résultat que j’obtiens et c’est ce que je veux à la fin.
Mon code me donne ce résultat. Ce qui est faux.
Je pense que votre problème est dans votre petite plage initiale avec seulement deux colonnes (A, B) et les dernières lignes de code
'Determine the data range you want to pivot
SrcData = ActiveSheet.Name & "!" & Range("A1:B53821").Address(ReferenceStyle:=xlR1C1)
Supposons que vous ayez votre nom dans la colonne A, appelez Module et que la colonne B indique KW avec un nombre (KW/h de votre module)
'Create Pivot table from Pivot Cache
Set pvt = pvtCache.CreatePivotTable(TableDestination:=StartPvt, TableName:="PivotTableTest")
pvt.AddDataField pvt.PivotFields("Module"), "Num Module", xlCount
pvt.PivotFields("Module").Orientation = xlColumnField ' not xlRowField
pvt.PivotFields("KW").Orientation = xlRowField ' not xlColumnField
Vous n'avez pas besoin de la dernière ligne.
Essayez d’ajouter xlRowField et xlColumnField after vous avez ajouté le champ calculé.
par exemple.
premier
pvt.AddDataField pvt.PivotFields("Module"), "Anzahl von Module", xlCount
puis
pvt.PivotFields("Module").Orientation = xlRowField
pvt.PivotFields("KW").Orientation = xlColumnField