Private Sub Worksheet_Change(ByVal Target As Range)
Static noEvents As Boolean ' variable qui permet de strapper le traitement sur demande
If noEvents Then Exit Sub ' sortie sur demande
If Intersect(Target, [H6:H9]) Is Nothing Then Exit Sub ' sortie si cellule modifiée n'appartient pas à la plage
If Target = "" Then ' si vide
noEvents = True ' l'criture va rappeler Worksheet_Change on sait ce qu'on va écrire, pas la peine de traiter
Target = "Remplir ici"
noEvents = False ' écritures terminées, on rétablit la supervision
Target.Font.ColorIndex = 3
Else
Target.Font.ColorIndex = 1
End If
End Sub
Ceci dit j'ai vu que tu écrivais dans la plage depuis un module standard.
Si tu estimais inutile de traiter puisque tu sais ce que tu fais, il faudrait pouvoir modifier noEvents depuis ce module,
Dans ce cas il faut supprimer sa déclaration de la proc et la déclarer publique dans un module standard, en tête, en dehors de toute procédure qu'elle soit visible de partout :
Public noEvents as boolean
(comme pour varToutEffacer)
Mais là j'ai l'impression que ça t'arrange bien de la laisser tourner puisque qu'elle te met les cellules dans l'état voulu, autant en profiter. Ce n'est donc pas impératif de modifier ça actuellement.
noEvents est crée pour éviter l'utilisation de Application.EnableEvents = False qui suspend la supervision des événements (à rétablir après avec =True), sans entrer dans une boucle sans fin non plus.
Ca devrait t'éclairer sur le fonctionnement
eric