Sapevo che non avrebbe funzionato alla prima versione, perche’ avevo INVENTATO una gestione delle anomalie che necessariamente doveva essere rivista in funzione die modi di lavorare dell’utente.
Ma avevo anche anticipato che secondo me quella cosa funziona meglio se il foglio Riepilogo ha gia’ la lista dei Soci e si lavora popolando quella lista.
Con questa convinzione in mente ho preparato il file che trovi qui:
https://www.dropbox.com/scl/fi/pr0zxqno ... 245wz&dl=0Il file contiene il foglio MASTRO, dove vengono registrate le entrate, e il foglio Riep, che contiene gia’ l’elenco dei Soci.
E’ opportuno che la colonna Causale di foglio MASTRO sia soggetta a Convalida, per evitare errori di inputazione
A questo scopo:
-ho immaginato che i movimenti possano riguardare sia la gestione Ordinaria che una o piu’ gestioni Straordinarie; ho predisposto fino a 3 gestioni Straordinarie
-In riga 1 di colonne O, R, U, X scrivo il “nome” delle gestioni ; nella colonna precedente scrivo in quante rate ogni gestione e’ stata suddivisa.
-tramite una macro di Worksheet_Change:
a) ogni volta che modifico il numero di rate di una gestione ricalcolo (nelle righe sottostranti) la sigla delle relative rate
b) riporto l’elenco delle sigle nella colonna F e assegno all’elenco delle sigle il “nome” myCONV; si potra’ impostare sulla colonna Casuale quindi la convalida “da elenco” con origine dell’elenco pari a
=myCONVNOTE:
1) nella tabella Mastro la prima colonna non deve avere vuoti
2) le aree di lavoro sono impostate con dei nomi
-l’inizio della tabella di riepilogo e’ nominata BaseRiep; la prima riga sara’ compilata con l’elenco delle possibili causali e le colonne destinate al riepilogo + una (alla destra) saranno ripulite dalla macro prima di cominciare
-l’area riservata a elencare le gestioni e il relativo numero di rate corrisponde al nome BaseRate, in cella N1;
-ogni gestione ha 3 colonne riservate (numero rate; nome gestione e sigle delle rate; una colonna libera eventualmente usabile per impostare la data di scadenza e aprirsi alla segnalazione di ritardi nei pagamenti)
-l’area dove si crea l’elenco delle causali comincia in M2, che ha il nome CONVLIST
E’ quindi facile spostare queste sezioni in altre parti del foglio Mastro (o anche in altri fogli)
3) Le sigle hanno un prefisso che corrisponde alla prima lettera della Gestione seguita eventualmente dal numero in fondo alla sigla della gestione (da qui O-Prima /Seconda... E1-Prima /seconda... che vedi nel fiile dimostrativo
4) La gestione degli errori elimina quelle @@@ o ### dal foglio Riepilogo e viene fatta con dei colori su foglio MASTRO
In particolare
-Rosso indica Nome oppure Causale non trovata; Giallo indica Causale già compilata (nell’elenco figura due volte la stessa causale); Verde indica voce allocata correttamente in Riepilogo.
La macro che crea il riepilogo corrisponde a questo codice:
- Codice: Seleziona tutto
Sub RiepXA()
Dim WArr, StarTab As Range, OTab As Range, Intest
Dim myMatch, myCol, I As Long, cNome As String, rNext
'
Set StarTab = Sheets("MASTRO").Range("A2") '<<< L'origine della tabella Mastro
Set OTab = Range("BaseRiep") 'L'origine del Riepilogo
'
Intest = Application.WorksheetFunction.Transpose(Range("myconv"))
'
WArr = Range(StarTab, StarTab.End(xlDown).Offset(0, 3)).Value 'Legge la tabella Mastro
StarTab.Offset(0, 1).Resize(UBound(WArr), 2).Interior.Color = xlNone
OTab.Offset(1, 1).Resize(10000, UBound(Intest) + 1).EntireColumn.ClearContents 'Pulisce l'area di Riepilogo
OTab.Offset(0, 1).Resize(1, UBound(Intest)).Value = Intest 'Mette le intestazioni su Riep
'
'Scansione della tabella di riepilogo:
For I = 2 To UBound(WArr)
cNome = WArr(I, 2)
myMatch = Application.Match(cNome, OTab.Resize(1000, 1), False) 'Cerca il Nome
If IsError(myMatch) Then
StarTab.Cells(I, 2).Interior.Color = RGB(255, 100, 100) 'Rosso=Nome non trovato
GoTo SkippA
Else
rNext = myMatch 'Riga del Nome
End If
myCol = Application.Match(WArr(I, 3), OTab.Resize(1, UBound(Intest) + 1), False) 'Cerca la colonna della Causale
If IsError(myCol) Then
Beep
StarTab.Cells(I, 3).Interior.Color = RGB(255, 100, 100) 'Rosso=causale non trovata
GoTo SkippA 'Marca e salta se non trovata
Else
If Len(OTab.Cells(rNext + 1, myCol)) = 0 Then
OTab.Cells(rNext, myCol) = WArr(I, 1) 'Se campo libero
OTab.Cells(rNext + 1, myCol) = WArr(I, 4)
StarTab.Cells(I, 3).Interior.Color = RGB(100, 255, 100) 'Verdino=Ok allocato
Else
StarTab.Cells(I, 3).Interior.Color = RGB(255, 255, 0) 'Giallo=già presente 'Se campo gia' usato
End If
End If
SkippA:
Next I
MsgBox ("Creato Riepilogo")
End Sub
Se, dopo i controlli, vuoi eliminare i colori che la macro applica allae colonne 2 e 3 della tabella mastro puoi usare questa macro:
- Codice: Seleziona tutto
Sub NoCol()
Sheets("MASTRO").Range("B2:C1000").Interior.Color = xlNone
End Sub
Vedi se riesci a fare qualche uso di quanto ti ho propinato...