Private test As Boolean 'déclare la variable test
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
If test = True Then Exit Sub 'si test est vraie, sort de la procédure
dl = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row 'définit la dernière ligne dl
Set pl = Range("B9:I" & dl) 'définit la plage pl
If Application.Intersect(Target, pl) Is Nothing Then Exit Sub 'si le changement a lieu ailleurs que dans la plage pl, sort de la procédure
If Application.WorksheetFunction.CountA(Application.Intersect(Rows(Target.Row), pl)) = 1 Then 'condition : si le nombre de valeurs dans la ligne du changement est égal à 1
test = True 'définit la variable test (évite la boucle à chaque changement)
Rows(Target.Row).Copy 'copie la ligne de la celule editée
Cells(Target.Row + 1, 1).Insert shift = xlDown 'l'insère une ligne en dessous
Range(Cells(Target.Row + 1, 1), Cells(Target.Row + 1, 9)).ClearContents 'supprimme les données de la ligne insérée
test = False 'redéfinit la variable test
End If 'fin de la condition
End Sub