Ciao Alessandro,
l'utilizzo del codice VBA non è strettamente indispensabile per ottenere ciò che chiedi.
Come tu stesso hai osservato si possono percorrere strade alternative, basandosi sulle formule, che consentono di ottenere un risultato simile.
Tuttavia la modifica della cella di inserimento (quella oggetto di convalida) non è possibile tramite le formule, devi necessariamente appoggiarti su altre celle o "accontentarti" di alternative.
Qui entra in gioco il codice e nello specifico la gestione degli eventi del foglio di lavoro.
Sia la mia soluzione che quella proposta da Andrea, pur nella loro diversità, si basano sull'evento Change del foglio di lavoro, evento che viene scatenato quando viene modificata una cella all'interno del foglio. L'evento viene eseguito automaticamente
(a patto che le macro siano abilitate) e ti consente di intercettare il valore inserito nella cella modificandolo senza che l'utente si accorga di nulla.
Perchè disabilito gli eventi?
Li disabilito, temporaneamente, perchè l'evento change, come detto, viene richiamato dalle modifiche intervenute nelle celle. Se guardi la macro ti accorgerai che io modifico il valore VERO in 1 e FALSO in 0. Ciò comporta una modifica nella cella, modifica
che scatena un nuovo evento Change prima che il precedente abbia concluso il suo corso. In sostanza avrai 2 chiamate, la seconda delle quali del tutto inutile (almeno nel caso in questione). Disabilitando gli eventi la modifica via codice viene ignorata e
il codice conclude il suo corso riabilitando gli eventi prima dell'uscita dalla routine.
Ponendo un punto di interruzione nel codice ed eseguendo lo stesso passo-passo potrai tu stesso verificare quando sopra.
David