Private Sub Worksheet_Change(ByVal Target As Range)
Memorise Target, [I4:I300], "Zone1"
Memorise Target, [K4:K300], "Zone2"
Memorise Target, [U4:U300], "Zone3"
End Sub
Sub Memorise(Target As Range, plage As Range, zone$)
If Intersect(Target, plage) Is Nothing Then Exit Sub
Dim i, cel As Range
Application.EnableEvents = False
For i = 1 To plage.Count
Set cel = plage.Cells(i)
If Not (Intersect(cel, Target) Is Nothing Or IsNumeric(cel.Formula)) _
Then cel = Application.Index(Evaluate(zone), i)
Next
ThisWorkbook.Names.Add zone, plage.Formula 'mémorise
ThisWorkbook.Names(zone).Visible = False 'masquage facultatif
Application.EnableEvents = True
End Sub