Modification code VBA

Bonjour à tous,

Encore une fois, je me tourne vers vous car je ne n'ai pas trouvé ma réponse.

J'ai un code qui me permet de changer un filtre de TCD. Mais mon code ne fonctionne plus car le TCD n'est pas nommé. Et maintenant que j'ai plusieurs TCD dans le fichier, forcément il ne sait plus où travailler.

On m'a suggérer d'ajouter quelque chose du genre dans le code: If Pt.Name <> 'Inventaire_dynamique' Then Return

Mais je n'ai pas réussi à l'écrire, ou à le mettre au bon endroit.

Merci d'avance pour votre aide

Voici le code.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$M$9" Then Exit Sub   ' Changement du filtre du TDC par choix de centrale

    Dim Sh As Worksheet, Pt As PivotTable
    Dim Apparence, TypeDeBox As VbMsgBoxStyle

    For Each Sh In Worksheets
        For Each Pt In Sh.PivotTables
            On Error GoTo NoColumn

            With Pt.PivotFields("Centrale")
                .ClearAllFilters
                .CurrentPage = Target.Value
            End With
        Next Pt
    Next Sh

    Exit Sub
NoColumn:
         'On utilisera l'Apparence suivante :
Apparence = vbCritical
'et un TypeDeBox suivant :
TypeDeBox = vbApplicationModal 'par défaut.
'pour toutes les msgbox qui vont suivre.

            MsgBox "Aucune pièce pour cette centrale, modifier la liste déroulante.", vbCritical, "Stock centrale"

End Sub

Bonjour,

Quand tu vas sur un TCD, tu as la possibilité de le renommer.

Si tu renommes le bon TCD "centrale", ça devrait le faire, non ?

Le TCD en lui même est déjà nommé "Inventaire_dynamique".

"Centrale" est seulement le nom de l’en-tête qui filtre les données par le code.

La cellule M9 du code est dans une autre feuille.

Donc en faisant varier la cellule M9 en feuille 1, le code fait changer le filtre "centrale" de la feuille 3 où se trouve le TDC "Inventaire_dynamique".

Mais j'ai créé d'autre TCD depuis, et du coup, il y a conflit. Je ne sais pas où je dois nommer mon TCD dans le code.

À tout hasard, tu peux essayer cela :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$M$9" Then Exit Sub   ' Changement du filtre du TDC par choix de centrale

    Dim Sh As Worksheet, Pt As PivotTable
    Dim Apparence, TypeDeBox As VbMsgBoxStyle

    For Each Sh In Worksheets
        For Each Pt In Sh.PivotTables
If Pt.Name = "Inventaire_dynamique" then
            On Error GoTo NoColumn

            With Pt.PivotFields("Centrale")
                .ClearAllFilters
                .CurrentPage = Target.Value
            End With
        Else: end if
Next Pt
    Next Sh

    Exit Sub
NoColumn:
         'On utilisera l'Apparence suivante :
Apparence = vbCritical
'et un TypeDeBox suivant :
TypeDeBox = vbApplicationModal 'par défaut.
'pour toutes les msgbox qui vont suivre.

            MsgBox "Aucune pièce pour cette centrale, modifier la liste déroulante.", vbCritical, "Stock centrale"

End Sub

Super merci ! ça fontionne !!

Rechercher des sujets similaires à "modification code vba"