Je m'en remets à vous pour ce problème en fichier joint.
J'ai une zone de cellules (fond bleu) non verrouillées et j'ai laissé le reste de la feuille par défaut (avec verrouillage donc).
Ce fichier est juste un exemple pour que vous compreniez mon problème : j'ai une macro qui se lance via un bouton avec les arguments Unprotect et Protect et mot de passe (2009).
Le prolbème est que quand je lance ma macro, elle reprotège la feuille, mais on ne peut plus mettre en forme les cellules de la zone bleue (sachant qu'il n'y a que celle-là où je voudrais changer la mise en forme).
NB : je ne veux pas qu'il soit possible de changer la mise en forme des cellules verrouillées, et je voudrai dans l'idéal qu'il ne soit pas possible de sélectionner les cellules verrouillées.
lors de la protection de la feuille, au moins a partir de la version 2003, il faut autoriser "format de cellule" dans la liste "autoriser tous les utilisateurs de cette feuille à :"
Oui, mais le problème est que cette protection est faite par marco.
Je peux ajouter l'argument Content:=False il me semble (après ActiveSheet.protect (2009)), mais le problème est qu'il sera possible de changer la mise en forme des cellules verrouillées également, alors qu'idéalement, je voudrais que ce changement de mise en forme ne soit possible que pour les cellules non verrouillées.
peut être en dé-cochant "sélectionner les cellules verouillées", et en autorisant "sélectionner les cellules déverouillées" et "format de cellule". Dans ce cas tu ne pourras pas sélectionner de cellules veriouillées, donc pas appliquer de format...
Oui, en effet, ça peut être une solution. Pour résumer, j'en suis à ajouter à la fin de la macro :
Code:
ActiveSheet.Protect (2009) contents:=True
L'argument "AllowFormattingCells" ne serait-il pas plus adapté?
Enfin, existe t'il un argument à ajouter pour empecher la selection des cellules verrouilées? (comme lorsque l'on verrouille "à la main" en décochant Selectionner les cellules verrouillées)
A noter, pour éviter de déprotéger / protéger les feuilles lors de l'exécution d'une macro, tu peux également protéger ta feuille lors de l'ouverture du classeur en utilisant l'argument "UserInterfaceOnly" :
code à placer dans le module "thisworkbook"
Code:
Private Sub Workbook_Open()
With Sheets("Feuil1")
.EnableSelection = xlUnlockedCells
.Protect "2009", , , , True, True
End With
End Sub
Je suis en train d'essayer d'appliquer ce que tu viens de me dire au fichier que je dois améliorer. Le problème est qu'il est totalement différent du fichier exmple que j'ai mis ici, et je m'attendais à une solution plus simple.
A noter, pour éviter de déprotéger / protéger les feuilles lors de l'exécution d'une macro, tu peux également protéger ta feuille lors de l'ouverture du classeur en utilisant l'argument "UserInterfaceOnly" :
code à placer dans le module "thisworkbook"
Code:
Private Sub Workbook_Open()
With Sheets("Feuil1")
.EnableSelection = xlUnlockedCells
.Protect "2009", , , , True, True
End With
End Sub
oui, tout à fait, plus besoin de déprotéger / protéger dans le code des macros, par contre attention au nom de la ou des feuilles concernées par tes différentes procédures.
J'essaye ça, en enlevant tous les Unprotect et Protect que j'avais déjà placé. Je crois comprendre qu'en plus, ta solution permet d'empecher la selection des cellules verrouillées? Et en plus de changer le contenu des cellules non verrouillées (enfin, de toutes les cellules, mais comme on ne pourra selectionner que les non verrouillées)?
J'ai donc l'impression que ça correspond parfaitement à ce que je recherchais.
Merci beaucoup, je reviendrai sur ce fil en cas de pépin.
J'essaye ça, en enlevant tous les Unprotect et Protect que j'avais déjà placé. Je crois comprendre qu'en plus, ta solution permet d'empecher la selection des cellules verrouillées? Et en plus de changer le contenu des cellules non verrouillées (enfin, de toutes les cellules, mais comme on ne pourra selectionner que les non verrouillées)?