Non ero scomparso, stavo solo meditando...
La mia proposta e' inclusa nel file che puo' essere scaricato qui:
https://www.dropbox.com/s/xj7zh4u3cr6pm ... .xlsm?dl=0Noterai che c'e' un foglio nuovo, chiamato "2e3"Questo foglio e' usato per una pianificazione dei turni 2 e 3 lunga a piacere, ed e' organizzato in questo modo:
-da B1 verso destra ci sono tutti i nominativi; la riga 1 e' riservata solo ai nominativi!
-in B2 e B3 vengono calcolati per ogni nominativo i turni calendarizzati, che incrementano man mano che si calcolano nuovi turni. La formula prevede max 2000 righe di date (piu' di 5 anni, dovrebbero bastare).
-in A4 si mette la data iniziale da cui si vuole calcolare (in realta' poi la macro cerchera' il primo Lunedi')
-in A5 viene calcolata la data successiva come A4+1
-copiando la data da A5 verso il basso si determina il periodo che si vuole pianificare
-l'area da BU in avanti ora contiene formule usate per la verifica dei risultati (turni per data, min/max per Turno); se devi aggiungere altri Nominativi oltre i 63 previsti ti consiglio di aggiungere altre colonne per mantenere queste formule almeno 3 colonne distanti dai nominativi, e sotto ogni nominativo vanno copiate le formule di riga2 e riga3.
Questo foglio viene popolato tramite la macro DueAndTre, che ho inserito in Modulo5 del vba.
La programmazione verra' indicata come T2 e T3.
La prima volta l'area dei turni sara' vuota; dopo aver compilato i Nominativi, le formule sottostanti ai nominativi, la data iniziale in A4 e le formule in colonna A che determinano il periodo da calendarizzare, si potra' allora lanciare la macro DueAndTre che compilera' i turni del periodo, garantendo il miglior bilanciamento possibile tra i nominativi e controllando che le due settimane precedenti siano libere.
Ho rinunciato a controllare via mcro l'eventuale azzeramento del calendario turni, quindi tocca all'utente cancellare eventuali turni futuri, ad esempio (a) perche' cambia il numero di turni da garantire (ora sono 9 e 7; vengono letti da foglio "generale"), o (b) perche' si aggiunge un nominativo che quindi deve entrare nella turnazione.
A) Nel caso (a) bisogna cancellare dal primo lunedi' in cui si vuole un numero diverso di turni in avanti, ricompilare foglio "generale" AH17 e AH18; quindi lanciare la macro DueAndTre
B) Nel caso B la situazione e' appena piu' complessa: bisogna inserire il nuovo nominativo in coda agli esistenti, inserire le formule di riga2 e riga 3, e cancellare i turni dal primo lunedi' in cui e' prevista la partecipazione del nuovo nominativo. Rimane da fare un "allineamento figurativo" tra i turni fatti da tutti gli altri e il nuovo nominativo, altrimenti la macro cerchera' di assegnare al nuovo venuto tanti turni per metterlo al passo degli altri, cosa che (oltre che irregolare per il nuovo venuto) rallenterebbe alquanto la velocita' della macro viste le eccezioni che essa si troverebbe a gestire.
Per fare questo allineamento figurativo:
-leggere max e min dei turni fatti da tutti gli altri, sia per T2 che per T3; nel mio foglio questi dati sono calcolati in BW e BX, riga2 (T2) e riga3 (T3)
-scrivere nella colonna sottostante il nuovo nominativo tante volte FT2 e FT3 quanti sono i turni che gli mancano (solo perche' non era presente e non era pagato...); in questo modo le nuove turnazioni saranno equamente bilanciate tra tutti.
C'e' ovviamente anche il caso che un nominativo venga sostituito; in questo caso il suggerimento e' di sostituire in riga1 (e nei fogli Mensili futuri) il vecchio nominativo con il nuovo e mantenere la turnazione calcolata assegnandola al nuovo arrivato.
Oppure che un nominativo venga cancellato; in questo caso bisogna "marcare" come non piu' disponibile un certo nominativo; questo si fa accodando al nominativo la stringa convenzionale "#ND" (anche minuscolo); esempio: nominativo3_#ND
Contemporaneamente bisogna cancellare le formule presenti in riga2 e riga3 sotto il nominativo non piu' disponibile".
Poi si cancellano le turnazioni dalla data di non disponibilita' della risorsa e rilanciare la Sub DueAndTre. Un caso di questo tipo e' riportato in colonna BA; se lanci la Sub DueAndTre daccapo (dopo aver cancellato tutti i turni presenti) quel nominativo non sara' inserito nella turnazione.
C'e' infine la possibilita' che si vogliano eliminare turni vecchi non piu' necessari; es i turni fatti "l'anno scorso". Per questo:
-sulla prima data che vuoi mantenere fai F2-F9-Enter per trasformare la formula in data
-seleziona la prima cella di colonna A che vuoi mantenere (quella dove hai fatto F2-F9-Enter) ed estendi fino alla fine della colonna e oltre di almeno 10 righe; estendi fino all'ultima colonna con un nominativo.
-fai Contr-C (copia)
-seleziona A4 e premi Enter (per incollare)
-controllare dove l'incolla finisce e cancellare da colonna A fino a tutte le colonne con nominativi da lì verso il basso.
Questa sequenza dovrebbe preservare le formule utilizzate in Riga2 e riga3 e quelle che ho messo dopo le colonne BU. TUTTAVIA in questo modo potrebbero sparire eventuali "allineamenti figurativi", tipicamente inseriti in testa all'elenco e quindi candidati a essere facilmente eliminati. Quindi prima di partire a cancellare vecchie date controllate sempre che i turni contabilizzati in riga2 e riga3 siano bilanciati (dovrebbero max differire di 1-2); rifate poi il controllo dopo aver cancellato le vecchie date, e inserite gli "allineamenti figurativi" (FT2 e FT3) necessari per bilanciare.
Quindi in sostanza nel foglio "2e3" dovresti calcolare la turnazione dei turni T2 e T3 per un periodo piu' o meno lungo (fino a 2000 righe = 5 e passa anni)
Finita la compilazione delle turnazioni, si puo' passare a
popolare i vari mesi.
In questo caso ci si limitera' a prelevare i dati dal foglio 2e3 per copiarli nel foglio del mese prescelto.
Questo lavoro deve essere fatto per ogni foglio mensile, utilizzando la Sub PopolaMese, sempre inserita in Modulo5.
Operativamente:
-si seleziona un foglio mensile, si avvia la Sub PopolaMese.
La macro controlla che il foglio selezionato abbia il nome di un mese (non controlla la coerenza tra il nome del foglio e la data impostata in A1-anno ed E1-mese).
Poi cancella tutti i "T2" e "T3" eventualmente presenti sul foglio.
Poi cerca nel foglio "2e3" e riporta giorno per giorno la turnazione dei nominativi coinvolti.
E' necessario che i nominativi elencati in questi fogli mensili siano gli stessi presenti nel foglio 2e3; quindi vanno risolte preventivamente le eventuali omonimie.
In caso che un nominativo trovato su foglio 2e3 non sia presente sul foglio mensile viene segnalato un errore, e quel turno non sara' presente sul foglio mensile; risolto l'errore si puo' o rilanciare la Sub PopolaMese oppure compilare il turno mancante a mano.
Mi fermo perche' forse ho detto anche troppo senza sapere se quanto fatto ha una reale applicabilita' alla tua esigenza.
Ciao.