Macro "protect" et "unprotect" un peu génante

Bonjour et bon lundi à tous

J'utilse ce code dans le "ThisWorkbook" :

    Private Sub Workbook_Open()
    Dim i%
    For i = 1 To Worksheets.Count
       Worksheets(i).Protect UserInterfaceOnly:=True, Password:="mon_mdp"
    Next
    End Sub

Quand je fais des tests, dois modifier ou rajouter du vba, j'ôte la protection des feuilles, mais quand je lance la macro (nouvelle par ex:), il re-protège les feuilles!

N'y a-t-il pas moyen de modifier ce code ou un autre code, pour qu'il tienne compte que la protection a été retiré manuellement?

Pour l'instant je met ce code comme commentaire quand je dois faire des modifications dans mon classeur, ce n'est pas pratique!

Je ne sais pas si j'ai été claire

Bonjour,

Je ne sais pas si ceci fera votre affaire maia moi j'utilise 2 boutons VBA , un poir déproteger et un pour protéger.

Voici mon code pour déprotéger:

Private Sub Commandbutton1

Sheets("nom de la feuille").unprotect Password:="votre mot de passe".

Pour vérouiller c'est exactement le même code sauf que l'on doit remplacer le mot "unprotect" par "protect" sans les guillemets et remplacer le Commandbutton par commandbutton2 ou autre.

Je test et reviens vers toi.

Je ne suis pas en avant d'un ordinateur présentement mais quand je vais revenir chez moi je vais poster ici les 2 boutons dans un fichier vierge avec leur code complet.

Merci mais...,

Même ci l'idée de deux boutons est bonne, je dois inscrire le "MDP" dans le code pour dé-protéger les feuilles, car ci je ne l'indique pas , il ne me le demande pas! et plusieurs utilisateurs vont ce servir de ce classeur

En plus, avec ce type de code, les macros ne tourne plus!

Donc en fait l'idée serait:

*deux boutons (pour l’ensemble des pages):

- 1 pour protéger (sans demande de mot de passe, donc pré-inscris dans le code)

- 1 pour dé-proteger (avec demande de mot de passe)

De façon a ce que les macros et les listes puissent fonctionnées, quand les feuilles sont protéger.

Ok donc si je comprends bien, mes boutons sont bons sauf qu'ils bloquent tout. Je sais pas de mémoire si ce que tu veux se trouveraient dans les options que l'on peut cocher lorsque l'on fait un clique droit sur l'onglet et qu'on clique sur protéger la feuille. Je me souviens qu'il y a plusiejrs options possibles la dedans mais je suis pas certain si ce que tu cherche s'y trouve. Sinon je ne vois pas comment donner une permissions d'actions sous vba.

diablo7431 a écrit :

J'utilse ce code dans le "ThisWorkbook" :

    Private Sub Workbook_Open()
    Dim i%
    For i = 1 To Worksheets.Count
       Worksheets(i).Protect UserInterfaceOnly:=True, Password:="mon_mdp"
    Next
    End Sub

Quand je fais des tests, dois modifier ou rajouter du vba, j'ôte la protection des feuilles...

Bonjour,

C'est parfaitement inutile puisque UserInterfaceOnly:=True permet aux macros de s'exécuter précisément malgré la protection !

La seule chose qu'on peut signaler en particulier en période de "construction" c'est que comme on fait parfois quelques erreurs de syntaxe dans la rédaction des macros, si l'erreur entraîne l'arrêt de la macro VBA peut perdre la mémoire et dans ce cas il peut être nécessaire de la lui rafraîchir...

Moi pour de nouvelles macros en construction j'utilise systématiquement cette instruction en tête de la macro.

Worksheets(i).Protect UserInterfaceOnly:=True, Password:="mon_mdp"

Comme ça si VBA à oublié quelque chose, la petite piqure de rappel l'obligera à se souvenir...

En outre, (Toujours avec cette même idée : piqure de rappel en cas d'erreur d'exécution) en plus de de la macro Workbook_Open, je rajoute systématiquement dans le module ThisWorkbook.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sh.Protect UserInterfaceOnly:=True, Password:="mon_mdp"
End Sub

En dehors de ça, moi personnellement ça fait plus de 10 ans que je n'utilise plus de macro Protect/Unprotect...

A+

Bonjour,

tu mets dans un module Standard :

Public Const debug_On As Boolean = True

hors procédure en début de module.

Partout où tu as .Protect (faire une recherche dessus au niveau projet) tu ajoutes devant :

If Not Debug_On then ta_ligne_de_code

Quand tu as finis tes tests tu remplaces True par False.

Et tu te fais une petite macro pour déprotéger tout à lancer au début

eric

Bonsoir et merci à tous,

galopin01 a écrit :

C'est parfaitement inutile puisque UserInterfaceOnly:=True permet aux macros de s'exécuter précisément malgré la protection !

Bien oui, c'est bien là le problème! Le code en lui même est très bien, quand la feuille doit être et rester protégé!

Mais ce que je souhaiterais, s'est de pourvoir continué à construire mon classeur, sans qu'elles soit protégées et qu'elles ne ce protèges pas toutes seul, pendant que je teste une macro.

c'est pour cela que je pensais à ceci:

diablo7431 a écrit :

*deux boutons (pour l’ensemble des pages):

  • 1 pour protéger (sans demande de mot de passe, donc pré-inscris dans le code et avec les macros et les listes fonctionnelles )
  • 1 pour dé-proteger (avec demande de mot de passe)

Bon, maintenant si la solution la plus simple est dé-protéger les feuilles manuellement et de passer "UserInterfaceOnly:=True" en UserInterfaceOnly:=False", je ferais avec..

galopin01 a écrit :

En dehors de ça, moi personnellement ça fait plus de 10 ans que je n'utilise plus de macro Protect/Unprotect...

Une raison? car dans mon cas, nous serons 3 ou 4 à encodés, et je n'ai pas envie de maladresse dans le code ou les formules

eriiic a écrit :

tu mets dans un module Standard :

Public Const debug_On As Boolean = True

hors procédure en début de module.

Partout où tu as .Protect (faire une recherche dessus au niveau projet) tu ajoutes devant :

If Not Debug_On then ta_ligne_de_code

Quand tu as finis tes tests tu remplaces True par False.

et tu te fais une petite macro pour déprotéger tout à lancer au début

eric

Srt392 a écrit :

Ok donc si je comprends bien, mes boutons sont bons sauf qu'ils bloquent tout.

Oui ce type code permet de protéger complètement la feuille et par la même occasion, les macros

tous le mondes,

Personnes n'aurais une idée pour ceci:

*deux boutons (pour l’ensemble des pages):

- 1 pour protéger (sans demande de mot de passe, donc pré-inscris dans le code)

De façon à se que les macros; listes, recherche, tris, etc..., puissent fonctionnés, quand les feuilles seront protégées.

- 1 pour dé-proteger (avec demande de mot de passe) ex: textbox, car je pense que celui là permet de mettre des " * " à la place du MDP inscris.

J'ai joint le fichier (allégé en données), car j'ai déjà essayer plusieurs macro (dont celle ci-dessous), et rien qui me convenais vraiment, et ce que je trouvais bisare s'est que dans la feuille "NE", les boutons présent sont liés à une macro, mais seul "Début" et "fin" fonctionnais, pas le tri!

 Private Sub Workbook_Open()
    Dim i%
    For i = 1 To Worksheets.Count
       Worksheets(i).Protect UserInterfaceOnly:=True, Password:="mon_mdp"
    Next
    End Sub
42ne-atelier-ep.xlsm (70.47 Ko)

Sujet résolut voir sujet -> "Quel meilleur moyen de protection avec macros autorisées"

Merci quand même de vous y être penché

Rechercher des sujets similaires à "macro protect unprotect peu genante"