Orario scolastico rivisitato
Lo stimolo per ripresentare questo modellino mi è pervenuto da un visitatore del blog, che mi ha chiesto di aggiornarlo in modo da tener conto anche di lezioni pomeridiane. La cosa, confesso, mi ha molto lusingato perché accompagnata da apprezzamenti e dopo un andirivieni di chiarimenti ho proceduto alla modifica. Resa attuale, superfluo dirlo, dall’imminente inizio dell’anno scolastico.
E già che c’ero, oltre a cambiare il layout – ampliato ma concettualmente simile se non identico al predecessore – ho apportato qualche miglioria, in particolare sfruttando la formattazione condizionale in conformità a quanto già fatto con un file Rapportino.xls pubblicato sul sito dell’amico Emanuele Mattei www.dotnetromacesta.org.
il file denominato (per abuso di fantasia) Orario_Scuola.xls si lascia scaricare dal link seguente:
http://www.giannigiaccaglini.it/download/Orario_Scuola.xls
Come usare il modello
Premesso che le figure qui sotto citate per pigrizia non rispecchiano del tutto le ultime modifiche (senza che questo crei confusione fra gl’intelligenti lettori...), la figura 1 mostra l’aspetto del Foglio1 etichettato Tabellone, evidenziando subito i successivi fogli elettronici, a loro volta denominati eloquentemente:
- Orario classi
- Orario docenti
- Guida
http://www.giannigiaccaglini.it/Files/FigOrarioScuola-01.jpg
Figura 1 (acquisizione diretta sul tuo PC)
Nota L’ultimo riporta sintetiche indicazioni sull’utilizzo del modello, pertanto qui non lo descrivo proprio.
Come presto si scopre, la navigazione fra i primi tre fogli è possibile anche cliccando sulle immagini che riproducono un orologio (incollato sia nel Foglio1 che nel Foglio2) e una classe di studenti + prof. Provare per credere, qui dico solo che non si tratta di macro, bensì di legami ipertestuali locali a nomi di zona associati a tali figurine.
Per rendere il tutto moderatamente “chiuso”per l’utente finale ho tolto dalla vista varie sovrastrutture come la griglia e le intestazioni di righe e colonne. Va anche detto che il modello per amor di semplicità è affetto da limitazioni varie (tra cui i nomi di sole tre classi) ma si presta a molti adattamenti (come l’eliminazione delle lezioni pomeridiane o, più banalmente, le varie stampe).
Consiglio In tal caso agli utilizzatori esperti desiderosi di personalizzazioni converrà ripristinare, almeno, le intestazioni, per “vederci più chiaro” e in particolare visitare più agevolmente le formule descritte più avanti.
Dall’esame del Tabellone si evince subito come si estrinseca l’operatività. Le colonne a destra riportano i nomi dei docenti (di discutibile umorismo) con accanto la materia di ciascuno, mentre in tutte le altre cellette, raggruppate in sei unità orarie di lezione mattutine più cinque pomeridiane, vanno digitate le predette sigle 1a, 2a e 3a delle tre ipotetiche classi. È immediato notare che i primi due di tali input (1a e 2a) sono automaticamente colorati in rosso e, rispettivamente in blu, in conseguenza di una prima formattazione condizionale. La seconda formattazione del genere colora con sfondo giallo le assegnazioni scorrette consistenti nell’affibbiare a una medesima classe due insegnanti diversi (*), una situazione che la figura non evidenzia, in compenso mostra il messaggio “Ci sono 2 assegn.ni doppie...” che spunta nella cella B27 in conseguenza di tale errore.
Agendo sulle barre di scorrimento orizzontale sulla destra si mettono in luce i giorni da giovedì a sabato (figura 2), mantenendo la vista delle materie e dei docenti, ottenuta congelando tali colonne con comandi che diamo per noti. A dire il vero nel modello finale abbiamo previsto di eliminare il pomeriggio del sabato ma nessuno se ne scandalizzerà, si spera.
http://www.giannigiaccaglini.it/Files/FigOrarioScuola-02.jpg
Figura 2
Uso dell’Orario Classi e dell’Orario Docenti
La figura 3 mostra il Foglio2, dedicato all’orario della classe, scelta attingendo dalla casella a discesa in alto.
http://www.giannigiaccaglini.it/Files/FigOrarioScuola-03.jpg
Figura 3
Come è facile rendersi conto gli elementi di tale casella, controllo “classico” di Excel, sono appunto le classi poste nell’elenco nome Classi (J1:J3). La cella di collegamento in cui la scelta viene riversata ha nome NumClasse (D2, celata sotto il controllo) e conterrà gl’indici 1, 2 o 3. Di conseguenza la cella subito sopra l’orario (C5), con la formula =”Classe ”&Classe esibirà ovviamente “Classe 1” o “Classe 2” o “Classe 3”.
Nella figura 4 si vede infine il Foglio3, dedicato all’orario del docente, scelto quest’ultimo pescando nella casella a discesa in alto (“Scegli il professore”).
http://www.giannigiaccaglini.it/Files/FigOrarioScuola-04.jpg
Figura 4
Liquidiamo l’arcano ricordando le mosse necessarie: clic destro => Formato controllo => scheda Controllo, ove sono subito visti l’Intervallo di input (Docenti) e il Collegamento Cella (NumProf).
Ai non digiuni di Excel cui mi rivolgo non mi resta altro da dire che:
- Docenti è l’intervallo B6:B20 posto sul foglio Tabellone;
- NumProf (cella B2, celata sotto il controllo) è l’indice del docente scelto;
- La cella B13 posta sopra l’orario contiene =INDICE(Docenti;NumProf) di evidente semantica.
L’Orario Classi
Due sono le cose notevoli, la formula base e la particolare formattazione condizionale.
La prima si riassume nella formula seguente, piuttosto avanzata!, che riporto limitatamente alla cella d’angolo in alto a sinistra (C8):
C8=INDICE(Materie;CONFRONTA(Classe;SCARTO(Materie;0;$B8+C$6);0))
Copiata, anzi inserita con la manovra Ctrl+Invio, nell’intero intervallo C8:H18 (poi eliminando le celle del sabato pomeriggio) produce il (mirabile!) risultato che ci si attende. Le due spiegazioni basilari sono qui sotto riassunte:
Ø L’intervallo battezzato Materie ha coordinate C6:C20 e giace sul foglio Tabellone;
Ø L’argomento $B8+C$6, in virtù dell’aggiustamento automatico dei riferimenti misti se si riflette corrisponde alla somma dei valori delle celle di colonna B e di riga 6; ora le seconde recano i valori C6=0; D6=11; E6 =22;...; H6=55.
Insomma si tratta di multipli di 11, pari al numero totale di ore giornaliere (nel caso di un orario solo mattutino tale passo sarebbe pari a 5 o 4... ma come avete fatto a indovinare?). A buon intenditore non posso dire altro.
Quanto alla formattazione condizionale, in questo caso colora in giallo le celle che, come riporta la figura 3, antecedente all’applicazione di tale formato, darebbero indicazione #N/D!. Per scoprire questo altarino, si selezioni la zona C8:H18, poi si attivi l’opzione in parola e si scelga Gestisci regole => Modifica regola ecc., scoprendo infine che il qui presente autore ha impostato in tale zona “Formatta solo le celle che contengono errori”.
La zona in basso a sinistra (accanto all’orologio da taschino) contiene formule la cui facile disamina è lasciata per esercizio.
L’Orario Docenti e un nuovo sguardo al Tabellone
Anche il terzo foglio del modello a questo punto lo lascio all’esegesi autogestita del paziente lettore, al quale riporto solo la formula della cella d’angolo:
C17=SCARTO(Tabellone!D$6;NumProf-1;$A13)
Replicata, manco a dirsi, nell’intero intervallo C17:M22.
Torniamo piuttosto al Tabellone, con le mosse seguenti:
- attivare tale foglio;
- selezionare la cella D22;
- con la scorciatoia di tastiera Maiusc+Ctrl+Invio selezionare l’intero intervallo D22:BK24, scoprendo altresì che tali celle hanno il formato numerico personale ;;; che cella i valori (prendere nota per il futuro...);
- navigare con Invio e/o Maiusc+Invio in tale zona.
Si constateranno le formule seguenti:
D22:BK22=CONTA.SE(D$6:D$20;"=1a")
D23:BK23=CONTA.SE(D$6:D$20;"=2a")
D24:BK22=CONTA.SE(D$6:D$20;"=3a")
Nelle precedenti espressioni ho, con qualche arbitrio, indicato l’intera zona in cui è inserita la formula delle rispettive celle d’angolo D22, D13 e D24.
Riflettendo si comprende che, nei tre casi, vengono contate le occorrenze “1a”, “2a" e “3a" delle soprastanti colonne D6:D20; E6:E20;... ; BK6:BK20. Se tutto è OK si dovrebbero avere tutti valori 1 o 0 (in assenza di assegnazioni, come nel modello, per mia pigrizia). Solo in presenza di assegnazioni scorrette, ossia multiple sono possibili valori maggiori di 1.
A questo punto, con F5 ci si porti nella cella denominata Test, di formato nascosto ma in cui scopriamo la formula seguente:
=SOMMA(D22:BK24)-CONTA.SE(D22:BK24;1)
Ripassando, dovutamente, le funzioni di sommatoria – semplice e condizionata – si afferra che tale formula restituisce un valore maggiore di zero nel caso anomalo dei doppioni, che quindi la seguente formula in B7 denuncia (rivedere la figura 1):
=SE(Test>0;"Ci sono "&Test&" assegn.ni doppie! Controlla!";"")
Resta da chiarire la particolare formattazione condizionale fin dall’inizio vantata (assente nella figura 1 “scattata” prima). Per comprenderla, si selezioni l’intervallo di tutti gli orari, poi con manovre già viste per la formattazione condizionale dell’Orario Docenti si pervenga alla definizione ivi impostata. Questa corrisponde all’opzione Definisci una formula che nella fattispecie è del tipo “Formatta i valori per cui questa formula restituisce Vero” e corrisponde alla seguente:
=O(D$22>1;D$23>1;D$24>1)
Il cerchio si chiude e chi l’ha voluta capire... non ha bisogno di altri discorsi.
Veniamo alle macro, molto sinteticamente
Da quanto abbiamo finora descritto si evince che il modello si fonda quasi soltanto su formule e formati condizionali, per cui il suo funzionamento base è operativo anche se è disabilitato il VBA.
Consiglio Addirittura suggeriamo di tacitare, in prima battuta, la macro Verifica posta sul modulo Foglio1, aggiungendovi in testa un brutale Exit Sub:
Private Sub Verifica()
Exit Sub
Cominciamo con tre macro banali, ospitate nel Modulo1:
Sub StampaTabellone()
Range("Tabellone").PrintPreview
End Sub
Sub StampaClasse()
Range("OrarioClasse").PrintPreview
End Sub
Sub StampaDocente()
Range("OrarioDocente").PrintPreview
End Sub
Connesse ai pulsanti (classici) omonimi, danno l’anteprima di stampa che tutti si attendono, sfruttando il metodo PrintPreview applicato ai tre non equivochi intervalli indicati.
Si ponga poi attenzione alla macro dell’evento di chiusura del modello, sita in ThisWorkbook:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Saved = True
End Sub
La routine “inganna Excel” facendogli credere che il file sia stato salvato, per cui lo chiude senza far nulla. Attenzione, dunque! Eliminare se si vuole tale macro, che però serve a mantenere integro il layout (e altro) a meno di modifiche consapevoli dell’utente esperto (l’alternativa sarebbe il ricorso a un modello “vero e proprio”, di estensione xlt o xltx/xltm in Excel 2007).
Per dovere di cronaca riporto inoltre senza commenti il macrocodice più pregiato, presente sul modulo Foglio2 e connesso stavolta al pulsante ActiveX CommanButton1:
Private Sub CommandButton1_Click()
Dim InizOrari As Range, ZonaOrario As Range, _
Nr As Integer, Nc As Integer, i As Integer, Scarto As Integer
Set InizOrari = Range("InizOrari")
With Range("OrarioClasse")
Nr = .Rows.Count: Nc = .Columns.Count
End With
Scarto = 0
For i = 1 To Range("Classi").Cells.Count
Range("NumClasse") = i
With InizOrari
With .Offset(Scarto, 1)
.Value = "Classe " & Range("Classe")
.Font.Bold = True
End With
Set ZonaOrario = Range(.Cells(1, 1), .Cells(Nr, Nc)).Offset(Scarto + 1, 0)
ZonaOrario = Range("OrarioClasse").Value
Bordi ZonaOrario
End With
Scarto = Scarto + Nr + 2
Next
InizOrari(5).Select
End Sub
Sub Bordi(Zona As Range)
'Sintesi della routine registrata (v. sotto), basata sul fatto che i vari tipi
'di bordo vanno da xlEdgeLeft = 7 a xlInsideHorizontal = 12 con gradualità:
'xlEdgeTop = 8; xlEdgeBottom = 9; xlEdgeRight =10; xlInsideVertical =11
Dim TipoBordo As Integer
For TipoBordo = xlEdgeLeft To xlInsideHorizontal
With Zona.Borders(TipoBordo)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Next TipoBordo
End Sub
Tale codice dovrebbe inserire nella parte bassa del foglio Orario Classi una serie di tabelle del genere:
|
|
Orari di tutte le classi |
|
|
|
Classe 1a |
|
|
|
|
|
|
Ora |
Lunedi |
Martedì |
Mercoledì |
Giovedì |
Venerdì |
Sabato |
|
1 |
Matematica |
Ragioneria |
Italiano |
Italiano |
#N/D |
Informatica |
|
2 |
Matematica |
Ragioneria |
Italiano |
Italiano |
#N/D |
Scienze |
Classe 2a
Eccetera...
Ne lascio l’analisi interamente ai visitatori più scafati. Idem infine per la routine Verifica sopracitata. Anzi non la riproduco nemmeno, dicendo solo che ha il compito di colorare in giallo le colonne del tabellone che presentano doppioni, ed è richiamata dagli eventi di attivazione e disattivazione del foglio Tabellone:
Private Sub Worksheet_Activate()
Verifica
End Sub
Private Sub Worksheet_Deactivate()
Verifica
End Sub
Palesemente questo pur grazioso marchingegno è superato dall’adozione della specifica formattazione condizionale (ricordarsene sempre, per casi analoghi!). Inoltre offre il fianco a critiche a causa del suo andazzo altalenante, che impedisce l’accesso al Foglio2 in quanto forza la selezione del Foglio1 in caso di assegnazioni multiple.
Comunque l’ho lasciato per lo spasso dei più curiosi ed esperti. Buon divertimento!
?>