certo che la cosa è singolare!
Se in un foglio valorizzo l'evento change:

codice:
Public Sub Worksheet_Change(ByVal target As Range)
    ValorizzoRegione target
End Sub
funziona perfettamente mettendo nella procedura ValorizzoRegione in un modulo:
for Each casella In Worksheets(2).Range("H2", "H21")
oppure
For Each casella In Range([Foglio2!H2], [Foglio2!H2].End(xlDown))
oppure
For Each casella In F2.Range(F2.[H2], F2.[H2].End(xlDown))
dove F2 è: Dim F2 As Worksheet: Set F2 = Worksheets(2)


se questo codice lo metto direttamente nella procedura di evento, funziona solo la prima soluzione, e non le altre due

ciao ancora