Verrouillage de fichier

Bonjour à tous,

Petite question : comment faire pour verrouiller un fichier Excel (pas de modification des cellules) mais tout en laissant la possibilité d'exécuter une macro ?

Je vous explique ça un peu mieux ^^ --> J'ai créé un fichier professionnel dans lequel j'ai énormément de formules. Mes collègues se servent de ce fichier mais à part les formules basiques, ils n'ont pas la maîtrise du tableur. Et j'ai vraiment peur qu'ils ne bidouillent quelque chose par mégarde, et franchement refaire tout le fichier avec le temps que j'ai passé à le réaliser, non merci !

Or, j'ai intégré un filtre automatique, avec un bouton lié à une macro que j'ai enregistrée et qui me permet d'effectuer ce filtre en un clic.

Le problème est là : avant de mettre en place le bouton avec la macro, lorsque je verrouillais mon fichier, les cellules verrouillées n'étaient pas modifiables. Tip top. Lorsque j'ai inclus la macro, pas possible de la faire fonctionner avec le verrouillage. Du coup, petit tour chez mon ami Google, et sur un forum j'ai trouvé un "excelleur" qui donnait le code VBA suivant pour régler ce problème :

Private Sub Workbook_Open()

Sheets("Synthèse").Protect "lemotdepasse", DrawingObjects:=False, UserInterfaceOnly:=True

End Sub

Sauf que, effectivement à présent la macro marche quand le fichier est verrouillé... Mais tout le reste aussi ! Malgré le verrouillage du fichier, je peux modifier toutes les cellules, changer toutes les formules, bref, retour case départ...

Alors sachant que le VBA je n'y connais vraiment pas grand-chose et que les macro je ne sais les créer qu'en les enregistrant... Je suis in the wall...

Un petit coup de main please ?

Bonjour,

pas sûr que ça t'avance beaucoup mais.... J'ai fait un test de mon côté : proteger la feuille, faire une macro avec un msgbox, et la macro fonctionne parfaitement.

C'est peut-être ce que contient ta macro qui bloque? Que fais-tu avec?

Si c'est nécessaire tu peux enlever la protection de la feuille le temps d'exécuter ton code :

Sheets("nomfeuille").Unprotect

La protection par défaut a ce code, tu peux le remettre une fois que ta macro a finis de tourner :

Sheets("nomfeuille").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

Bonjour,

Pourquoi tu mets ton code à l'ouverture du fichier ?

Active la désactive la protection de la feuille au début de la macro et

réactive la protection de la feuille à la fin de la macro.

Euh alors question bête, mais dsl mon niveau en VBA est plus bas que le niveau de la mer... :

Comment je sais que le code n'est qu'à l'ouverture du fichier ? moi j'ai bêtement recopié une formule trouvée sur le net xD

Concrètement je dois écrire quoi comme code ?

Ausecour, ce que tu appelles "msgbox" c'est le bouton inséré par l'onglet développeur ?

Une msgbox c'est une fenêtre qui s'ouvre pour afficher un message, tu peux essayer ce code pour voir par toi même :

Sub test()
Msgbox("test")
End Sub

Euh alors question bête, mais dsl mon niveau en VBA est plus bas que le niveau de la mer... :

Comment je sais que le code n'est qu'à l'ouverture du fichier ? moi j'ai bêtement recopié une formule trouvée sur le net xD

Concrètement je dois écrire quoi comme code ?

Re, si le code se trouve dans : Private Sub Workbook_Open() alors c'est à l'ouverture du fichier.

Pour résumer : si la feuille protégée est la même que celle qui contient le bouton qui lance la macro :

' Alors au début de ta macro :

ActiveSheet.Unprotect Password:="Ton mot de passe"

'.....et à la fin de ta macro :

ActiveSheet.protect Password:="Ton mot de passe"

En PJ le code tel qu'il est inscrit dans mon fichier.

Donc, si je comprends bien, il faut que j'écrive :

Private Sub Workbook_Open()

Sheets("Synthèse").ActiveSheet.Unprotect Password:="Ton mot de passe", DrawingObjects:=False, UserInterfaceOnly:=True

End Sub

Sheets("Synthèse").ActiveSheet.protect Password:="Ton mot de passe"

code vba

Il y a ce code aussi en PJ

La PJ n'est pas passée grr

code vba2

Je pense plutôt que la macro dont tu parlais au début se trouve dans "module"

La PJ n'est pas passée grrcode VBA2.jpg

C'est justement une macro pour enlever le mot de passe d'une feuille Lol

Sauf que dans l'état la macro ne fonctionnera pas le mot de passe pour déprotéger n'est pas le même que celui pour protéger

Bonjour,

Ne surtout pas faire Sheets("nomfeuille).activesheet

tu fais soit active sheet soit Sheets("nomfeuille") (ce que je recommande).

Il faut que ta ligne de protection soit la même pour l'ouverture de ton fichier et pour la fin de ta macro, prends la ligne de code que tu montres dans ta deuxième pièce jointe, mais encore une fois préfères utiliser Sheets("nomfeuille")

Tu as trouvé ta macro dans module ?

c'est là qui faut mettre les lignes.

'.. au début

ActiveSheet.Unprotect Password:="Ton mot de passe" <------ le mot de passe que tu as utilisé pour protéger la feuille.

'.....et à la fin de ta macro :

ActiveSheet.protect Password:="Ton mot de passe" <--------- le même mot de passe.

( avec les guillemets ).

La ligne se met en rouge... Signification ?

Le code en Workbook je dois le supprimer ?

code vba3

Remplace ActiveSheet par Sheets("nomfeuille") et true,true,true par DrawingObjects:=True, Contents:=True, Scenarios:=True

Une fois fait, tu mets cette ligne à la place de celle que tu as dans Workbook open

Une observation :

A la base : le premier post la protection était sensée servir afin que ses collègues ne puissent modifier ou supprimer des formules.

Le problème venait lors du lancement de la macro.

Si tu enlèves la protection à l'ouverture du fichier ( donc dans "Workbook.open()" alors ok la macro fonctionne mais les collègues peuvent aussi modifier ou supprimer des cellules.

Donc saisir les lignes dans Ta macro qui se trouve dans module...

Remplace ActiveSheet par Sheets("nomfeuille") et true,true,true par DrawingObjects:=True, Contents:=True, Scenarios:=True

Une fois fait, tu mets cette ligne à la place de celle que tu as dans Workbook open

Oui ce sera plus simple d'activer l'objet au moins on reste dans workbook open

Bonjour,

ce code concernant un événement classeur doit être placé dans le module ThisWorkbook.

eric

Rechercher des sujets similaires à "verrouillage fichier"