Calcoliamo la quantità di turni fatti nel mese.
A quanto ho capito, non interessa sapere quanti turni di giorno o di notte siano stati fatti, e questo facilita le cose.
Possiamo risistemare il modulo formattaFoglio togliendo la tabella dei turni di giorno e nominando soltanto i turni fatti di notte (la quantità relativa di diurni e notturni sarà un problema che dovranno scornarsi a livello di reparto).
Bene.
Mi salvo il modulo, però...
Ecco la routine copiaLista rimaneggiata:
Private Sub copiaLista()
Dim elemento As Range
Dim k As Integer, z As Integer
z = 15 '(posizione iniziale della lista dei nomi del mese)
For k = 1 To Range("ListaNomi").Rows.Count
ActiveSheet.Cells(z, 6).FormulaR1C1 = Range("ListaNomi").Cells(k, 1).FormulaR1C1
ActiveSheet.Cells(z, 7).FormulaR1C1 = Range("ListaNomi").Cells(k, 2).FormulaR1C1
z = z + 1
Next k
ActiveWorkbook.Names.Add Name:="ListaNomiMese", RefersTo:="=" & Range(Cells(15, 6), Cells(z - 1, 6)).Address(True, True)
Griglia Range("ListaNomiMese")
ActiveWorkbook.Names.Add Name:="ListaReparti", RefersTo:="=" & Range(Cells(15, 7), Cells(z - 1, 7)).Address(True, True)
Griglia Range("ListaReparti")
ActiveWorkbook.Names.Add Name:="NumeroTurni", RefersTo:="=" & Range(Cells(15, 8), Cells(z - 1, 8)).Address(True, True)
Griglia Range("NumeroTurni")
For Each elemento In Range("NumeroTurni")
elemento.HorizontalAlignment = xlCenter
elemento.Formula = 0
Next
With ActiveSheet
With .Cells(Range("ListaNomiMese").Row - 1, 6)
.FormulaR1C1 = "NOME"
.HorizontalAlignment = xlCenter
End With
Griglia Cells(Range("ListaNomiMese").Row - 1, 6)
With .Cells(Range("ListaNomiMese").Row - 1, 7)
.FormulaR1C1 = "REP."
End With
Griglia Cells(Range("ListaNomiMese").Row - 1, 7)
With .Cells(Range("ListaNomiMese").Row - 1, 8)
.FormulaR1C1 = "GIORNO"
End With
Griglia Cells(Range("ListaNomiMese").Row - 1, 8)
.Columns(6).ColumnWidth = 26
Exit Sub
With .Columns(7)
.ColumnWidth = 6
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
With .Columns(8)
.ColumnWidth = 6
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
End With
End Sub
Praticamente ho tolto la colonna dei turni di mattina, rinominando la colonna NumeriNotti in NumeroTurni e basta.Inoltre ho aumentato un po' l'altezza delle righe.
Adesso cerchiamo di calcolare il numero di turni come avevo fatto precedentemente.
Il principio che avevo usato era:
Conservare in una variabile la stringa eliminata dalla cella;
Considerare la nuova stringa della cella come Bersaglio.Formula;
Cercare nella lista la stringa eliminata dalla cella e ridurre di 1 il numero dei turni;
Cercare nella lista la stringa nuova della cella e aumentare di 1 il numero dei turni.
In fondo è semplicissimo!
Proviamo...
Sub calcola()
Dim x As Range
Set x = Range("ListaNomiMese").Find(lastcaption)
If x Is Nothing = False Then x.Offset(0, 2).Formula = x.Offset(0, 2).Formula - 1
Set x = Range("ListaNomiMese").Find(Bersaglio.Formula)
If x Is Nothing = False Then x.Offset(0, 2).Formula = x.Offset(0, 2).Formula + 1
End Sub
Eccola: dovrebbe essere perfetta.Se vado su una cella vuota, lastcaption è vuota, quindi il range Find di lastcaption è Nothing.
In questo caso, però, non succede nulla perché si agisce sui punteggi solo se il range Find non è Nothing. Quindi si provvererà soltanto a sistemare il punteggio della nuova caption di Bersaglio.
Analogamente, se io vado su una cella con un nome e ci voglio trascrivere il menu vuoto, prima trovo lastcaption, e aggiusto il suo punteggio, quindi il range Find della stringa vuota è Nothing, quindi non succede niente al punteggio.
Dovrebbe funzionare alla perfezione. Molto semplice ed evita i casini di contare ogni volta i nomi, che è di un lento e di un dispendioso pazzesco!
Nessun commento:
Posta un commento