This code is odd--why would you assign five different values to the same cell? Only that last one matters.

What module is this code in? Is it the same sheet that you want to detect changes in? If it is not, that's your problem. If it is, then put in a breakpoint or a MsgBox call to see if it is entering the code. Better yet, attach your file here.

Private Sub Worksheet_Change(ByVal Target As Range)

MsgBox "Change detected in cell " & Target.Address

If Target.Address <> "$E$9" Then Exit Sub

Application.ScreenUpdating = False
Application.EnableEvents = False

Worksheet("PPW").Range("E9") = A
Worksheet("PPW").Range("E9") = B
Worksheet("PPW").Range("E9") = C
Worksheet("PPW").Range("E9") = D
Worksheet("PPW").Range("E9") = E

Call Update_PPW_GPMPct

Call Filter_Details

Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub