Reset filtre a la fermeture
Bonjour,
Problème simple mais je ne trouve pas la solution.
J'ai des tableaux dans différentes feuilles, que l'on peut trier et filtrer.
J'aimerais rajouter a ma ligne de code qui verrouille mes feuilles avant de fermer le fichier, une ligne de code qui Reset les filtres des tableaux.
J'ai essayé en vain avec le code suivant:
Sheets("Procéd").Select
On Error Resume Next
ActiveSheet.ShowAllData
On Error GoTo 0
ActiveSheet.Protect ("mdp"), DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True
Je n'ai pas d'erreur mais cela ne fonctionne pas.
Une idée ?
merci d'avance !
Bonjour,
Pour l'écrire un peu plus correctement...
With Worksheets("Procéd")
If .FilterMode Then .ShowAllData
.Protect "mdp", True, True, True, AllowSorting:=True, AllowFiltering:=True
End With
Pour voir ce qui ne va pas, il faut voir le classeur...
Bonjour,
J'ai testé avec votre code toujours pas d'erreur mais cela ne fonctionne pas...
J'ai mis le classeur.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.ScreenUpdating = False
With Worksheets("Procéd")
.Unprotect "iso"
If .FilterMode Then .ShowAllData
.Protect "iso", True, True, True, AllowSorting:=True, AllowFiltering:=True
End With
'[...]
A poursuivre sur ce modèle pour le reste de la procédure... T'en inspirer pour faire disparaître tous les Select, et alléger les expressions...
Cordialement.
Merci ,
Mais oui il y a un mais
Je ferme le doc je sauvegarde... je l'ouvre a nouveau les filtres sont toujours la..
en exemple dans l'onglet procéd, ne cochez que la case Achat fermez et rouvrez le doc en ayant modifié le code comme ci dessous.
Sheets("Procéd").Select
With Worksheets("Procéd")
.Unprotect "iso"
If .FilterMode Then .ShowAllData
.Protect "iso", True, True, True, AllowSorting:=True, AllowFiltering:=True
End With
Sheets("Instru").Select
With Worksheets("Instru")
.Unprotect "iso"
If .FilterMode Then .ShowAllData
.Protect "iso", True, True, True, AllowSorting:=True, AllowFiltering:=True
End With
Sheets("Formu").Select
With Worksheets("Formu")
.Unprotect "iso"
If .FilterMode Then .ShowAllData
.Protect "iso", True, True, True, AllowSorting:=True, AllowFiltering:=True
End With
Sheets("Feuil2").Select
With Worksheets("Feuil2")
.Unprotect "iso"
If .FilterMode Then .ShowAllData
.Protect "iso", True, True, True, AllowSorting:=True, AllowFiltering:=True
End With
'retour à la page d'accueil
Sheets("Accueil").Select
Range("a1").Select
ActiveWindow.DisplayWorkbookTabs = False
Application.ScreenUpdating = True
End Sub
Toujours le filtre actif quand je retourne dans l'onglet procéd..
Pas chez vous ?
Ta procédure étant l'évènement BeforeSave, il te suffit d'enregistrer pour constater que ton tableau est défiltré !
NB- Décidément, c'est dur de faire renoncer aux Select !
Re,
J'ai testé avec ce code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.ScreenUpdating = False
With Worksheets("Procéd")
.Unprotect "iso"
If .FilterMode Then .ShowAllData
.Protect "iso", True, True, True, AllowSorting:=True, AllowFiltering:=True
End With
'retour à la page d'accueil
ActiveWindow.DisplayWorkbookTabs = False
Application.ScreenUpdating = True
End Sub
Auparavant j’applique un filtre dans l'onglet procèd sur la colonne service en ne cochant que "commerce" par exemple.
J'enregistre et je constate que le filtre reste affiché il n'y a que 'commerce" et non les autres services qui s'affichent^, même en ferment et rouvrant le fichier "doc test."
Un éclaircissement ? peut être ? je m'excuse du dérangement..
Je ne peux que te confirmer que je constate le contraire dans les mêmes conditions : le défiltrage est immédiat.
Au constat que chez moi cela ne fonctionne pas... la solution donnée par Fernand.
J'ai trouvé une autre solution pour les intéressés celle-ci fonctionne pour moi :
ActiveSheet.ListObjects("procédure").Range.AutoFilter Field:=1
Ps: Désolé pour les ".select" ^^
Merci encore
Bonjour,
Une participation tardive à la question posée.
Cordialement.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Name
Case "Procéd", "Instru", "Formu", "Feuil2"
With ws
.Unprotect Password:="iso"
If .ListObjects(1).AutoFilter.FilterMode Then _
.ListObjects(1).AutoFilter.ShowAllData
.Protect Password:="iso", _
AllowSorting:=True, _
AllowFiltering:=True
End With
Case Else
'
End Select
Next ws
With ThisWorkbook.Worksheets("Accueil")
.Activate
.[A1].Select
End With
ActiveWindow.DisplayWorkbookTabs = False
End Sub
Jean-Eric a écrit :Bonjour,
Une participation tardive à la question posée.
Cordialement.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim ws As Worksheet Application.ScreenUpdating = False For Each ws In ThisWorkbook.Worksheets Select Case ws.Name Case "Procéd", "Instru", "Formu", "Feuil2" With ws .Unprotect Password:="iso" If .ListObjects(1).AutoFilter.FilterMode Then _ .ListObjects(1).AutoFilter.ShowAllData .Protect Password:="iso", _ AllowSorting:=True, _ AllowFiltering:=True End With Case Else ' End Select Next ws With ThisWorkbook.Worksheets("Accueil") .Activate .[A1].Select End With ActiveWindow.DisplayWorkbookTabs = False End Sub
Solution Propre Merci