[Worksheet_Change]: Le code ne se déclenche pas automatiquement

Arvensis

XLDnaute Nouveau
Bonjour;

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.

Je sollicite votre aide, merci d'avance.
 
Dernière édition:

Arvensis

XLDnaute Nouveau
Re : [Worksheet_Change]: Le code ne se déclenche pas automatiquement

Oui j'ai mis le code dans le module de feuille en question, pour le Endsub c'était juste une erreur de copie.


j'ai essayé de mettre le code dans un bouton, là il marche impeccablement lorsque j'appuie dessus !

vraiment bizarre!
 

Gorfael

XLDnaute Barbatruc
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
A+
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou