VBA - Valeur champs TCD si la valeur testée n'existe pas

lolo62000

XLDnaute Junior
Bonjour,
J'ai une macro qui me permet de sélectionner une même valeur dans les champs portant le même nom de tous mes TCD sur une même page. Mon problème, si je rentre une valeur qui est absente dans un des filtres des TCD, alors le filtre se met à "TOUS".
Je souhaiterais vérifier si la valeur est présente dans les filtres des TCD. Si elle est présente, alors on filtre avec le filtre sélectionné, si elle est absente, alors, on filtre avec la valeur "Vide", et on teste le TCD suivant.
Pouvez-vous m'aider à éclaircir la partie en vert, car là je sèche sévère après des heures de recherche... :(

Private Sub CommandButton1_Click()
ActiveSheet.Range("L17") = Analyste3
Dim PT As PivotTable
x = ActiveSheet.Range("L17").Value

Set PT4 = ActiveSheet.PivotTables("Tableau croisé dynamique4")
Set PT6 = ActiveSheet.PivotTables("Tableau croisé dynamique6")
Set PT8 = ActiveSheet.PivotTables("Tableau croisé dynamique8")
Set PT9 = ActiveSheet.PivotTables("Tableau croisé dynamique9")
Set PT10 = ActiveSheet.PivotTables("Tableau croisé dynamique10")
With PT4
.PivotCache.Refresh
.PivotFields("Analyste").CurrentPage = "(Tous)"
'If x <> "" Then
.PivotFields("Analyste").CurrentPage = x
'If x = "" Then
'.PivotFields("Analyste").CurrentPage = "(Vide)"

End If
End If
End With

With PT6
.PivotCache.Refresh
.PivotFields("Analyste").CurrentPage = "(Tous)"
.PivotFields("Analyste").CurrentPage = x
End With

With PT8
.PivotCache.Refresh
.PivotFields("Analyste").CurrentPage = "(Tous)"
.PivotFields("Analyste").CurrentPage = x
End With

With PT9
.PivotCache.Refresh
.PivotFields("Analyste").CurrentPage = "(Tous)"
.PivotFields("Analyste").CurrentPage = x
End With

With PT10
.PivotCache.Refresh
.PivotFields("Analyste").CurrentPage = "(Tous)"
.PivotFields("Analyste").CurrentPage = x
End With


ActiveWorkbook.RefreshAll
Unload UserForm8
End Sub

Merci,
Laurent.
 

chris

XLDnaute Barbatruc
Re : VBA - Valeur champs TCD si la valeur testée n'existe pas

Bonjour

Si la source est dans le classeur, il est plus simple et plus fiable de vérifier si la valeur existe dans la source du TCD par un find sinon il faut une boucle qui teste toutes les valeurs du champ.

Selon le nombre de cas, cela peut prendre du temps et de plus le champ peut exister dans le filtre et plus dans la source...
 

lolo62000

XLDnaute Junior
Re : VBA - Valeur champs TCD si la valeur testée n'existe pas

Salut,
finalement j'ai trouvé une alternative à mon problème, en mettant les ("Tous") à ("Blank") de cette façon:
.PivotFields("Analyste").CurrentPage = "(Tous)"...
De cette façon, si il n'y a pas de données dans le filtre, le filtre ne donne aucun résultat.
Car en effet, si je fait une boucle, sur chaque tableau, pour une quarantaien de données possibles, ça va être très long je pense.
Merci,
Bonne journée.
 

Discussions similaires

Réponses
12
Affichages
706

Statistiques des forums

Discussions
315 096
Messages
2 116 184
Membres
112 677
dernier inscrit
Justine11