L'informatique à votre portée
L'informatique prêt-à-porter

Faites appel à moi pour vos formations
sur les dpts 81, 31, 82, 11 et 67 (Strasbourg)
Confiez moi vos développements Office

FacebookTwitterGoogle BookmarksLinkedin

Protéger une feuille d'Excel en gardant les filtres

Imprimer E-mail
4 mars 2014

Si dans une feuille vous avez une liste de données avec un filtre automatique, lorsque vous protégez la feuille, les flèches du filtre deviennent inactives. Pour en retrouver l'usage :

  • Dans le classeur Perso.xls ou tout autre classeur ouvert automatiquement à l'ouverture d'Excel, insérez un module.
  • Tapez le code indiqué ci-dessous
  • Fermez l'éditeur VBA
  • dans Excel, Outils/Personnaliser, onglet Commande, catégorie Macros, glissez la commande Bouton Personnalisé sur une de vos barres d'outils
  • Affectez votre procédure à ce bouton, clic-droit sur le bouton, puis Affecter une macro.
    Changez éventuellement son nom et son image.
  • Fermer
Sub ProtectionAvecFiltre()
Dim MotPasse As String
Dim MenuContex As CommandBarPopup 'menu contextuel
Dim MenuProtect As CommandBarControl 'contrôle de barre de commande
Dim Trouve As Boolean

'on demande un mot de passe à l'utilisateur
MotPasse = InputBox("Mot de passe :", "Protection avec usage du Filtre automatique")
' si vous ne voulez pas qu'il soit écrit en clair, vous devrez créer un UserForm
' pour demander le mot de passe à l'utilisateur

With ActiveSheet
'protège la feuille avec le mot de passe uniquement pour l'interface utilisateur pas pour les procédures
.Protect Password:=MotPasse, UserInterfaceOnly:=True
'active les flèches du filtre
.EnableAutoFilter = True
End With
'recherche le menu Protection
Set MenuContex = CommandBars.FindControl(, 30029)
' Pour chaque menu du menu Protection
For Each MenuProtect In MenuContex.CommandBar.Controls
'si on est sur le menu Protéger la feuille
If MenuProtect.ID = 893 Then
'alors trouve est vrai et on sort
Trouve = True
Exit For
End If
Next
' si on a trouvé on change le texte du menu pour ne pas perturber l'utilisateur
' sinon la protection est mise et le menu afficher encore "protéger la feuille"

If Trouve Then MenuProtect.Caption = "Ôter la protection de la &feuille..."
End Sub