Probleme Protection Partielle Avec worksheet Change
bjr,
Après de multiples recherches sur le sujet, j'ai vu que l'on pouvait protéger partiellement une feuille excel avec un UserInterfaceOnly..
Ce mode de protection permet normalement de laisser les macros interagir sur la feuille concernée mais force est de constater que je sèche inévitablement sur ce souci chez moi.
Sur le fichier exemple joint, en Feuil2 j'aurais aimé que ma liste de validation fonctionne correctement et affiche le résultat escompté sans message d'erreur ou de fermeture intempestive d'excel ?! (Cf. code en Workbook Open et Worksheet Change)
le reste des cellules doivent être protégées.
Merci pour ceux qui se pencheront sur mon cas.
Cordialement
Bonjour,
Boire ou conduire... il faut choisir !
Si -dans ThisWorkbook- tu choisis :
Sheets("Feuil2").Protect , userinterfaceonly:=True...Tu ne peux pas changer ton fusil d'épaule dans la procédure Test.
Donc :
With sht
.Protect Password:="toto", userinterfaceonly:=True
.EnableSelection = xlUnlockedCells
End With...est à supprimer (ou vice versa...)
Nota : la propriété userinterfaceonly:=True est un peu volatile : A chaque fois que tu plantes VBA aevc une erreur d'exécution, VBA "oublie" que userinterfaceonly:=True aussi dans la période de bricolage intense ou tu as des chance de planter souvent ton programme, il peut être utile de mettre une piqure de rappel au début des macros qui risquent de planter.
Mais de toute façon une fois ta protection choisie tu ne devrais plus en changer.
Mais pour Test2 le problème ne vient pas tant de la protection que de la procédure Worksheet_Change : Les procédures Change sont un peu caractérielles : Si tu mets dans ta procédure change une macro qui change une cellule dans ta feuille, ça va appeler à nouveau la procédure change qui va appeler à nouveau la procédure change qui va appeler à nouveau la procédure change qui...
Habituellement on utilise les procédures Change surtout pour ouvrir des Userform, mais surtout pas pour modifier la feuille hôte.
Il existe bien des procédures pour éviter ce genre d'inconvénients mais selon mon avis c'est à réserver à des utilisateurs expérimentés.
Si tu tiens absoluement à utiliser Worsheet_Change en boucle, tu peux procéder de la manière suivante :
Sub Test2()
Application.EnableEvents = False
If Sheets("Feuil2").Range("B3") = "satanas" Then
Sheets("Feuil2").Range("C6") = "Ce serait bien que cela fonctionne !"
ElseIf Sheets("Feuil2").Range("B3") = "abdulila" Then
Sheets("Feuil2").Range("C6") = "Mince alors !"
ElseIf Sheets("Feuil2").Range("B3") = "mortelle" Then
Sheets("Feuil2").Range("C6") = "oups....!"
End If
Application.EnableEvents = True
End SubAttention cette instruction (Application.EnableEvents = False) est dangereuse : Si pour une raison ou une autre il se produit une erreur et que le programme sort de la macro sans lire le Application.EnableEvents = True qui suit, Excel ne réagit plus et tu et obligé d'éteindre ton ordinateur pour t'en sortir...
A+
Salut Galopin,
MERCI pour ta réponse, celle-ci a le mérite d'être plus claire que sur certain forum.
Je me suis débrouillé avec un Protect / UnProtect classique adossé à un Worksheet Selection Change.
Merci.
Bon Weekend