Grazie Flash, grazie Anthony per le soluzioni proposte.
Flash, la tua macro funziona benissimo, ho dovuto modificarla ed adattarla in quanto mi faceva il controllo delle ore di presenza, cosa che già facevo con la seguente formula parametrizzata:
=SE($B15="";"";SOMMA.SE(INDIRETTO($D$7&"!$"&$F$11&"$"&$G$11-2&":$IV$"&$G$11-2);MESE(H$13);INDIRETTO($D$7&"!$"&$F$11&"$"&$G$11+$A15&":$IV$"&$G$11+$A15)))
dove:
$D$7&"! è il nome del corso che scelgo da un elenco a discesa nella cella $D$7 del foglio di riepilogo;
$"&$F$11 è la colonna di partenza che trovo nella cella $F$11;
$G$11-2 fino a fine foglio $IV$"&$G$11-2 è la riga, nel foglio del corso, dove trovo il mese da confrontare ;
$G$11+$A15 è la riga da cui sommare le ore (per avere la riga effettiva con le ore effettive infatti sommo la cella $A15 che è l'indice dell'alunno.
La tua formula l'ho modificata così:
- Codice: Seleziona tutto
Sub Compila()
Application.ScreenUpdating = False
Application.Calculation = xlManual
Worksheets("Riep. Corso").Range("H15:H44,J15:J44,L15:L44,N15:N44,P15:P44,R15:R44,T15:T44,V15:V44").Value = 0
For N = 15 To 34
For i = 8 To 163
mese = Month(Worksheets("Criminologia").Cells(13, i).Value)
CellaMese = mese * 2 - 2
If Worksheets("Criminologia").Cells(N, i).Value = "A" Then GoTo Salta
If Worksheets("Criminologia").Cells(N, i).Value >= 3 Then Worksheets("Riep. Corso").Cells(N, CellaMese).Value = Worksheets("Riep. Corso").Cells(N, CellaMese).Value + 1
Salta:
Next i
Next N
Call CompilaSt
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Sub CompilaSt()
For NS = 46 To 60
For i = 8 To 67
mese = Month(Worksheets("Criminologia").Cells(44, i).Value)
CellaMese = mese * 2 - 2
If Worksheets("Criminologia").Cells(NS, i).Value = "A" Then GoTo Salta
If Worksheets("Criminologia").Cells(NS, i).Value >= 3 Then Worksheets("Riep. Corso").Cells(NS - 31, CellaMese).Value = Worksheets("Riep. Corso").Cells(NS - 31, CellaMese).Value + 1
Salta:
Next i
Next NS
End Sub
Facendo incrementare il valore della cella di riepilogo di 1 ogni volta che le ore di corso sono maggiori o uguali a 3.
Inoltre, visto che quando il conteggio dei giorni era uguale a 0 (ore < 3) non scriveva nulla nella cella ho impostato il valore di cancellazione a 0, anche se questa modifica mi fa impostare nel foglio di riepilogo (Riep. Corso) tutte le celle delle colonne di calcolo dei giorni a 0 anche se non ho alunni.
Se fosse possibile visualizzare lo 0 solo se esiste il nome alunno, sarebbe perfetto.
Devo ancora provare a parametrizzare la macro in modo che venga preso il nome del foglio dalla cella $D$7 del foglio "Riep. Corso", ti farò sapere ma se hai suggerimenti questi sono bene accetti.
inoltre se fosse possibile automatizzare la stessa macro ed eseguirla non appena modifico il nome corso nella cella $D$7, o non appena attivo il foglio "Riep. Corso" tutto sarebbe automatico, cioè esecuzione della macro di riepilogo e ricalcolo delle ore che il "somma.se" esegue automaticamente non appena cambio il nome del corso.
Antony,Volevo provare anche la funzione da te suggerita, la quale semplificherebbe il tutto, ma ho guardato le istruzioni della funzione e credo serva anch'essa a fare la somma delle ore e non dei giorni in cui la presenza è >=3, per cui non sono andato oltre.
Grazie mille a tutti e due per il supporto veramente veloce e professionale che date a tutti noi su questo Forum, e a risentirci presto.
Fabrizio