Hi kriminaal,

Try this:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range, LastRow As Long, w As Worksheet
    LastRow = Range("A" & Rows.Count).End(xlUp).Row
    Set w = Sheets("Completed")
    
    ' The variable KeyCells contains the cells that will
    ' cause the macro to run when changed
    Set KeyCells = Range("D2:D" & LastRow)
    
    If Target.Count > 1 Then Exit Sub
    
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then
  
    If Target.Value <> "" Then
        Target.EntireRow.Copy _
            w.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
        Target.EntireRow.Delete Shift:=xlUp
    End If
  End If
End Sub