Non, tu n'as pas besoin de boucle.
Ta procédure reçoit Target en paramètre : c'est la cellule modifiée ayant déclenché l'évènement.
Sa ligne :
lig=target.row
Et si tu écris :
Cells(lL,14) = "=IF(AND(COUNT(RC[-6]:RC[-1])=0,COUNTA(RC[-6]:RC[-1])<=3),"""",(MAX(RC[-6]:RC[-1])))"
tu écris la formule dans la cellule, pas le résultat.
Soit tu le calcules directement en vba, soit tu mets :
ta_cellule= evaluate(ta_formule)
Mais essaie de traduire tes références L1C1 en A1, c'est plus lisible...
Ajoute au début
if target.cells.count >1 then exit sub sinon ça va planter si tu colles ou vides plusieurs cellules d'un coup.
Ou éventuellement traiter ces cas.
eric