Scusate se mi sovrappongo, ma avevo gia' da giorni preparato una risposta che poi non so per quale motivo non ho pubblicato...
Per Sancho:
secondo me tu sei partito esattamente dalla direzione inversa: cioe' non dovresti scrivere i dati Mensili e poi chiederti come fare un elenco Annuale, ma compilare un unico elenco annuale e poi con i tool di Excel trasformarlo in "viste" mensili, cosa che si fa facilmente con lo strumento Tabella pivot.
Anche l'idea di consolidare i dati mensili in DUE fogli mi sembra sbagliata, perche' dovresti consolidare su un unico foglio.
Cio' detto, una macro come questa ti consentira' di creare quando vuoi un aggiornamento per i fogli Entrate e Uscite fino all'ultimo inserimento presente nei fogli mensili.
- Codice: Seleziona tutto
Sub ytdSancho()
Dim CMaxD As Long, I As Long, mySh As Worksheet, myAgg As Long
Dim myLastE As Long, myLastU As Long, J As Long
'
myLastE = Application.WorksheetFunction.Max(Sheets("Entrate").Range("A:A"))
myLastU = Application.WorksheetFunction.Max(Sheets("Uscite").Range("A:A"))
'
For I = 1 To 12
Set mySh = Sheets(Format(DateSerial(2015, I, 25), "mmm"))
CMaxD = Application.WorksheetFunction.Max(mySh.Range("A:A"))
If CMaxD > myLastE Or CMaxD > myLastU Then
For J = 4 To mySh.Cells(Rows.Count, 1).End(xlUp).Row
'Check se Entrate:
If mySh.Cells(J, 1) > myLastE Then
If Application.WorksheetFunction.CountIf(Range("Vendite"), mySh.Cells(J, 4)) > 0 Then
Sheets("Entrate").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 4).Value = _
mySh.Cells(J, 1).Resize(1, 4).Value
myAgg = myAgg + 1
End If
End If
'Check se Uscite:
If mySh.Cells(J, 1) > myLastU Then
If Application.WorksheetFunction.CountIf(Range("Vendite"), mySh.Cells(J, 4)) = 0 Then
Sheets("Uscite").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 4).Value = _
mySh.Cells(J, 1).Resize(1, 4).Value
myAgg = myAgg + 1
End If
End If
Next J
End If
Set mySh = Nothing
Next I
MsgBox ("Aggiornati Entrate e Uscite" & vbCrLf & "Totale righe inserite: " & myAgg)
End Sub
Inseriscili in un nuovo Modulo del progetto vba: da excel, premi Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di dx.
Presuppone che tu abbia creato da qualche parte nel tuo file un elenco delle voci che siano associate alle "entrate" (fallo piu' lungo delle attuali tre voci e lascia le altre righe per ora vuote) e che a questo elenco hai dato il nome "Vendite". Sara' usato per determinare se la riga appartiene alle Entrate o altrimenti alle Uscite.
A questo punto salvi il file (in un formato abilitato alle macro).
Poi all'occorrenza mandi in esecuzione la macro ytdSancho: da Excel, premi Alt-F8, scegli "ytdSancho" dall'elenco di macro disponibili, premi Esegui.
La macro inserira' nei fogli di riepilogo le voci fino alle date inserite.
Attenzione che la macro considera "congelati" i dati gia' riportati in Entrate e Uscite (precedente esecuzione della macro); quindi, una volta che hai cominciato a creare i riepiloghi, aggiunte su fogli "vecchi" o cancellazioni (anche sul foglio "corrente mese") verranno quasi sicuramente ignorate (il "quasi" e' riferito al fatto che se la data dell'operazione aggiunta fosse superiore all'ultima riepilogata nella sua classe allora sarebbe presa in considerazione).
Comunque puoi sempre cancellare il contenuto dei fogli Entrate e Uscite e la macro ricreera' il contenuto da gennaio.
I fogli devono essere nominati gen, feb, mar, etc come nell'esempio del file pubblicato; le intestazioni dei fogli Entrate e Uscite le metterai a mano prima di eseguire la macro.
Ciao a tutti.