1 pièce(s) jointe(s)
Condition If ne fonctionne pas
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:
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 |