Je dispose d'une feuille contenant plusieurs TCD, dont je veut appliquer le même filtre (filtre par client). Pour ce, j'utilise un code par lequel je fais le choix du filtre sur un seul des TCD (dont la valeur se trouve dans la cellule B2), et dont l'application doit se faire automatiquement sur les autres :
Code:
Dim pvt As PivotTable
For Each pvt In ActiveSheet.PivotTables
pvt.PivotFields("Client").CurrentPage = Cells(2, 2).Value
Next
End Sub
Je voudrais alors que le code s'exécute automatiquement lorsque je fais le choix sur la liste, pour ce j'ai eu recours à l'évènement Worksheet_Change
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim pvt As PivotTable
If Target.Address = "$B$2" Then
For Each pvt In ActiveSheet.PivotTables
pvt.PivotFields("Client").CurrentPage = Cells(2, 2).Value
Next
End Sub
le problème c'est que quand je fais un nouveau choix le code ne s'exécute pas automatiquement, j'avoue que je n'arrive pas à cerner l'erreur.
Re : [Worksheet_Change]: Le code ne se déclenche pas automatiquement
Salut Arvensis et le forum
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'...
If Target.Address = "$B$2" Then
'.....
End Sub
Foctionnera si tu modifies le contenu de B2. Pas la valeur.
Donc, si B2 : =A1, et que tu modifies A1, ta macro détectera que Target = A1 et ton problème vient peut-être de là.
Met un point d'arrêt sur la ligne de titre, et regarde ce qui se passe en pas -à-pas. Si le problème vient bien de là, 2 solutions :
on teste l'adresse de target
- soit comme A1 (dans mon exemple).
- soit comme faisant partie des antécédents de la formule en B2 : ex
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Set Plage = Intersect(Target, Range("B2").Precedents)
If Not (Plage Is Nothing) Then MsgBox Plage.Address(0, 0)
End Sub