Microsoft 365 Proteger un classeur avec macro

pelerin65

XLDnaute Occasionnel
Bonjour le forum

je voudrais protéger un classeur afin d'éviter que des formules ou code VBA soit modifiées ou effacées.
j'ai essayé de protéger avec protéger les feuilles avec un code mais lorsque la protection des feuilles sont mises, les macros et liens ne fonctionnent plus.

Y aurait-il une solution afin de protéger mon travail
Merci d'avance

si besoin je peux joindre le fichier
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Réponse au message #14.

Quand vous faites un accès en écriture ( write, delete ... ) vous devez absolument déprotéger la ou les feuilles en conséquence avec :
Code:
ActiveSheet.Unprotect ("1234")
ou
Sheets("Nom de la feuille").Unprotect ("Mot de passe")
et avant de sortir de la macro, vous devez reprotéger avec :
Code:
ActiveSheet.Protect ("1234")
ou
Sheets("Nom de la feuille").Protect ("Mot de passe")

J'ai oublié de préciser : Quand vous voulez gardez des cellules accessibles, il y a la déprotection, mais pensez lors de l'initialisation du mot de passe de bien laisser cocher ces deux lignes :
1638178303328.png

Sinon les cellules resteront protégées puisque vous n'avez pas autoriser leur sélection.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Effectivement j'arrive à ouvrir la PJ du post #14, mais c'est la seule.
Modifié : https://www.cjoint.com/c/KKDjPEsLOZY
Les cellules A4 à D4 sont déprotégées.
J'ai modifié le code pour les deux boutons "Affiche la journée" et "Efface la journée" :
VB:
Private Sub CommandButton4_Click()
    ActiveSheet.Unprotect ("1234")                                  ' On déprotège la feuille
' EFFACER Macro
    Application.ScreenUpdating = False
    Rows("6:6").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    Rows("6:6").Select
    Selection.ClearContents
    Range("C3:D3").Select
    Range("A3").Select
    Application.ScreenUpdating = True
    ActiveSheet.Protect ("1234")                                    ' On reprotège la feuille
End Sub
Private Sub CommandButton5_Click()
    ActiveSheet.Unprotect ("1234")                                  ' On déprotège la feuille
' Macro1 Macro
    Sheets("source").Range("Tsource[#All]").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A2:E3"), CopyToRange:=Range("A6"), Unique:=False
    ActiveSheet.Protect ("1234")                                    ' On reprotège la feuille
End Sub
Il suffit de rajouter les deux lignes Unprotect et Protect.
 

Discussions similaires

Réponses
10
Affichages
185