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

Daniel200666

XLDnaute Junior
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
 

job75

XLDnaute Barbatruc
Bonsoir Daniel20666,

Si je comprends bien vous voulez que les boutons des filtres restent affichés.

Il n'y a pas de problème si les tableaux sont des tableaux structurés :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Ws As Worksheet, LO As ListObject
For Each Ws In Worksheets
    For Each LO In Ws.ListObjects 'tableaux structurés
        With LO.Range
            .AutoFilter
            .AutoFilter
        End With
Next LO, Ws
Sheets(1).Activate
Me.Save 'enregistre le fichier
End Sub
A+
 

Daniel200666

XLDnaute Junior
Bonsoir Daniel20666,

Si je comprends bien vous voulez que les boutons des filtres restent affichés.

Il n'y a pas de problème si les tableaux sont des tableaux structurés :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Ws As Worksheet, LO As ListObject
For Each Ws In Worksheets
    For Each LO In Ws.ListObjects 'tableaux structurés
        With LO.Range
            .AutoFilter
            .AutoFilter
        End With
Next LO, Ws
Sheets(1).Activate
Me.Save 'enregistre le fichier
End Sub
A+
Bonjour @job75
Merci beaucoup pour ce retour qui fonctionne mais qui perturbe certains collaborateurs qui trouvent cela moins pratique qu'avec l'ancienne version du fichier et donc de la macro
auparavant, et ce qui convenait à la majorité ( je vais essayer d'être clair, ce qui est peu évident pour un utilisateur comme moi...)
- j'ouvre le fichier avec les boutons de filtre déjà affichés
- je filtre par exemple sur moi, collaborateur pour voir où j'en suis de mon portefeuille
- je traite ce que j'ai à faire...bref....
- je clique sur la croix de fermeture du fichier et tout se défiltre automatiquement
- je confirme l'enregistrement

A ce stade, aujourd'hui sur mon fichier, lorsque je sors, et que je rappelle le fichier, les boutons de filtre ont disparu
comment pourrais je avoir le process précédent mais en rappelant le dossier, avoir à nouveau les boutons de filtre

désolé @job75 si mes explications ne sont pas claires et merci en tout cas de l'intérêt porté
j'ai mis un nouveau fichier avec la macro actuelle pour montrer ce qu'il en est
 

Pièces jointes

  • tableau pour Excel Downloads v2.xlsm
    23.4 KB · Affichages: 4

TooFatBoy

XLDnaute Barbatruc
je vais regarder mais possible; je vais aussi structurer le fichier, ce qui devrait effectivement figer les filtres à l'ouverture
La proposition de job75 me paraît infiniment meilleure si tu ne fais pas partager ton classeur par Excel car, si je me souviens bien du fonctionnement d'Autofilter, le premier Autofilter supprime les filtres et le deuxième les remet.
Donc les flèches de filtrage devraient être présentes à la réouverture du classeur.
 

Daniel200666

XLDnaute Junior
La proposition de job75 me paraît infiniment meilleure si tu ne fais pas partager ton classeur par Excel car, si je me souviens bien du fonctionnement d'Autofilter, le premier Autofilter supprime les filtres et le deuxième les remet.
Donc les flèches de filtrage devraient être présentes à la réouverture du classeur.

Oui cela fonctionne mais lorsque la feuille est protégée et le classeur partagé, cela fonctionne t il? j'ai l'impression que non ....
 

Daniel200666

XLDnaute Junior
Oui cela fonctionne mais lorsque la feuille est protégée et le classeur partagé, cela fonctionne t il? j'ai l'impression que non ....

Il serait plus que surprenant que job75 publie une proposition qui ne fonctionne pas.

Que veux-tu dire par "classeur partagé" ???
Tu veux dire "partagé par Excel", ou simplement "disponible sur un serveur commun" ?
Oui partagé par Excel; onglet Révision puis Partagé la classeur; j'ai aussi mis un mot de passe sur la feuille pour éviter que les collaborateurs aillent sur certaines colonnes reprenant des formules
j'espère être assez clair!! (désolé)
 

TooFatBoy

XLDnaute Barbatruc
Quand c'est, comme dans ton cas, Excel qui partage le classeur, il est impossible de déprotéger une feuille par macro, et il est impossible d'utiliser des Tableaux Structurés (mais on peut utiliser des plages nommées).

Voir si Excel 365 partage les classeurs de la même façon que les versions précédentes ou s'il y a eu une amélioration à ce niveau.
 

Daniel200666

XLDnaute Junior
Quand c'est, comme dans ton cas, Excel qui partage le classeur, il est impossible de déprotéger une feuille par macro, et il est impossible d'utiliser des Tableaux Structurés (mais on peut utiliser des plages nommées).

Voir si Excel 365 partage les classeurs de la même façon que les versions précédentes ou s'il y a eu une amélioration à ce niveau.

oui a priori, pas possible car même problème sur 365 que sur les anciennes versions .... merci à vous deux en tout cas pour votre aide et bonne soirée
 

TooFatBoy

XLDnaute Barbatruc
Du coup tester ceci, qui fonctionne uniquement si dans chacune des feuilles la cellule B2 fait partie des cellules d'en-tête du tableau à filtrer... :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'
Dim Ws As Worksheet

    For Each Ws In Worksheets
        If Ws.AutoFilterMode = True Then
            Ws.AutoFilterMode = False
            Ws.Range("B2").AutoFilter
        End If
    Next

    Sheets(1).Activate

End Sub
 

Nain porte quoi

XLDnaute Junior
Hello,

je m'immisce, y'a un truc que je ne pige pas :
TooFatBoy à proposé "Est-ce qu'un .ShowAllData pourrait convenir ??" et il semblerait qu'il n'y ait pas eue de réponse alors qu'il me semble que c'est "la" bonne façon de faire au lieu d'espérer que les données soient toujours à la même place, non ?

en mode cochon je remplacerai juste Ws.AutoFilterMode = False par Ws.ShowAllData
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Ws As Worksheet
For Each Ws In Worksheets
If Ws.AutoFilterMode = True Then Ws.ShowAllData
Next
Sheets(1).Activate
End Sub
la seule différence c'est l'affichage de toutes les données au lieu de supprimer le filtre (et de devoir le remettre à la prochaine ouverture)
 

Discussions similaires

Statistiques des forums

Discussions
313 195
Messages
2 096 102
Membres
106 496
dernier inscrit
jeremy14