Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim plg As Range, chn$, vx$
With Target
If .CountLarge > 1 Then Exit Sub
Application.ScreenUpdating = 0: Application.EnableEvents = 0
'1ère plage -----------------------------------------------------
Set plg = [I5:I533]
If Not Intersect(Target, plg) Is Nothing Then
vx = .Value: If vx <> "" Then plg.ClearContents: .Value = vx
GoTo 1
End If
'2ème plage -----------------------------------------------------
Set plg = [O6:O533]
If Not Intersect(Target, plg) Is Nothing Then
vx = .Value: If vx <> "" Then plg.ClearContents: .Value = vx
GoTo 1
End If
'autre plage ----------------------------------------------------
chn = "R3, X3, AD3, AD5, C2, I3, O4, U5, AA6, B4, F4, " _
& "C4, U7:U533, AA8:AA533"
If Intersect(Target, Range(chn)) Is Nothing Then GoTo 2
1 .Offset(-1).Select '1 ligne plus haut
2 Application.EnableEvents = -1
End With
End Sub