Microsoft 365 macro showAllData et mot de passe

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Daniel200666

XLDnaute Occasionnel
bonjour à tous

sur un fichier, j'avais mis en place une macro permettant d'enlever tous les filtres avant de fermer le dossier du type ShowAllData
Or, depuis que j'ai mis un mot de passe sur la feuille, j'ai systématiquement un message d'erreur "classique" me demandant soit de mettre fin soit de déboguer
j'ai voulu modifier ma macro mais j'ai désormais un environnement Python et non plus Visual Basic et je dois avouer que je suis complètement perdu ...
pourriez vous me donner une "macro" pour défiltrer l'ensemble d'une feuille Excel avant fermeture ( identique à ShowAllData) et qui pourrait fonctionner sur une feuille protégée svp ?
ma macro actuelle est la suivante:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim fc As Worksheet
For Each fc In ActiveWorkbook.Worksheets
If fc.FilterMode = True Then
fc.ShowAllData
End If
Next fc
End Sub

en vous remerciant par avance et bonne journée
 
Dernière édition:
Bonjour @Daniel200666

Je te propose ce code générique

VB:
Sub blabla()
'On déprotège LA feuille et seulement celle que l'on souhaite (nom de la feuille à adapter)
Worksheets("Feuil1").Unprotect Password:="toto"   '(MdP à adapter)

'On exécute le code....
'blablabla

'On reprotège LA feuille (nom de la feuille à adapter)

Worksheets("Feuil1").Protect Password:="toto", DrawingObjects:=False, Contents:=True, Scenarios:=True, AllowFiltering:=True '(MdP à adapter)
End Sub

Pour info :
1)Avant de te lancer dans la protection/déprotection assure toi que ton code fonctionne correctement
2)Pense bien qu'excel offre une protection illusoire.

Merci de ton retour
 
Bonjour Daniel, Phil,
Peut être un truc comme ça :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim fc As Worksheet
For Each fc In ActiveWorkbook.Worksheets
    With Sheets(fc.Name)
        .Unprotect "1234"
        If .FilterMode Then .ShowAllData
        .Protect "1234"
    End With
Next fc
ActiveWorkbook.Close savechanges:=True
End Sub
 
Re,
Si lors de la protection des feuilles, vous cliquez l'option "Utiliser le filtre dynamique", alors vous n'avez pas à déprotéger la feuille.
1739874131613.png

Ce sera suffisant de faire :
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim fc As Worksheet
For Each fc In ActiveWorkbook.Worksheets
    With Sheets(fc.Name)
        If .FilterMode Then .ShowAllData
    End With
Next fc
ActiveWorkbook.Close savechanges:=True
End Sub
 
Bonjour @Daniel200666

Je te propose ce code générique

VB:
Sub blabla()
'On déprotège LA feuille et seulement celle que l'on souhaite (nom de la feuille à adapter)
Worksheets("Feuil1").Unprotect Password:="toto"   '(MdP à adapter)

'On exécute le code....
'blablabla

'On reprotège LA feuille (nom de la feuille à adapter)

Worksheets("Feuil1").Protect Password:="toto", DrawingObjects:=False, Contents:=True, Scenarios:=True, AllowFiltering:=True '(MdP à adapter)
End Sub

Pour info :
1)Avant de te lancer dans la protection/déprotection assure toi que ton code fonctionne correctement
2)Pense bien qu'excel offre une protection illusoire.

Merci de ton retour
bonjour @Phil69970 merci beaucoup pour ce code mais très honnêtement, en adaptant les éléments, cela ne fonctionne pas mais je pense tout simplement que je ne suis pas suffisamment "calé" pour adapter mon fichier ... en en plus, la macro fonctionnait bien avant ..je suis totalement dépité là !!!!
 
Re,
Si lors de la protection des feuilles, vous cliquez l'option "Utiliser le filtre dynamique", alors vous n'avez pas à déprotéger la feuille.
Regarde la pièce jointe 1213234
Ce sera suffisant de faire :
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim fc As Worksheet
For Each fc In ActiveWorkbook.Worksheets
    With Sheets(fc.Name)
        If .FilterMode Then .ShowAllData
    End With
Next fc
ActiveWorkbook.Close savechanges:=True
End Sub
bonjour @sylvanu cette macro semble effectivement fonctionner mais auparavant, j'avais un message qui me demandait si je voulais enregistrer mes modifications, ce qui me permettait de constater que le "défiltrage" avait été réalisé; comme puis je faire pour avoir cette vérification ? merci beaucoup en tout cas
 
bonjour à tous

une question: Pourquoi défiltrer à la fermeture?? vu que le fichier sera fermé.. qu'est ce que tu en as à faire que les feuilles soient filtrées ou pas??
ne vaut il pas mieux défilter à l'ouverture??

pour la protection.. une macro VBA ne peut pas plus que toi travailler sur une feuille protégée
si tu veux que la macro modifie le contenu/apparence d'une feuille protégée, il faut d'abord déprotéger la feuille

sub macro()
sheets("nomfeuille").unprotect Mdp
' faire les opérations de défiltragge
sheets("nomfeuille").protect Mdp
end sub
 
Re

@Daniel200666
Vu que tu n'as pas de tableau structuré apparemment je te propose ce code à mettre dans "ThisWorkbook"

VB:
Sub Workbook_Open()
Dim Sh As Worksheet
For Each Sh In Worksheets
    Sh.Protect UserInterFaceOnly:=True
Next
End Sub

Regarde la pièce jointe 1213235
Merci de ton retour
bonjour @Phil69970 , je suis parti de la première macro que tu m'avais donné pour arriver en fait à celle-ci

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False 'cette instruction empeche la MAJ des écrans
Dim Ws As Worksheet
On Error Resume Next 'pour que ShaowAllData il faut au moins un filtre actif sinon ERREUR
'd'où il faut gérer cette erreur - si erreur on passe l'instrcution Next
'càd la feuille suivante
For Each Ws In Worksheets ' boucle qui va passer toutes les feuilles en revue
Ws.ShowAllData ' Instruction qui supprime les filtres
Next ' Instructions pour passer à la feuille suivante
Application.ScreenUpdating = True
End Sub

Et là ça fonctionne pas mal .. mais j'ai toujours un souci lorsque je protège cette feuille; est-il possible d'inclure dans cette macro une instruction comme celle que tu me proposes et si c'est possible, à quel endroit dans cette macro puis-je l'inclure; merci beaucoup
 
@Daniel200666

Je ne comprends pas ta question
mais j'ai toujours un souci lorsque je protège cette feuille; est-il possible d'inclure dans cette macro une instruction comme celle que tu me proposes

J'ai mis en photo à quel endroit tu dois mettre la macro il suffit de regarder l'image du post # 8 et le code associé et de le recopier au même endroit
A l'ouverture de ton fichier le code ira lire la macro.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
755
Compte Supprimé 979
C
Retour