Code pour désactiver protection feuille à chaque procédure d'un module

Bonjour à tous !

Pour mon 1er post et 1ère inscription à un forum Excel, je souhaite remercier toutes les personnes qui ont posé des questions et celles qui y ont répondues, sur Excel-pratique ou d'autres forums. Mes 1er pas étant içi, on retourne toujours là d'où on vient !

Question : comme les variables, est-il possible d'indiquer en-tête d'un module, un code permettant de désactiver la protection d'une feuille à chaque fois qu'une procédure est lancée ? Cela m'évitera d'ajouter à chacune de mes procédures les codes

ActiveSheet.unprotect "" (début de procédure)

ActiveSheet.protect "" (fin de procédure)

Merci d'avance !

Bonjour

Il faut dans le WorkBook_Open protéger les feuilles avec l'option UserInterfaceOnly ce qui autorise le code à faire ce qu'il veut

En découvrant l'option UserInterfaceOnly, j'ai permis que chaque feuille du classeur puisse être protégées à la fermeture du classeur :

image

Cependant, je n'ai pas trouvé comment utilisé l'option UserInterfaceOnly au niveau d'un module.

Je souhaite désactiver la protection de la feuille active au lancement de chaque procédure du Module1. Il y a déjà beaucoup de procédures dans le Module1 qui sont lancées par des boutons.

Voici un de mes crash tests :

image

J'ai testé avec ActiveSheet / Worsheet /.unprotect Password:="S" / .unprotect "S"

Bonjour,

avec UserInterfaceOnly=true tu n'as plus besoin de déprotéger la feuille pour le code, ça lui donne un passe-droit (à de rare exceptions près qui nécessitent.quand même une déprotection)
Il n'y a que l'utilisateur qui est bloqué.
En général c'est plus à l'ouverture qu'on le fait, pour s'affranchir d'un pb si oubli.
eric

Merci à vous deux !
J'ai corrigé ma logique et le code sous ThisWorkbook :

image

Problème résolue et chouette découverte !
Une autre Sub à l'ouverture ne fonctionne plus du coup mais c'est un autre sujet et à force d'essayer, je vais y arriver

Bonsoir,

De rien, mais la bonne réponse est plutôt de 78chris

Si tu dois déprotéger pour une opération utilisateur il ne faut pas mettre le paramètre UserInterfaceOnly
eric

Bonjour toutes et tous,

Ce post est très intéressant mais mes compétences en écriture et syntaxe macro font que je n'arrive pas à partir du code joint sous format d'image à l'écrire correctement sur un de mes classeurs pour tester.

Pourriez-vous m'aider à le corriger :

Private Sub workbookOpen ()
'Protéger toutes les feuilles à l'ouverture du classeur
'Utiliser le "passe-droit" UserInterFaceOnly: =True pour que les macro fonctionnent malgré la protection
Dim ws As Worksheet
For Each ws In Worksheets
ws.protect Password:="g", UserInterFaceOnly: =True, DrawingObjects: =True, Contents: =True, scenarios:=True
AllowFormattingCells:=True,AllowFormattingColumns:=True,
AllowFormattingRows:=True,AllowInsertingRows:=True,
AllowInsertingHyperlinks:=True,AllowDeletingRows:=True
Next Ws
End Sub

Bonjour

Private Sub workbookOpen()
'Protéger toutes les feuilles à l'ouverture du classeur
'Utiliser le "passe-droit" UserInterFaceOnly: =True pour que les macro fonctionnent malgré la protection
Dim ws As Worksheet
    For Each ws In Worksheets
        ws.Protect Password:="g", UserInterFaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
        AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowInsertingRows:=True, _
        AllowInsertingHyperlinks:=True, AllowDeletingRows:=True
    Next ws
End Sub

Bonjour à tous,

Private Sub Workbook_Open() !!!

N'écris jamais toi-même les procédure événementielles. Fais confiance à VBE, en plus il te mettra les paramètres corrects.
Au-dessus du code, choisis 'Workbook' dans la liste de gauche, et l'événement voulu dans la liste de droite.
eric

Bien vu : j'avais corrigé la découpe mais pas regardé le nom !

Bonjour Eriiic,

Ok pour la solution.
Je reviens sur ta dernière remarque que je n'arrive pas à comprendre : "Si tu dois déprotéger pour une opération utilisateur il ne faut pas mettre le paramètre UserInterfaceOnly"

J'ai testé en retirant le paramètre UserInterfaceOnly et la macro n'a pas pu s'exécuter sur la feuille protégée.
L'objectif du sujet est de permettre l'exécution de chaque macro alors que les feuilles sont protégées. A l'aide de UserInterfaceOnly=True, çela fonctionne.

Que signifie donc "Opération utilisateur" ?
Merci beaucoup !

RE

De toute façon si on déprotège pour laisser l'utilisateur agir on ne met pas de paramètre. C'est à la reprotection qu'il faut le mettre le paramètre

donc pas trop compris

Bonjour,

Que signifie donc "Opération utilisateur" ?

= opération manuelle.
si tu dois autoriser un utilisateur (l'administrateur ou un utilisateur+ par exemple) à faire des opérations interdites sur la feuille, il faut la déprotéger momentanément.
eric

Merci, je comprends où tu veux en venir.

Dans mon cas, j'ai ajouté plusieurs macro pour permettre une opération utilisateur :

- bouton "modifier le document" (sauvegarde + déprotège la feuille)

- bouton "enregistrer modification" (protège la feuille, sachant que la sauvegarde aura lieu sur d'autres actions)

- bouton "fermer sans sauvegarder" (au cas où l'utilisateur rate ses modifications, ce qui l'oblige à tout recommencer mais ça ne devrait être que très très peu utilisé, voir pas du tout)

Bonne soirée !

Rechercher des sujets similaires à "code desactiver protection feuille chaque procedure module"