Protection de plusieurs onglets en même temps(macro à améliorer)

Résolu/Fermé
Maurice933 Messages postés 15 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 21 décembre 2014 - 16 déc. 2014 à 15:04
Maurice933 Messages postés 15 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 21 décembre 2014 - 21 déc. 2014 à 11:34
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
A voir également:

10 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
16 déc. 2014 à 15:38
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!
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
16 déc. 2014 à 15:51
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
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
16 déc. 2014 à 17:20
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
0
Maurice933 Messages postés 15 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 21 décembre 2014
17 déc. 2014 à 17:36
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Maurice933 Messages postés 15 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 21 décembre 2014
19 déc. 2014 à 15:35
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.
0
Maurice933 Messages postés 15 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 21 décembre 2014
19 déc. 2014 à 15:39
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
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
20 déc. 2014 à 10:58
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

0
Maurice933 Messages postés 15 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 21 décembre 2014
20 déc. 2014 à 18:30
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
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
20 déc. 2014 à 19:18
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


0
Maurice933 Messages postés 15 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 21 décembre 2014
21 déc. 2014 à 11:34
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
0