Eh, tra poco non ci capisco piu' nemmeno io e cosi' siamo pari...
Punti fermi:
-in un file Excel (il termine giusto dovrebbe essere "Cartella di lavoro", oppure Workbook) ci sono uno o piu' Fogli (o Fogli di lavoro).
-non ha senso parlare di primo file, secondo file, altro file, e cosi' per termini vaghi che ognuno interpreta a suo sentimento.
Quindi da adesso usiamo la terminologia giusta e i nomi veri; cosi' io non sono costretto a chiamare "foglio che contiene il riepilogo" un foglio che certamente tu l'avrai chiamato in un modo preciso. E se questo modo preciso corrispondesse al nome "Dettaglio" allora non vedo la furbizia a volersi confondere dando a un foglio di riepilogo un nome che invece non fa pensare al riepilogo.
Ripartiamo dal file che avevi pubblicato il 5/11 pomeriggio
Si chiama dettaglioSpese_08-09_08-10.xls
Contiene un foglio chiamato Dettaglio
Questo file ha le celle di colonna D ("Data e Ora") e F ("Costo €") in formato Stringhe.
Aggiungiamo a questo file la Sub ConvertiDate2 (vedi codice nel mio messaggio del 5/11 sera tardi,
viewtopic.php?f=26&t=108865&p=639997#p639829)La macro va inserita in un "Modulo standard del vba" di quel file. Immagino che sai farlo; nel caso che "Invece No", allora, partendo dal file excel:
-premi Alt-F11 per aprire l'editor delle macro
-Menu /Inserisci /Modulo
-copia il codice e incollalo nel frame vuoto di destra.
Torniamo su excel ed eseguiamo, tenendo attivato il foglio Dettaglio (e' l'unico foglio, non si puo' nemmeno fare diversamente) lancia la Sub ConvertiDate2. Immagino che sai farlo, ma nel caso che "Invece No", allora, partendo dal foglio Excel:
-premi Alt-F8
-scegli ConvertiDate2 dall'elenco di macro disponibili
-premi Esegui
In questo modo abbiamo "normalizzato" le colonne D ed F
Siccome vogliamo creare un riepilogo, siccome questo e' il primo foglio elaborato allora questo risultato puo' essere il file che da adesso chiamiamo Riepilogo-Spese.xls
Siccome e' un "riepilogo", rinominiamo il foglio "Dettaglio" in modo piu' consono; chiamiamolo quindi "Riepilogo"
Pertanto:
-rinomina il nome foglio e chiamalo Riepilogo
-su questo foglio, formatta le colonne D ed F come meglio ti piace (es la colonna F con 5 decimali?)
-salva il file assegnandogli il nome Riepilogo-Spese.xls
Ora abbiamo cominciato il file di riepilogo, contiene gia' un mese
Ti arriva il secondo file, dello stesso formato del dettaglioSpese_08-09_08-10.xls che poco fa abbiamo trasformato file Riepilogo-Spese.xls
Apri il file Riepilogo-Spese.xls, e copiagli dentro il foglio Dettaglio proveniente dal "secondo file"; spero che tu lo sappia gia' fare; nel caso che "Invece No" allora:
-partendo dal secondo file, tasto dx sul tab col nome foglio "Dettaglio"
-scegli "Sposta o Copia"
-nella finestrella Sposta o copia che ti si apre, scegli "Alla cartella:" = Riepilogo-Spese.xls; "Prima del foglio:" = "(sposta alla fine)"; spunta Crea una copia; premi Ok
Ora il file Riepilogo-Spese.xls contiene un foglio Riepilogo e un foglio che dovrebbe chiamarsi Dettaglio; il foglio Dettaglio va normalizzato sulle colonna D ("Data e Ora") e F ("Costo €"). Per questo usiamo nuovamente la Sub ConvertiDate2, tenendo attivo il foglio da normalizzare (cioe' Dettaglio).
Ora che il foglio Dettaglio e' stato normalizzato possiamo copiarlo in coda al foglio Riepilogo, per creare un riepilogo che si allunga.
Per questo useremo la Sub AccodaNew. Copiamo quindi il suo codice e inseriamolo nello stesso Modulo in cui avevamo inserito la Sub ConvertiDate2, in coda al codice esistente.
Per evitare equivoci, il codice che useremo e'
- Codice: Seleziona tutto
Sub AccodaNew()
Range(Range("A8"), Range("A8").End(xlDown).End(xlToRight)).Copy _
Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End Sub
Sai gia' come eseguire la Sub AccodaNew, che lancerai tenendo attivo il foglio Dettaglio appena "normalizzato".
Se sei stato curioso avrai "PRIMA" controllato quante righe c'erano nel foglio Riepilogo, in modo da accorgerti che "DOPO" AccodaNew ci sono altre righe in piu', quelle che provengono dal foglio Dettaglio.
Il nostro Riepilogo si sta' ingrossando, quindi vuoi vederlo ordinato per data.
Per questo decidi di seguire le istruzioni che ti ho dato oggi pomeriggio per registrare in proprio la macro; le ripeto, non si sa mai:
La sequenza che devi fare e' questa:
a) Vai sul foglio del riepilogo e mettiti in A1 (questa istruzione non te l'avevo mai data ma serve al punto d successivo); poi selezioni un foglio diverso dal riepilogo.
b) Avvia la registrazione macro (usando le opzioni disponibili nel tab Sviluppo del menu di Excel)
c) selezioni il foglio di riepilogo
d) selezioni A7 (poiche' la selzione era in A1, il comando "seleziona A7" viene certamente inserito nella macro), premi Contr-Shift-FrecciaDestra, premi Contr-Shift-FrecciaInBasso (esatto Shift, non usare CapsLock). Vedi Nota1
e) comandi l'ordinamento, usando i comandi di Excel per impostare le chiavi e le opzioni di ordinamento e la sua esecuzione. Vedi Nota2
f) selezioni A7
g) Interrompi la registrazione
Eseguo queste istruzioni e registro la Sub Macro1, che mi viene messa in Modulo2 del vba e che ha questo codice:
- Codice: Seleziona tutto
Sub Macro1()
' Macro1 Macro
' Ordinamento Riepilogo
'
Sheets("Riepilogo").Select
Range("A7").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("Riepilogo").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Riepilogo").Sort.SortFields.Add Key:=Range( _
"D8:D673"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Riepilogo").Sort
.SetRange Range("A7:M673")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A7").Select
End Sub
Adesso ho una macro per Normalizzare le colonne D ed F del foglio mensile; una macro per accodare il foglio mensile al foglio Riepilogo; una macro per Ordinare il foglio Riepilogo.
Poiche' vanno lanciate in sequenza una dopo l'altra, tanto vale metterle in una macro complessiva che le richiama una dopo l'altra.
Dovresti sapere come inserire in una macro la Call di un'altra macro, ma nel caso che "Invece No" allora te la do io gia' fatta:
- Codice: Seleziona tutto
Sub FaiTu()
Call ConvertiDate2
Call AccodaNew
Call Macro1
End Sub
La Sub FaiTu andrebbe lanciata tenendo attivo il foglio Dettaglio; allora tanto vale che lo scriviamo nella macro cosi' non sbagliamo, in piu' ci mettiamo un messaggio di "Fatto". Quindi il codice che useremo e' invece:
- Codice: Seleziona tutto
Sub FaiTuttoTu()
Sheets("Dettaglio").Select
Call ConvertiDate2
Call AccodaNew
Call Macro1
Application.DisplayAlerts = False
'Sheets("Dettaglio").Delete '<<<*** Vedi Nota1
Application.DisplayAlerts = True
MsgBox ("Normalizzato foglio di Dettaglio e accodato a Riepilogo")
End Sub
Mettilo nello stesso Modulo vba in cui si trovano la Sub ConvertiDate2 e la Sub AccodaNew.
Questo e' tutto...
Controlla a occhio che nel foglio Riepilogo ci siano anche le date provenienti dal foglio Dettaglio, e quindi rimuovi il foglio Dettaglio. Salva il nuovo file di riepilogo.
Nota1: Dopo un po' di volte che usi il processo e sei ragionevolmente convinto che funzioni tutto regolarmente allora puoi togliere l'apostrofo in testa all'istruzione marcata <<<*** e il foglio Dettaglio sara' cancellato automaticamente dalla stessa Sub FaiTuttoTu.
Quando hai un nuovo file da aggiungere al tuo file di riepilogo:
-apri il file Riepilogo-Spese.xls
-copiaci il foglio Dettaglio proveniente dal nuovo file mensile; assicurati che sul file Riepilogo-Spese.xls il nome sia esattamente Dettaglio, perche' la macro se lo aspetta con quel nome.
-puoi chiudere il nuovo file mensile
-puoi lanciare la Sub FaiTuttoTu
-controlli che l'esito sia soddisfacente
-puoi cancellare (a mano o direttamente con la macro) il foglio Dettaglio appena importato su Riepilogo.
-salvi il nuovo file di riepilogo
E cosi' via nei secoli dei secoli.
Amen