Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim adr$, col%, lig&
With Target
If .CountLarge > 1 Then Exit Sub
adr = .Address(0, 0): col = .Column: lig = .Row
'AR AG7-AG9 : Commissions
If adr = "AG7" Then [AG9].Select: Exit Sub
If adr = "AG9" Then [AG7].Select: Exit Sub
'AR B4-E4 : Price-Capital ; AR T3-W3-Z3 : Instrument-Leverage-Increment
If adr = "T3" Then [U2] = 1 Else If adr = "Z3" Then [U2] = 2
If adr = "B4" Or adr = "T3" Or (adr = "W3" And [U2] = 1) Then .Offset(, 3).Select: Exit Sub
If adr = "E4" Or adr = "Z3" Or (adr = "W3" And [U2] = 2) Then .Offset(, -3).Select: Exit Sub
'Way L S L L : aller 1 ligne plus bas et 6 colonnes à droite ; puis de AA6 en C4
If InStr("C2 I3 O4 U5", adr) > 0 Then .Offset(1, 6).Select: Exit Sub
If adr = "AA6" Then [C4].Select: Exit Sub
'colonnes I O U : 6 colonnes à droite (sauf restrictions selon n° ligne)
If (col = 9 And lig > 5) Or (col = 15 And lig > 6) _
Or (col = 21 And lig > 7) Then .Offset(, 6).Select: Exit Sub
'de AA en I : 1 ligne plus bas et 18 colonnes à gauche (sauf restriction ligne)
'=> ça passe automatiquement à la ligne suivante ; si tu préfères rester
'sur la même ligne, supprime le 1 => met plutôt : .Offset(, -18).Select
If col = 27 And lig > 7 Then .Offset(1, -18).Select: Exit Sub
Dim vx$: vx = .Value: If vx = "" Then Exit Sub
'quitter la sub si la colonne est autre que I O U ou AA,
'car ce qui suivra ensuite ne concerne que ces colonnes.
If col <> 9 And col <> 15 And col <> 21 And col <> 27 Then Exit Sub
Dim dlg&, k As Byte: dlg = Cells(Rows.Count, 2).End(3).Row: k = col \ 6 + 4
Application.ScreenUpdating = 0: Application.EnableEvents = 0
If lig >= k And lig <= dlg Then
If col <> 9 And .Offset(-1, -3) = "" Then .Offset(-1).ClearContents: GoTo 1
Range(Cells(k, col), Cells(dlg, col)).ClearContents: .Value = vx
End If
1 Application.EnableEvents = -1
End With
End Sub