Bonjour,
Excel a lancé la procédure évènementielle
Sub Worksheet_Change(ByVal Target As Range) car au moins une cellule a été modifiée.
Dans cette procédure, vous modifiez des cellules.
Dès la première cellule modifiée par le code, Excel détecte un second évènement Worksheet_Change et relance la procédure Sub Worksheet_Change(ByVal Target As Range) (il met l'exécution de la première en mémoire pour y revenir plus tard autrement dit "il empile").
Dans cette deuxième procédure, vous modifiez encore une cellule. Excel détecte un troisième évènement Worksheet_Change et relance la procédure Sub Worksheet_Change(ByVal Target As Range) (il met l'exécution de la seconde en mémoire pour y revenir plus tard autrement dit "il empile" une deuxième fois).
On a donc deux empilements maintenant.
Et ainsi de suite. A un moment donnée, à force d'empiler, Excel VB sature la mémoire, provoque un débordement et une erreur survient.
Pour inhiber ce phénomène, VBA dispose de l'instruction
Application.EnableEvents = False qui empêche VBA de déclencher les actions évènementielles même si l'évènement se produit.
Dans votre procédure avant les lignes de code modifiant les cellules, insérerez la ligne A
pplication.EnableEvents = False.
N'oubliez pas - Très important! Après les lignes de code modifiant les cellules, ajoutez la ligne Application.EnableEvents = True pour réactiver le fonctionnement normal d'Excel.
Pour bien faire, il faudrait aussi faire la gestion d'une éventuelle erreur entre le
Application.EnableEvents = False et le Application.EnableEvents = True mais chaque chose en son temps.
edit : Bonjour @BrunoM45 .