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

Résolu
Maurice933 Messages postés 15 Statut Membre -  
Maurice933 Messages postés 15 Statut Membre -
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

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  4. Maurice933 Messages postés 15 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Maurice933 Messages postés 15 Statut Membre
     
    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
  7. Maurice933 Messages postés 15 Statut Membre
     
    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
  8. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  9. Maurice933 Messages postés 15 Statut Membre
     
    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
  10. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  11. Maurice933 Messages postés 15 Statut Membre
     
    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