Ma questi controlli sono da fare mentre i fogli vengono compilati, non a posteriore... Né ha senso che a Maggio si vada a controllare se il mese di Gennaio era compilato correttamente...
La mia proposta:
A) sui fogli mennsili metti una formattazione condizionale che evidenzi le righe Q che devono ancora essere compilate:
-selezioni Q8:S38
-imposti la formattazione condizionale con la formula
- Codice: Seleziona tutto
=(CONTA.VALORI($L8:$P8)>0)*($Q8="")
-come formato scegli lo sfondo Rosso
In questo modo se le colonne L:P sono compilate e la colonna Q e' vuota la cella di colonna Q si colorera' di rosso
B) come ulteriore possibilita' di controllo, in una cella libera dei fogli mensili,
io ho usato Z1, conta quante righe in Q8:Q38 sono in anomalia, tramite la formula
- Codice: Seleziona tutto
=SOMMA(--((LUNGHEZZA(L8:L38&M8:M38&N8:N38&O8:O38&P8:P38)>0)*(Q8:Q38="")))
La formula e' da confermare tramite la combinazione Contr-Maiusc-Enter, non il solo Enter
A questo punto si fa il controllo su Salva e su Stampa, inserendo sul modulo
Questa_cartella_di_lavoro del progetto vba questo codice:
- Codice: Seleziona tutto
Dim shErr As Boolean
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Call CkFogli
Cancel = shErr
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call CkFogli
Cancel = shErr
End Sub
Sub CkFogli()
Dim CK As Long
'
shErr = False
CK = CkZ1("Z1")
If CK <> 0 Then
Sheets(CK).Select
MsgBox ("Ci sono errori su foglio da correggere")
shErr = True
End If
End Sub
Function CkZ1(Optional ByVal aaDDR As String = "Z1") As Long
Dim NoCheck, I As Long
'
NoCheck = Array("Foglio1", "Sommario", "FoglioPippo") '<<< i Nomi foglio da ignorare
'
For I = ThisWorkbook.Worksheets.Count To 1 Step -1
If IsError(Application.Match(Sheets(I).Name, NoCheck, False)) Then
If Sheets(I).Range(aaDDR).Value <> 0 Then
CkZ1 = I
Exit Function
End If
End If
Next I
End Function
Il modulo deve essere vuoto; se invece e' gia' presente del codice allora pubblicalo perche' dobbiamo verificare la compatibilita' con questo codice.
In questo modo:
-durante la compilazione dei moduli l'utente ha una indicazione visuale che qualcosa non va
-se prova a Salvare o Stampare allora viene fatto un controllo di Z1 dei fogli di lavoro, e se Z1 indica un valore diverso da Zero quel foglio viene selezionato e un messaggio avverte che ci sono degli errori da recuparare.
Nel codice della Sub CkFogli c'e' la possibilita' di dichiarare i nomi dei fogli che non devono essere controllati (vedi istruzione marcata <<<)
Ciao
PS: non ho trovato nessuna correlazione tra questo quesito e la discussione precedente a cui l'avevi accodato (
viewtopic.php?f=26&t=111937), l'ho quindi trasformato in una nuova discussione.