web-dev-qa-db-fra.com

Excel crée un tableau croisé dynamique par VBA

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.

 enter image description here

Mon code me donne ce résultat. Ce qui est faux.

 enter image description here

5
Shan

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.

1
Pedro Polonia

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
0
macstoll