Oter la protection de la feuille et la remettre après le codage

Bonjour à tous,

J'aimerais désactiver la protection de la feuille et la remettre à la fin de mon codage.

Voici ce que j'ai testé:

Private Sub CommandButton1_Click()
Sheets("estimation).Unprotect Password:="XXX"
Range("B3").Value = TextBox1.Value
Range("B4").Value = TextBox2.Value
Range("B5").Value = TextBox3.Value
Range("B6").Value = TextBox4.Value
Range("E9").Value = TextBox5.Value
Range("E11").Value = TextBox6.Value
Range("E12").Value = TextBox7.Value
Range("E13").Value = TextBox8.Value
Range("E14").Value = TextBox9.Value
Range("E16").Value = TextBox10.Value
Range("H12").Value = TextBox11.Value
Range("H13").Value = TextBox12.Value
MsgBox ("Modifications Effectuées")
Sheets(1).Unprotect Password:="XXX"
End Sub

Sauf que la première valeur s'ajoute bien mais sur la seconde il ne veut pas. Je suis donc obligé de repeter "Sheets("estimation).Unprotect Password:="XXX" à chaque ligne pour que tout le code fonctionne.

Avez vous un solution pour je puisse mettre le code "Sheets("estimation).Unprotect Password:="XXX" qu'une seul fois?

Ps: je dois faire la meme manip sur une 20aine de code, autre exemple:

Private Sub CheckBox1_Click()
ActiveSheet.Unprotect Password:="XXX"
Dim PlageLB As Range, i As Integer

With Sheets("Filtrage")
    If CheckBox1.Value Then
        CheckBox2.Value = False
        CheckBox3.Value = False
        CheckBox4.Value = False
        CheckBox5.Value = False
        .Range("B2") = "Plein"
    End If
    If CheckBox1 = False Then .Range("B2") = ""
    If .Range("AF4") = 0 Or .Range("AF4") = 1 Then Set PlageLB = .Range("Y6:AF273")
    If .Range("AN4") = 2 Then Set PlageLB = .Range("AG6:AN273")
    If .Range("AV4") = 3 Then Set PlageLB = .Range("AO6:AV273")
    If .Range("BD4") = 4 Then Set PlageLB = .Range("AW6:BD273")
    If Not PlageLB Is Nothing Then
        With ListBox1
            .List = PlageLB.Value
            For i = .ListCount - 1 To 0 Step -1
                If .List(i) = "" Then
                    .RemoveItem (i)
                Else
                    .List(i, 7) = Format(.List(i, 7), "0.00 €")
                End If
            Next i
        End With
    End If
End With
ActiveSheet.Protect Password:="XXX"
End Sub

Merci d'avance à tous.

Bonsoir,

CommandButton est lié à la feuille sur laquelle il se trouve donc normalement :

ActiveSheet.Unprotect Password:="XXX" en début de code retire la protection, vous faites ce que vous avez à faire, puis
ActiveSheet.Protect Password:="XX" en fin de code pour remettre la protection.

Maintenant si vous êtes obligé de le mettre après chaque inscription de données dans une cellule de la feuille, c'est que vous devez avoir une surveillance événementielle sur le "Change" de la feuille, code qui doit avoir un ActiveSheet.Protect en place...

Solution : après le Unprotect, mettez un : Application.EnableEvents = False et remettez le avant le Protect en le mettant à True, comme cela la surveillance événementielle ne fonctionnera pas pendant la mise à jour des données de la feuille. Il en est peut-être de même pour vos autres feuilles !

Attention ! Je vous dis cela sans fichier...

@ bientôt

LouReeD

Bonjour LouReeD,

J'ai essayé votre solution. J'ai supprimé tous les ActiveSheet.Unprotect Password:="XXX" et ActiveSheet.Protect Password:="XXX" de mes codes.

J'ai, ensuite, utilisé le fichier comme-ci j'étais un utilisateur lambda, pour ajouter les codes de protections au bonne endroit.

Cela fonctionne très bien à présent. Cependant j'ai pu remarqué qu'il ne me gardait pas en mémoire les autorisations.

Je m'explique. Au départ, du fichier je veux que l'utilisateur lambda puisse faire cela:

protect

Sauf que quand les codes ActiveSheet.Unprotect Password:="XXX" et ActiveSheet.Protect Password:="XXX" agissent les autorisations en mémoire sont

protect 1

Comment garder les autorisations de la première image quand les codes ActiveSheet.Unprotect Password:="XXX" et ActiveSheet.Protect Password:="XXX" agissent?

Merci d'avance.

Bonjour, de tête je ne sais pas mais il y a l'enregistreur de macro...

@ bientôt

LouReeD

Bonjour,

J'ai trouvé. Il faut mettre en début de macro:

ActiveSheet.Unprotect Password:="XXX"

Et en fin de macro:

ActiveSheet.Protect AllowInsertingRows:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowDeletingRows:=True, Password:="XXX"

Bien sur, ce code est à adapter selon ce que vous voulez garder en mémoire comme autorisations et à incorporer sur les codes où il y aurait un blocage.

Vous trouverez ci-dessous toutes les propriétés du code ActiveSheet.Protect / ActiveSheet.Unprotect.

ActiveSheet.Protect Password:="", 
                    DrawingObjects:=True,
                    Contents:=True,
                    Scenarios:=True 
                    UserInterfaceOnly,
                    AllowFormattingCells,
                    AllowFormattingColumns,
                    AllowFormattingRows,
                    AllowInsertingColumns,
                    AllowInsertingRows,
                    AllowInsertingHyperlinks,
                    AllowDeletingColumns,
                    AllowDeletingRows,
                    AllowSorting,
                    AllowFiltering,
                    AllowUsingPivotTables) 

Bonne journée à tous.

Paulo

Rechercher des sujets similaires à "oter protection feuille remettre codage"