You're trying to overload the Event Sub. IMO, Events subs should only determine which other Procedures to run. This style code structure allows one Event Sub to handle many different event locations.

Pseudocode. edit to suit

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Count > 1 Then Exit sub 'Something changed several ranges at once
   If not Intersect(... rngKGTonnes)... Then Sub 1
   If not Intersect(... rngCentKG).... Then sub 2
End Sub
Private sub 1
Application.EnableEvents = False 'Don't trigger another event
   'Code to fill in Cents/Kg
Application.EnableEvents = True
Private sub 2
Application.EnableEvents = False
   'Code to fill in KG/Tonnes
Application.EnableEvents = True