Grouper / Dissocier dans une Macro de protéger / déprotéger de fichier

  • Initiateur de la discussion Initiateur de la discussion El Tino
  • Date de début Date de début

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 !

El Tino

XLDnaute Nouveau
Bonjour,
J'ai une Macro "Protéger" (voir ci dessous) qui me permet de protéger toutes les feuilles de n'importe quel fichier en laissant des cellules prédéfinies à l'avance (case vérouillée décochée dans format / cellule / protection) libre de toute saisie, et d'insérer des commentaires également sur les cellules protégées.
A cette macro générique, je souhaiterai également autoriser la fonction Grouper / Dissocier.
J'ai bien lu que mon salut viendrait de "EnableOutlining = True" par contre mes connaissances assez limitées ne me permettent pas de l'écrire correctement dans ma macro générique. (soit la macro bloque, soit l'action ne se réalise pas).

Je ne sais pas s'il faut également mettre du code dans ma macro "Déprotéger"
Si quelqu'un a une idée je suis preneur.

Merci d'avance


Sub Protéger()
' Protection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Protect password:="reportingcg", DrawingObjects:=False
Next i
End Sub

Sub Déprotéger()
' Déprotection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Unprotect password:="reportingcg"
Next i
End Sub
 
Re : Grouper / Dissocier dans une Macro de protéger / déprotéger de fichier

Bonjour El TIno, le Forum

Je pense que comme ceci ce devrait le faire

Code:
Option Explicit
Const WSProtect As String = "reportingcg"
Sub Protection()
Dim WB As Workbook
Dim WS As Worksheet
Set WB = ThisWorkbook

    For Each WS In WB.Worksheets  '
        If WS.Name <> "Sheet1" Then
            With WS
                .EnableOutlining = True
                .EnableAutoFilter = True
                .Protect WSProtect
            End With
        End If
    Next WS
End Sub

Sub DeProtection()
Dim WB As Workbook
Dim WS As Worksheet
Set WB = ThisWorkbook

    For Each WS In WB.Worksheets  '
        If WS.Name <> "Sheet1" Then
            With WS
                .Unprotect WSProtect
            End With
        End If
    Next WS
End Sub

Bonne journée
@+Thierry
PS J'ai ajouté "Enable Autofilter" aussi dans cet exemple
 
Re : Grouper / Dissocier dans une Macro de protéger / déprotéger de fichier

Bonjour Thierry,
Merci pour ta réponse.
J'ai copié la macro et voici ce qu'il en ressort.
- Lorsque cette Macro est directement enregistrée dans le fichier que je veux protéger elle se lance et protège bien uniquement les cellules voulue.
Par contre sauf erreur de ma part le grouper/dégrouper ne marche pas (en pièce jointe).
- Lorsque j'enregistre cette macro dans un fichier et que j'ouvre un deuxième fichier et que je la lance, alors là, la protection ne fait plus son effet !

Si tu vois ce qui ne pas pas ou si tu dois me corriger je suis preneur.
Je glisse également la macro générique originale.

Merci d'avance
 

Pièces jointes

Re : Grouper / Dissocier dans une Macro de protéger / déprotéger de fichier

Bonjour El tino, Thierry🙂,

pas tout suivi, mais pour activer le plan il me semble bien qu'il faille que l'interface utilisateur soit activée, modifie peut être le code de protection ainsi :
Code:
Option Explicit
Const WSProtect As String = "reportingcg"
Sub Protection()
Dim WB As Workbook
Dim WS As Worksheet
Set WB = ThisWorkbook
    For Each WS In WB.Worksheets  
        If WS.Name <> "Sheet1" Then
            With WS
                .EnableOutlining = True
                .EnableAutoFilter = True
                .Protect WSProtect, userInterfaceOnly:=True
            End With
        End If
    Next WS
End Sub

bon après midi
@+
 
Re : Grouper / Dissocier dans une Macro de protéger / déprotéger de fichier

Bonjour El Tino,

Pour le grouper/dissocier, il faut inscrire ton code dans Thisworkbooks et lui donner la condition de se lancer automatiquement a l'ouverture du fichier.

Private Sub Workbook_Open()
With Sheets("CF")
.EnableOutlining = True
.Protect Password:="a", contents:=True, userInterfaceOnly:=True
End With
End Sub

J'ai modifie ton fichier Protection macro II.xls

Fichier joint. Vois si cela te convient.

Pomylus
 

Pièces jointes

- 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
3
Affichages
520
Réponses
2
Affichages
528
Réponses
4
Affichages
549
Réponses
7
Affichages
547
Réponses
2
Affichages
1 K
Retour