[VBA] Alléger une macro avec gestion d'erreur

Bonjour à tous,

A partir d'une page de synthèse, je veux afficher grâce à ma macro une page de détail où se trouve mes données brutes, triées dans le tableau "Tableau_Corrections".

Parfois, l'utilisateur peut laisser un filtre actif et quitter la page de détail, parfois non.

C'est dans ce deuxième cas que l'instruction ActiveSheet.ShowAllData peut renvoyer une erreur.

Y'a -t-il une écriture prenant moins de place que celle ci-dessous pour gérer ce type d'erreur ? (est-on obligé de recopier deux fois les instructions relatives au filtre ?)

Sub Corrections_Blablabla123 ()

Application.ScreenUpdating = False

Sheets("Détails_corrections").Visible = True
Sheets("Détails_corrections").Select

    On Error GoTo Sipasdefiltre
ActiveSheet.ShowAllData
    ActiveSheet.ListObjects("Tableau_Corrections").Range.AutoFilter Field:=14, Criteria1:="Blablabla1"
    ActiveSheet.ListObjects("Tableau_Corrections").Range.AutoFilter Field:=16, Criteria1:="Blablabla2"
    ActiveSheet.ListObjects("Tableau_Corrections").Range.AutoFilter Field:=17, Criteria1:="Blablabla3"

Sipasdefiltre:
   ActiveSheet.ListObjects("Tableau_Corrections").Range.AutoFilter Field:=14, Criteria1:="Blablabla1"
    ActiveSheet.ListObjects("Tableau_Corrections").Range.AutoFilter Field:=16, Criteria1:="Blablabla2"
    ActiveSheet.ListObjects("Tableau_Corrections").Range.AutoFilter Field:=17, Criteria1:="Blablabla3"

Application.ScreenUpdating = True

End Sub

Merci d'avance

Une petite aide serait la bienvenue, je suis sûr qu'on peut écrire une seule fois les 3 lignes de tri...

Svp

Bonjour,

Essaie :

Sub Corrections_Blablabla123 ()
Application.ScreenUpdating = False
Sheets("Détails_corrections").Visible = True
Sheets("Détails_corrections").Select
On Error Resume next
ActiveSheet.ShowAllData
    ActiveSheet.ListObjects("Tableau_Corrections").Range.AutoFilter Field:=14, Criteria1:="Blablabla1"
    ActiveSheet.ListObjects("Tableau_Corrections").Range.AutoFilter Field:=16, Criteria1:="Blablabla2"
    ActiveSheet.ListObjects("Tableau_Corrections").Range.AutoFilter Field:=17, Criteria1:="Blablabla3"
End Sub

A+

Bonjour,

essaie :

With ActiveSheet
    If .AutoFilterMode And .FilterMode Then .ShowAllData
End with

eric

Galopin01 et eriiic merci pour vos réponses, les deux fonctionnent et je ne sais laquelle choisir

Re,

ActiveSheet.ShowAllData plante si tu n'as pas de filtre actif.

Je teste s'il y en a un avant de le désactiver.

eric

Bonjour eriiic,

Effectivement, ta solution est plus propre (et c'est celle que j'utilise) même si en utilisant On Error Resume Next cela fonctionne aussi avec ActiveSheet.ShowAllData ...

Merci en tout cas de vos réponses

Ah oui, je n'avais pas vu le on error

Tu n'as pas a te retenir de l'utiliser si ça simplifie le code.

Mais rajoute on error goto 0 après l'instruction concernée pour récupérer la supervision des erreurs ensuite (à moins d'être sûr de ne pas en avoir besoin comme ici, c'est restauré après le end sub).

eric

Rechercher des sujets similaires à "vba alleger macro gestion erreur"