In the routine that is populating the 1st listbox, set a module/class-scope boolean to True:
bUpdatingList = True
In the routines that are running when they ought not, add
If bUpdatingList = True Then Exit Sub
Of course, when the list gets filled, the first element becomes current.††That represents a change of SelectedValue, which in turn raises the event...
Or am I missing the specifics of the problem?
(Had to edit to fix spelling...:()