Use your first answer but make this small change:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("RE_1").Address Then
Call RE_environmental
End If
End Sub
Simple syntax mistake!
Edit: To stop RE_environmental from running once the cell is empty, put the code from RE_environmental inside a do-while (not isempty(Range("RE_1"))) as long as RE_environmental is emptying "RE_1". The user won't be able to edit cells while RE_environmental is running.