Bonjour,
J'ai réalisé une procédure afin de récupérer les champs d'un tableau croisé dynamique. Je souhaite récupérer les champs des zones Ligne et Colonne du TCD dans un premier tableau vba (ChAxe), puis les champs de la zone Valeur du TCD dans un second tableau vba (ChVal) (sous forme "Somme de champs" "Moyenne de champs" etc)
Toutefois lorsque je rédige la condition sous cette forme : PivotFields("Somme de " & champs), le programme s'exécute comme s'il n'y avait pas de if ce qui créé une erreur lorsque le champs n'est pas dans le TCD.
(sous cette forme : PivotFields(champs), le If fonction normalement mais ça ne me permet pas d'obtenir les champs de la zone Valeur du TCD..)
Merci pour votre aide,
Cordialement
Voici mon code :
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 Sub ChampsTCD() Dim n As Integer Dim m As Integer Dim PT As PivotTable Dim PF As PivotField Dim PFnom As String Dim ChAxe() As String Dim ChVal() As String n = 0 m = 0 Set PT = Worksheets("Feuil2").PivotTables("tcd1") For Each PF In PT.PivotFields If PT.PivotFields(PF.Name).Orientation = xlColumnField _ Or PT.PivotFields(PF.Name).Orientation = xlRowField Then n = n + 1 ReDim Preserve ChAxe(1 To n) ChAxe(n) = PF.Name ElseIf PT.PivotFields("Somme de " & PF.Name).Orientation = xlDataField Then m = m + 1 ReDim Preserve ChVal(1 To m) ChVal(m) = "Somme de " & PF.Name ElseIf PT.PivotFields("Nombre de " & PF.Name).Orientation = xlDataField Then m = m + 1 ReDim Preserve ChVal(1 To m) ChVal(m) = "Nombre de " & PF.Name ElseIf PT.PivotFields("Moyenne de " & PF.Name).Orientation = xlDataField Then m = m + 1 ReDim Preserve ChVal(1 To m) ChVal(m) = "Moyenne de " & PF.Name ElseIf PT.PivotFields("Max. de " & PF.Name).Orientation = xlDataField Then m = m + 1 ReDim Preserve ChVal(1 To m) ChVal(m) = "Max de " & PF.Name ElseIf PT.PivotFields("Min. de " & PF.Name).Orientation = xlDataField Then m = m + 1 ReDim Preserve ChVal(1 To m) ChVal(m) = "Min de " & PF.Name ElseIf PT.PivotFields("Produit de " & PF.Name).Orientation = xlDataField Then m = m + 1 ReDim Preserve ChVal(1 To m) ChVal(m) = "Produit de " & PF.Name End If Next PF End Sub






Répondre avec citation





Partager