Private Sub Worksheet_Change(ByVal Target As Range)
Dim h&, tabval
With [A1].CurrentRegion.Resize(, 2)
h = .Rows.Count
If h = 1 Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
If .Rows(h).Find("", , xlValues) Is Nothing Then 'si la dernière ligne est pleine
Application.Undo 'annule les modifications
tabval = .Value 'tableau des valeurs
Application.Undo 'rétablit les modifications
.Resize(h - 1) = tabval 'entre les valeurs en écrasant les formules
Else
.Columns(2).Offset(1).Resize(h - 1) = "=A2*D$2" 'rétablit les formules
End If
Application.EnableEvents = True 'réactive les évènements
End With
End Sub