Private test As Boolean 'déclare la variable test
Private Sub Worksheet_Change(ByVal Target As Range) 'à chaque édition dans l'onglet
'si l'édition a lieu ailleurs que dans la plage A2:A65536, sort de la procédure
If Application.Intersect(Target, Range("A2:A65536")) Is Nothing Then Exit Sub
If test = True Then Exit Sub 'si la variable test est vrai, sort de la procédure
If UCase(Target.Value) = "OUVERT" Then 'condition 1 : si l'édition est "OUVERT" (accepte aussi les minuscules)
'la cellule à droite prend la plus grande valeur de la colonne B + 1
Target.Offset(0, 1).Value = Application.WorksheetFunction.Max(Range("B2:B65536")) + 1
End If 'fin de la condition 1
If UCase(Target.Value) = "CLOS" Then 'condition 2 : si l'édition est "CLOS" (accepte aussi les minuscules)
test = True 'définit la variable test (=vrai, évite la boucle de cette macro)
Rows(Target.Row).Cut 'coupe la ligne ou a eu lieu l'édition
Rows("2:2").Insert Shift:=xlDown 'la colle en ligne 2 en décalant les autres vers le bas
End If 'fin de la condition 2
test = False 'redéfinit la variable test (=faux)
End Sub