Ciao Dan
Innanzitutto mi scuso per la non tempestiva risposta.
Devo dire che subito dopo che ti ho allegato il precedente file ho pensato: e se uno sbaglia che succede? Un casino
Il codice l'ho scritto solo sulla base del file che tu hai allegato e su quanto hai detto.
Mi rendo conto però che la struttura che hai proposto non è molto rispondente a tutte le necessità (come il caso dell'errore.
Se vuoi (e per te non è un problema e dai un po' di tempo) proverei a farti una nuova proposta (ma non è detto che ci riesca).
Fammi sapere se sei d'accordo.