bonsoir,
La syntaxe ne comporte pas d'erreur.
Le problème c'est plutôt tes conditions d'utilisation de la feuille et du classeur.
La macro devrait fonctionner correctement dès lors que tu actives ta feuille en passant d'une feuille à l'autre.
Le problème c'est si ta feuille est l'unique feuille du classeur, je ne suis pas certain que l'évènement activate se déclanche. A plus forte raison si tu te précipites directement sur la feuille au sortir de VBA et que tu testes la macro. Aucun évènement Activate ne se déclanche pour la feuille et ...t'es chocolat !
Une macro est une véritable pièce d'horlogerie qui doit tenir compte d'un tas de petits trucs à coté...
Le remède le plus simple serait sans doute de suprimer macro
[b]Private Sub Worksheet_Activate()
ActiveSheet.Protect UserInterfaceOnly:=True
End Sub[/b]
et de coller une procédure équivalente dans ton Workbook_Open
Concrètement cette macro devrait faire l'affaire :
Private Sub Workbook_Open()
Sheets("TaBelleFeuille").Protect UserInterfaceOnly:=True
End Sub
... en remplaçant "TaBelleFeuille" par le nom de la feuille en question.
Mais si tu veux appliquer ça à plusieurs feuilles voire à toutes les feuilles il faudra bien sur adapter en fonction de ton environnement...
Cela marchera alors correctement après la prochaine ouverture du classeur.
Conseil : En dépit de leur apparente simplicité ces macros évènementielles sont assez casse bonbon surtout pour quelqu'un d'inexpérimenté ès macro. C'est une fausse bonne idée qu'il vaut mieux s'empresser d'oublier...
Pour de petits tableaux, il est souvent préférable d'utiliser une MFC qui colore systématiquement les lignes paires par exemple. C'est la plupart du temps bien suffisant pour améliorer notablement la lisibilité d'un tableau.
Il reste que pour de très longs tableaux une telle MFC n'est guère recommandable.
A+