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

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
 

_Thierry

XLDnaute Barbatruc
Repose en paix
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
 

El Tino

XLDnaute Nouveau
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

  • Protection macro II.xls
    73 KB · Affichages: 40
  • 31-12-06_macro protec.xls
    38 KB · Affichages: 46

Pierrot93

XLDnaute Barbatruc
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
@+
 

Pomylus

XLDnaute Nouveau
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

  • Copy of Protection macro II.xls
    73 KB · Affichages: 52

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11