Protection de plusieurs onglets en même temps(macro à améliorer) [Résolu/Fermé]

Signaler
Messages postés
15
Date d'inscription
mardi 14 mai 2013
Statut
Membre
Dernière intervention
21 décembre 2014
-
Messages postés
15
Date d'inscription
mardi 14 mai 2013
Statut
Membre
Dernière intervention
21 décembre 2014
-
Bonjour,



Je travaille sur un fichier EXCEL comportant de nombreux onglets que je doit alternativement protéger et déprotéger. J'ai trouvé une macro qui me permets de protéger et déprotéger plusieurs onglets en même temps (voir ci-dessous). Si cette macro fonctionne bien, elle doit être améliorée. En effet lors de son utilisation, elle retire l'ensemble des options sollicitées lors de la procédure classique individuelle proposée par EXCEL (filtre, modifier les objets, modifier les scénario etc..). Pouvez vous m'aider à compléter cette macro à fin qu'elle prenne en compte les options proposés par Excel

Je vous remercie d'avance pour votre aide

Sub Protéger()
' Protection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
Dim Motdepasse As String
Motdepasse = InputBox("Entrer le mot de passe :", "Mettre la protection sur toutes les feuilles", "")
nombre = ActiveWorkbook.Sheets.count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Protect Password:=Motdepasse
Next i
Application.ScreenUpdating = True
End Sub
Sub Déprotéger()
' Déprotection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
Dim Motdepasse As String
Motdepasse = InputBox("Entrer le mot de passe :", "Oter la protection de toutes les feuilles", "")
nombre = ActiveWorkbook.Sheets.count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Unprotect Password:=Motdepasse
Next i
Application.ScreenUpdating = True
End Sub

10 réponses

Messages postés
7082
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
26 novembre 2020
578
Bonjour,

Trouvez dans l'aide Excel:


Cet exemple montre comment activer les flèches du Filtre Automatique dans une feuille de calcul protégée.

ActiveSheet.EnableAutoFilter = True
ActiveSheet.Protect contents:=True, userInterfaceOnly:=True


Il faut faire une boucle sur toutes les feuilles pour y incorporer ce code:
Comme ceci par exemple:

Sub Déprotéger() 
' Déprotection automatique de toutes les feuilles d'un classeur 
Dim nombre As Integer 
Dim Motdepasse As String 
Motdepasse = InputBox("Entrer le mot de passe :", "Oter la protection de toutes les feuilles", "") 
nombre = ActiveWorkbook.Sheets.count 
Application.ScreenUpdating = False 
For i = 1 To nombre 
Worksheets(i).Unprotect Password:=Motdepasse 
ActiveSheet.EnableAutoFilter = True
ActiveSheet.Protect contents:=True, userInterfaceOnly:=True
Next i 
Application.ScreenUpdating = True 
End Sub


A essayer!
Messages postés
7082
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
26 novembre 2020
578
Je viens de trouvez cela sur

http://www.gaboly.com/VBA/Protege.html

Sub Protege()
Dim f as Worksheet
    For Each f In ActiveWorkbook.Worksheets
        f.Protect "Toto", True, True, True
    Next
End Sub


Les True, True, True representent filtre, les objets, les scénario
Messages postés
23677
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
26 novembre 2020
6 496
Bonjour,

Si tu fais F1 sur .Protect tu auras tous les paramètres que tu peux activer.
Et en enregistrement de macro tu pourras récupérer ceux que tu actives.

eric
Messages postés
15
Date d'inscription
mardi 14 mai 2013
Statut
Membre
Dernière intervention
21 décembre 2014

Bonjour

Un grand merci à CS_Le Pivert, eriiic et à tout ceux qui m'ont apporté des solutions. Désolé de revenir vers vous si tardivement. Je n'ai malheureusement pas eu le temps de mettre en application vos précieux conseils. Je ne manquerais pas de vous tenir informé aussitôt après avoir pu essayer vos solutions. très certainement demain

Maurice933
Messages postés
15
Date d'inscription
mardi 14 mai 2013
Statut
Membre
Dernière intervention
21 décembre 2014

Bonjour

à CS_Le Pivert, eriiic et à tout ceux qui m'ont apporté des solutions, toutes mes excuses pour cette réponse tardive. Je suis débutant sur VBA et j'ai mis beaucoup de temps à comprendre et mettre en application vos suggestions. Ci-dessous la macro que j'ai constituée. Elle est le mélange des lignes de macro proposées par CS_Le Pivert, et eriiic. Elle permet la protection et la déprotection simultanées de tous les onglets d'un même classeur. Elle conserve la fonction filtre lorsque la protection est activée, ce qui correspond à mon besoin actuel. Néanmoins je ne suis pas parvenu à rajouter les options de protection telles que modifier les objets, modifier les scénario etc.. Cela est du au codage que je ne maîtrise pas bien. Une nouvelle fois je vous remercie pour l'aide que vous m'avez apportée.
Messages postés
15
Date d'inscription
mardi 14 mai 2013
Statut
Membre
Dernière intervention
21 décembre 2014

Bonjour

Ci-dessous la macro :

Sub Protegertouslesongletsenmêmetemps()
' Protection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
Dim Motdepasse As String
Motdepasse = InputBox("Entrer le mot de passe :", "Mettre la protection sur toutes les feuilles", "")
nombre = ActiveWorkbook.Sheets.count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Protect Password:=Motdepasse
ActiveSheet.EnableAutoFilter = True
ActiveSheet.Protect contents:=True, userInterfaceOnly:=True
Next i
Application.ScreenUpdating = True
Dim f As Worksheet
For Each f In ActiveWorkbook.Worksheets
f.Protect Password:=Motdepasse, AllowFiltering:=True
Next
End Sub
Sub Déprotégertouslesongletsenmêmetemps()
' Déprotection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
Dim Motdepasse As String
Motdepasse = InputBox("Entrer le mot de passe :", "Oter la protection de toutes les feuilles", "")
nombre = ActiveWorkbook.Sheets.count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Unprotect Password:=Motdepasse
Next i
Application.ScreenUpdating = True
End Sub
Messages postés
7082
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
26 novembre 2020
578
Essaie ceci pour modifier les filtres, modifier les objets, modifier les scénario etc.. avec la protection:


Sub Protegertouslesongletsenmêmetemps()
' Protection automatique de toutes les feuilles d'un classeur
Dim Motdepasse As String
Dim wSheet As Worksheet
Motdepasse = InputBox("Entrer le mot de passe :", "Mettre la protection sur toutes les feuilles", "*****")
If Motdepasse = "" Then Exit Sub
For Each wSheet In Worksheets
 wSheet.Protect Password:=Motdepasse, _
        UserInterFaceOnly:=True
Next wSheet
End Sub

Sub Déprotégertouslesongletsenmêmetemps()
' Déprotection automatique de toutes les feuilles d'un classeur
Dim wSheet As Worksheet
Dim Motdepasse As String
Motdepasse = InputBox("Entrer le mot de passe :", "Oter la protection de toutes les feuilles", "*****")
If Motdepasse = "" Then Exit Sub
For Each wSheet In Worksheets
 wSheet.Unprotect Password:=Motdepasse
Next wSheet
End Sub

Messages postés
15
Date d'inscription
mardi 14 mai 2013
Statut
Membre
Dernière intervention
21 décembre 2014

Bonjour @+ Le Pivert

Je te remercie pour ta macro. Je l'ai essayée. Elle protège et déprotège bien simultanément l'ensemble du classeur (obliger d'entrer un mot de passe pour qu'elle fonctionne). Malheureusement elle ne prend pas en compte aucune des options (les filtres, modifier les objets, modifier les scénario etc..). Je travaille sur Excel 2003. Je ne sais pas si cela a une importance. Je te remercie encore de t'être intéressé à ma demande.
Bonne soirée
Messages postés
7082
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
26 novembre 2020
578
J'ai excel 2007, voici la macro pour protéger les feuilles et pour modifier les filtres, modifier les objets, modifier les scénario

Voir si cela fonctionne sous 2003 en vérifiant manuellement après avoir protégé si les cases filtre, objet et scenario sont cochées dans la protection des feuilles

Sub Protegertouslesongletsenmêmetemps()
' Protection automatique de toutes les feuilles d'un classeur
Dim Motdepasse As String
Dim wSheet As Worksheet
Motdepasse = InputBox("Entrer le mot de passe :", "Mettre la protection sur toutes les feuilles", "*****")
If Motdepasse = "" Then Exit Sub
For Each wSheet In Worksheets
 wSheet.Protect Password:=Motdepasse, _
        UserInterFaceOnly:=True, _
   DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFiltering:=True
Next wSheet
End Sub


Messages postés
15
Date d'inscription
mardi 14 mai 2013
Statut
Membre
Dernière intervention
21 décembre 2014

Bonjour @+ Le Pivert

Merveilleux !!! Tous les onglets du classeur se protègent et se déprotègent simultanément en conservant les options sélectionnées dans la macro :

UserInterFaceOnly:=True, _
DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFiltering:=True

Pour davantage d'options comme par exemple "utiliser des rapports de tableau croisé dynamique" il suffit de rajouter aux lignes de commande de la macro ", AllowUsingPivotTables:=True"

UserInterFaceOnly:=True, _
DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFiltering:=True, AllowUsingPivotTables:=True

Pour résumer la macro de protection et de déprotection simultanées de tous les onglets d'un classeur avec conservation des options sélectionnées dans les ligne de la macro s'écrit de la manière suivante:

Sub Protegertouslesongletsenmêmetemps2()
' Protection automatique de toutes les feuilles d'un classeur
Dim Motdepasse As String
Dim wSheet As Worksheet
Motdepasse = InputBox("Entrer le mot de passe :", "Mettre la protection sur toutes les feuilles", "*****")
If Motdepasse = "" Then Exit Sub
For Each wSheet In Worksheets
wSheet.Protect Password:=Motdepasse, _
UserInterFaceOnly:=True, _
DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFiltering:=True, AllowUsingPivotTables:=True
Next wSheet
End Sub

Sub Déprotégertouslesongletsenmêmetemps2()
' Déprotection automatique de toutes les feuilles d'un classeur
Dim wSheet As Worksheet
Dim Motdepasse As String
Motdepasse = InputBox("Entrer le mot de passe :", "Oter la protection de toutes les feuilles", "*****")
If Motdepasse = "" Then Exit Sub
For Each wSheet In Worksheets
wSheet.Unprotect Password:=Motdepasse
Next wSheet
End Sub

Un énorme merci à @+ Le Pivert, eriiic et à tous les membres du site (Comment ça marche).

Maurice933