Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Macro pour enlever les filtres mais laisser la possibilité de filtrer avant fermeture

Daniel200666

XLDnaute Occasionnel
Bonsoir à tous
j'ai avec l'aide de certains d'entre vous créer une macro pour "défiltrer" le fichier avant fermeture; dans la mesure où le fichier est multi-utilisateurs car partagé, cela permet à chacun de récupérer un fichier non filtré à chaque fois:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Ws As Worksheet
For Each Ws In Worksheets
If Ws.AutoFilterMode = True Then Ws.AutoFilterMode = False
Next
Sheets(1).Activate
End Sub



en revanche, est-il possible, en complément de la macro ci dessus, de conserver le petit sigle sur chaque colonne, afin que chaque utilisateur ne retourne pas sur "Accueil" >>> "Filtrer" à chaque fois ? je pense que c'est quelque chose sur la ligne en rouge mais je ne vois pas comment la rédiger

Merci de votre aide

Bien à vous et bonne soirée
 

Daniel200666

XLDnaute Occasionnel
Merci beaucoup pour ces réponses qui m'ont effectivement bien aidé
bonne fin de journée !!
 

TooFatBoy

XLDnaute Barbatruc
Est-ce que ça fonctionne chez toi ?

Chez moi ça ne fonctionne que s'il y a au moins un filtrage en cours.
Sinon ça provoque une erreur, donc obligé d'ajouter un On Error Resume Next :
VB:
Sub Defiltrage()
'
Dim Ws As Worksheet

    On Error Resume Next
    For Each Ws In Worksheets
        If Ws.AutoFilterMode = True Then
            Ws.ShowAllData
        End If
    Next
    On Error GoTo 0

    Sheets(1).Activate

End Sub
 

Nain porte quoi

XLDnaute Junior
J'ai écrit "en mode cochon" et c'était en fait du "gros cochon"

Le On Error Resume Next masque toutes les erreurs, ça n'est pas vraiment une bonne solution
voici la macro en mode "moins cochon"
VB:
Sub Defiltrage()
    Dim Ws As Worksheet
    
    For Each Ws In Worksheets
        If Ws.AutoFilterMode Then
    
            For i = 1 To Ws.AutoFilter.Filters.Count
                If Ws.AutoFilter.Filters(i).On Then
                    Ws.ShowAllData
                    Exit For
                End If
            Next i
        
        End If
    
    Next Ws
    Sheets(1).Activate
End Sub

Ca devrait fonctionner un peu mieux et c'est quand même plus propre.
 

Nain porte quoi

XLDnaute Junior
Oups, désolé pour le malaise vagal provoqué ; Le exit for il n'est pas du tout obligatoire c'est juste pour gagner quelques pouillèmes de seconde car une fois que toutes les données sont affichées il ne sert plus à rien de chercher si d'autres colonnes sont filtrées.

...et le "plus propre" c'était par rapport à un "on error resume next"

j'aurais du/pu déclarer proprement les variables aussi
 

TooFatBoy

XLDnaute Barbatruc
Si vous testez avec des tableaux structurés vous devriez vous apercevoir que ShowAllData ne fonctionne pas correctement.
Je ne savais pas ça. Merci pour l'information.

Mais ici ça n'a aucune importance vu qu'il ne peut pas utiliser les Tableaux Structurés.
Alors, si ça fonctionne sans les TS c'est le principal.
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…