Condividi:        

[EXCEL] Caricamento dati da files con accodamento

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[EXCEL] Caricamento dati da files con accodamento

Postdi fcudia » 27/07/09 11:14

Buongiorno ad Anthony e Flash e buongiorno a tutti,
Ho da sottoporvi un altro problema, ho letto diversi altri post relativi all'import di dati da file esterni, ma mi sono incasinato nel mettere in pratica le spiegazioni, anche perché le loro esigenze erano diverse dalle mie e la mia esperienza con le macro non è tantissima, per non dire pochissima.
Ho bisogno di caricare ogni mese in un unico foglio i dati di 10 estratti conto elettronici di due banche diverse.
Io conosco il numero di colonne da importare, che sono 5 in entrambi i casi, ma non quante righe contiene ogni file (righe da 1 ad n).
I due tipi di file di Estratto Conto hanno un tracciato record diverso, non nel numero record (colonne) ma nella posizione dei dati.
Il primo file EC che chiamiamo BDS ha il seguente tracciato:
Data operazione | Data Valuta | Descrizione | Importo operazione | Causale
il secondo che chiamiamo MPS invece questo:
Data operazione | Data Valuta | Importo operazione | Descrizione 1 | Descrizione 2
I nomi che do ai file degli estratti conto sono "MPS o BDS" seguiti da "_nr.conto_corrente" e questi stanno sotto un unica directory.
Nell'import che desidero, fare il tracciato di output dovrà essere il seguente:

Banca | nr. C/C | Data operazione | Data Valuta | Descrizione | Importo operazione | Causale
N.B. nel caso dei file MPS vorrei mettere "Descrizione 1 + Descrizione 2" nel campo di output "Descrizione" lasciando il campo Causale blank.

Vi dico cosa vorrei fare, se possibile:

1) Carico manualmente i nomi file in un foglio che chiamo "Lista_CC". Ad esempio si potrebbe mettere in A1 la banca, MPS o BDS ed in A2 in nr. del conto corrente e così via, in modo da comporre il nome file dalla concatenazione delle due celle intervallate da "_" (es. MPS_1234567.xls), col seguente codice:
Codice: Seleziona tutto
=A1&"_"&B1&".xls"

Questa soluzione mi consente anche, avendo in colonna A il codice banca, di fare successivamente un import differenziato dei campi, a seconda del valore della cella An.

2) A partire dall'elenco dei nomi file, inserire in colonna A e B, del foglio di Output, il codice Banca e il nr. di C/C e nelle colonne successive (C,D,E,F,G) importare i 5 valori di ogni riga presente, nel file banca appena aperto, distribuendoli nel foglio di output come da tracciato di output.
N.B. se nel foglio di Output ci sono righe presenti, la prima riga importata dev'essere accodata a quelle già presenti.

3) Alla fine del caricamento del primo file, passare al secondo accodando i dati del nuovo file nel foglio di Output, seguendo gli stessi criteri di prima. Il tutto fino all'ultimo file presente nell'elenco del foglio "Lista_CC".

4) Il mese successivo, sostituire il file di EC presenti nella dir e far ripartire l'import accodando i nuovi dati nel foglio di Output.

Grazie in anticipo.

Fabrizio
fcudia
Utente Junior
 
Post: 37
Iscritto il: 20/06/09 14:53

Sponsor
 

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi Flash30005 » 27/07/09 11:53

Ciao Fabrizio

Non riesco a capire se i file dati origine sono in formato testo .txt o file excel .xls
in ogni caso sarebbe opportuno, modificando i dati sensibili ma lasciando inalterate le dimensioni del campo, che tu inviassi almeno uno o due file per tipo (BDS, MPS).
Crea un archivio .zip o .rar e invialo a http://www.rapidshare.com/ poi posti qui il link.
Inoltre se hai un percorso specifico della cartella che contiene i file dati è meglio fornire anche queste informazioni.

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi fcudia » 27/07/09 12:32

Ciao Flash,
I file di origine sono in formato excel, e senza intestazione di colonna.
Ho eliminato i dati sensibili dai due file che ti ho postato, considera che cmq i campi descrizione sono più lunghi proprio perchè ho eliminato parte della descrizione, non so se ti interessava proprio la lunghezza del contenuto cella o no.
Ti invio anche il file di excel "Importa_CC" che è quello che dovrò utilizzare per l'import.
Il link è http://rapidshare.com/files/260566816/T ... e.zip.html
Fammi sapere se ti serve altro.
Grazie

Fabrizio
fcudia
Utente Junior
 
Post: 37
Iscritto il: 20/06/09 14:53

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi fcudia » 27/07/09 12:53

Dimenticavo, la path della cartella non te la posso dare, non so ancora come si chiamerà, tu considera possa essere:
F:\banche\importa_EC
poi quella reale la inserisco io.

Grazie

Fabrizio
fcudia
Utente Junior
 
Post: 37
Iscritto il: 20/06/09 14:53

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi Flash30005 » 27/07/09 13:44

Nel file "Importa CC" io vedo una riga per conto e dalla descrizione che hai fatto non sembra che tu voglia questo (altrimenti le tutte le righe di ogni file dove le inserisco? )
Potresti fare un esempio più chiaro nel file Importa CC come veramente vorresti fosse, magari utilizzando i dati che hai già postato?

Domanda:
Come pensi di fare aggiornamenti futuri?
Se carichi i dati del conto MPS e poi BDS accodati, al successivo aggiornamento il foglio deve essere ripulito per scrivere i nuovi dati (perderesti la storia se il file è limitato a x voci), oppure continui ad accodare l'MPS (nuovo) al BDS già esistente? E in caso di date già esistenti come ci si deve comportare?

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi fcudia » 27/07/09 14:16

Ciao Flash,
Cercherò di essere più chiaro.
In Importa_CC il primo foglio "Lista_CC" contiene i dati dei CC, che generano il nome del file che verrà importato nel secondo foglio "Output"
Il file importa_CC, nel foglio "Output" deve consentire l'import dei dati dai vari files dei CC (5 per BDS e 6 per MPS, ma questi in seguito possono cambiare e verranno modificati manualmente se necessario ogni mese).
Tutte le righe importate dai vari files devono essere inserite a partire dalla colonna C fino alla colonna G, (per MPS si deve cambiare l'ordine perché il tracciato record è diverso) perché vorrei mettere in colonna A e B rispettivamente la banca ed il nr. di CC, il che mi consente in futuro a risalire al conto da cui è stata fatta l'operazione.
Ogni mese avrò i nuovi files di ogni banca con le nuove operazioni per tutti i CC, che vorrei accodare a quelli del mese precedente, con gli stessi criteri, proprio per avere su un unico foglio lo storico dei movimenti di tutti i conti correnti.
Il problema delle date ripetute non è un problema, perchè posso avere più operazioni diverse anche con la stessa data operazione e valuta, il problema invece può essere il record ripetuto, ossia se tra un estratto conto ed un altro ci sia una riga che abbia tutti i campi uguali ad una riga già inserita.
Ti posto nuovamente il file importa_CC, dove ho inserito manualmente i dati.
http://rapidshare.com/files/260596311/I ... 2.zip.html

Fammi sapere se ti ho reso chiara la mia esigenza.

Ciao

Fabrizio
fcudia
Utente Junior
 
Post: 37
Iscritto il: 20/06/09 14:53

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi Flash30005 » 28/07/09 00:04

Ho messo i tre file (2 dati + "Importa CC") nella cartella C:\Banche\importa_EC
(per il test fai anche tu così poi cambierai il percorso modificando la stringa "Perc")
in un modulo inserisci questo codice
Codice: Seleziona tutto
Public Perc As String

Sub Riepilogo()
Perc = "C:\Banche\importa_EC\"
Call ElencoFileXls
If Dir(Perc & "ArchivioXls", vbDirectory) = "" Then
    MkDir (Perc & "ArchivioXls")
End If
URE = Worksheets("Lista_CC").Range("A" & Rows.Count).End(xlUp).Row
For D = 1 To URE
FXLS = Worksheets("Lista_CC").Range("A" & D).Value
If FXLS = "" Then Exit For
Workbooks.Open Filename:=Perc & FXLS
FX = "Foglio1"
If Mid(FXLS, 1, 3) = "BDS" Then FX = "Movimenti"
URD = Worksheets(FX).Range("A" & Rows.Count).End(xlUp).Row
Workbooks("Importa CC.xls").Activate
For RX = 1 To URD
UROut = Worksheets("Output").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Output").Range("A" & UROut).Value = Mid(FXLS, 1, 3)
Worksheets("Output").Range("B" & UROut).Value = Mid(FXLS, InStrRev(FXLS, "_") + 1, InStrRev(FXLS, ".") - InStrRev(FXLS, "_") - 1)
Worksheets("Output").Range("C" & UROut).Value = Workbooks(FXLS).Worksheets(FX).Range("A" & RX).Value
Worksheets("Output").Range("D" & UROut).Value = Workbooks(FXLS).Worksheets(FX).Range("B" & RX).Value
If Mid(FXLS, 1, 3) = "BDS" Then
Worksheets("Output").Range("E" & UROut).Value = Workbooks(FXLS).Worksheets(FX).Range("C" & RX).Value
Worksheets("Output").Range("F" & UROut).Value = Workbooks(FXLS).Worksheets(FX).Range("D" & RX).Value
Worksheets("Output").Range("G" & UROut).Value = Workbooks(FXLS).Worksheets(FX).Range("E" & RX).Value
Else
Worksheets("Output").Range("E" & UROut).Value = Workbooks(FXLS).Worksheets(FX).Range("D" & RX).Value & " + " & Workbooks(FXLS).Worksheets(FX).Range("E" & RX).Value
Worksheets("Output").Range("F" & UROut).Value = Workbooks(FXLS).Worksheets(FX).Range("C" & RX).Value
End If

Next RX
Workbooks(FXLS).Close savechanges:=False
S = FileDateTime(Perc & FXLS)
DataF = Mid(S, 7, 4) & Mid(S, 4, 2) & Mid(S, 1, 2)
Name Perc & FXLS As Perc & "ArchivioXls\" & DataF & "_" & FXLS
Next D
Call Eliminadoppi
End Sub
Sub ElencoFileXls()
Worksheets("Lista_CC").Select
Range("A1").Select
  With ActiveCell
    Worksheets("Lista_CC").Range(.Cells(1), .End(xlDown)).ClearContents
  End With
  ElencoFile Direct:=Perc, Estens:="???_*.xls", Inicell:=ActiveCell
End Sub
Sub ElencoFile(Direct As String, Estens As String, Inicell As Range)
  Dim i As Integer, f As String
  ChDir Direct
  f = Dir(Estens)
  If f = "" Then Exit Sub
  While f <> ""
    i = i + 1
    Inicell(i) = f
    f = Dir
  Wend
End Sub
Sub Eliminadoppi()
Worksheets("Output").Select
URE = Range("A" & Rows.Count).End(xlUp).Row
For EL = 2 To URE - 1
Stringa1 = Range("A" & EL).Value & Range("B" & EL).Value & Range("C" & EL).Value & Range("D" & EL).Value & Range("E" & EL).Value & Range("F" & EL).Value & Range("G" & EL).Value
 If Stringa1 = "" Then GoTo esci
 For REL = EL + 1 To URE
 Stringa2 = Range("A" & REL).Value & Range("B" & REL).Value & Range("C" & REL).Value & Range("D" & REL).Value & Range("E" & REL).Value & Range("F" & REL).Value & Range("G" & REL).Value
 If Stringa1 = Stringa2 Then Rows(REL & ":" & REL).Delete Shift:=xlUp
 Next REL
Next EL
esci:
End Sub

Avvia la macro Riepilogo

La macro processa i file all'interno della cartella percorso
Archivia i File processati in ArchivioXls rinominandoli con data di creazione File
In caso di righe doppie (perfettamente identiche) cancella le ultime trovate

Fai sapere se Ok
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi fcudia » 28/07/09 08:24

Grazie Flash,
Il primo test è andato benissimo, l'import funziona bene, anzi, fa qualcosa in più in quanto crea anche il backup dei files.
L'unica cosa da modificare è che nel foglio Lista_CC, nella colonna A sostituisce il codice banca (MPS o BDS) con il nome completo dei file da importare, per cui al successivo import devo ridigitare il codice banca. Adesso do un'occhiata al codice per vedere se riesco a risolvere da solo, ma farò anche altri test per verificare che tutto sia a posto come sembra.
Nuovamente grazie mille.

Ti faccio sapere.

Fabrizio
fcudia
Utente Junior
 
Post: 37
Iscritto il: 20/06/09 14:53

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi Flash30005 » 28/07/09 08:55

Ma il foglio Lista_CC io lo uso come elenco dei file per importare i dati quindi è un foglio di servizio.
Ad ogni aggiornamento quelle celle vengono cancellate e sostituite dai nuovi file che abbiano 3 caratteri + "_" + "qualsiasi nome" .xls e non capisco cosa tu debba digitare, (se posizioniamo il file "Importa_CC.xls" fuori dalla cartella dei file dati il possiamo far caricare tutti i file xls che si trovano nella cartella, mettendo "*.xls" invece di "???_*.xls", nella macro ElencoFileXls)
L'unica modifica che farei nella macro Riepilogo è bloccare lo screen per evitare quel passaggio di schermate durante l'apertura dei file aggiungendo queste 3 righe:
Codice: Seleziona tutto
Sub Riepilogo()   '<<< inizio macro
Application.ScreenUpdating = False   '<<< riga aggiunta
Application.Calculation = xlManual   '<<< riga aggiunta
ChDrive "C"                                   '<<< riga aggiunta nel caso il driver è F cambiare la lettera
Perc = "C:\Banche\importa_EC\"     '<<<< riga esistente cambiare percorso adattandolo alle esigenze

e inserire queste due righe alla fine della macro
Codice: Seleziona tutto
Call Eliminadoppi    '<<<< riga esistente
Application.Calculation = xlCalculationAutomatic      '<<< riga aggiunta
Application.ScreenUpdating = True                            '<<< riga aggiunta
End Sub         '<<<< fine macro


Mi spieghi meglio la faccenda di ridigitare in nome banca?


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi fcudia » 28/07/09 10:04

Ti spiego,
Io nel foglio Lista_CC avevo messo in colonna A il codice banca (MPS o BDS) ed in colonna B in nr. di CC da caricare, poi in colonna C componevo il nome del file da caricare con la formula:
Codice: Seleziona tutto
=A1&"_"&B1&".xls"

in maniera tale da avere già pronto l'elenco dei files da caricare.
Rileggendo il codice invece tu carichi tutti i files "???_.XLS che trovi nella dir, e da li prendi in nr. di CC.
Anche questa può essere una soluzione valida, perchè la macro mi carica i soli files che ho nella Dir e da li mi prende il nr. di CC, per cui non ho bisogno di aggiornare la lista dei CC di volta in volta, ma devo solo avere l'accortezza d'inserire i soli file di aggiornamento dell'E.C. in quella Dir.
Ma adesso è nato un altro problema.
Dopo la prima prova che è andata bene, si sono caricati correttamente tutti i dati, (nel tuo codice ho solo modificato la path della cartella con quella che uso per fare i test), adesso ogni volta che provo la macro, mi da un "errore di run time 1004" impossibile trovare il file pwd_az.xls.
Questo file non esiste nella mia Dir, ma la macro scrive questo nome file nella casella A1 del foglio di servizio Lista_CC, ma non riesco a capire come mai genera questo nome anziché quello dei file che ho nella dir.
Non so che altro aggiungere, sto provando a rileggere il codice per capire.
Appena, o meglio se, risolvo provo ad aggiungere l'ultimo codice che mi hai inviato e ti faccio sapere.

Ciao

Fabrizio
fcudia
Utente Junior
 
Post: 37
Iscritto il: 20/06/09 14:53

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi fcudia » 28/07/09 10:21

Sono ripartito da zero, ho ripreso i files originali, inserito la macro, modificato la Path dei files, il tutto fatto x 2 volte.
Risultato:
- la prima prova, nessun import, la macro viene eseguita fino alla fine e nel foglio di servizio nella colonna A non c'è nulla.
- la seconda prova, invece nel foglio di servizio nella cella A1 c'è pwd_az.xls, e l'esecuzione s'interrompe con l'errore di run-time 1004 impossibile trovare il file.

non so che dire, e non capisco da dove possa prendere questo nome file... nella mia path, che ho ricontrollato diverse volte ed è giusta, questo file non esiste.

Fammi sapere che ne pensi.

Fabrizio
fcudia
Utente Junior
 
Post: 37
Iscritto il: 20/06/09 14:53

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi Flash30005 » 28/07/09 10:33

Questo inconveniente accade quando hai il driver predefinito C: e cambi il percorso in F
infatti, nell'ultimo mio post, nella modifica per bloccare le schermate, avevo approfittato per inserire anche il codice ChDrive "C" che modificherai in ChDrive "F", guarda le 5 righe (3+2) da aggiungere alla macro.
Ora che hai compreso la "filosofia" di caricamento dei file penso che le colonne B e C del foglio Lista_CC non occorrano più, del resto i nomi dei file che mi hai postato sono completi di sigla banca e n.conto se, invece, la sigla banca non esiste si può modificare la macro per attribuirla in caso di conto xxxxxxxx o yyyyyy senza, quindi, dover da parte tua, rinominare i file.

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi fcudia » 28/07/09 13:03

Grazie Flash, funziona tutto
Le ultime modifiche che hai postato hanno risolto il problema del percorso file.
Ho apportato solo una modifica che ti posto qui sotto, ossia ho sostituito nel nome dei file che vengono archiviati la data di ultimo salvataggio del file, con data ed orario in cui faccio l'import, che mi è più utile per sapere quando l'operazione di import è stata fatta e se sono state fatti più import in una giornata.

Codice: Seleziona tutto
'S = FileDateTime(Perc & FXLS)     RIGA SOSTITUITA
'DataF = Mid(S, 7, 4) & Mid(S, 4, 2) & Mid(S, 1, 2)              RIGA SOSTITUITA

S = Date & Time                 ' NUOVA RIGA
DataF = Mid(S, 7, 4) & Mid(S, 4, 2) & Mid(S, 1, 2) & Mid(S, 11, 2) & Mid(S, 14, 2) ' NUOVA RIGA


Adesso è tutto funzionante, a parte una cosa, ma la devo approfondire.
Ti spiego, sul file E.C. di un CC ho un'operazione doppia nella stessa giornata, ossia stessa data, stesso importo stessa causale.
In fase di import la prima volta, anche se lecito, mi elimina il doppione. Se reimporto nuovamente tutti i file invece, la seconda voce che prima era stata eliminata me l'accoda e per eliminarla devo rilanciare la macro "eliminadoppi". Devo verificare se effettivamente ho due operazioni uguali nella stessa giornata (in quel caso era emissione di assegni circolari e potrebbe succedere), nel qual caso non devo lanciare la macro "eliminadoppi" ma effettuare una verifica alla fonte per accertarmi che gli estratti conto elettronici non contengano dati già scaricati in precedenza. Se invece l'errore è nel mio file di E.C. allora tutto a posto.
Grazie nuovamente.

A presto

Fabrizio
fcudia
Utente Junior
 
Post: 37
Iscritto il: 20/06/09 14:53

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi Flash30005 » 28/07/09 15:19

Rinominre il file con data e ora di importazione file invece che data (e eventuale ora) di creazione file potrebbe non essere corretto perché un file creato 2 giorni prima manterrebbe sempre lo stesso nome (univoco) se nominato con l'attributo di data creazione, mentre con data di importazione cambierebbe il suo nome (in archivio) a seconda del giorno e ora di importazione quindi meno intuitivo e può far cadere in errore, ma non voglio discutere l'esigenza dell'utente, in questo caso tua.
La viariabile S = Date & Time a questo punto può essere eliminata (prima era una funzione per leggere gli attributi del file) sostituendo la formula
Codice: Seleziona tutto
DataF = Mid(Date, 7, 4) & Mid(Date, 4, 2) & Mid(Date, 1, 2) & Mid(Time, 11, 2) & Mid(Time, 14, 2)


Per eliminare l'inconveniente delle due righe uguali consecutive e per non ripetere manualmente la macro "eliminadoppi" credo sia sufficiente sostituire nella macro di eliminazione doppioni questa riga
Codice: Seleziona tutto
For REL =  EL + 1 To URE

con
Codice: Seleziona tutto
For REL = URE To EL + 1 Step -1

in quanto la precedente formula in caso di eliminazione della riga spostava le righe successive verso l'alto e al successivo incremento di riga avrebbe saltato eventuale riga doppia, ora, invece, avviando la scansione dall'ultima riga quell'inconveniente non si presenta.

Per il discorso di due record perfettamente identici ma reali purtroppo non credo ci possa essere una soluzione se non si trova la maniera di differenziare uno dei due record, pensavo anche di aggiungere un contatore (che si azzera ad ogni nuovo file importato) avrei così un numero per ogni record dello stesso file es. file BDS_300505050.xls del giorno 27 luglio contiene 20 record, inserendo questa numerazione (da 1 a 20) durante l'importazione nella colonna H.
In caso di nuova importazione errata di quel file le 20 righe verranno cancellate in quanto uguali, ma nel caso in cui nell'EC successivo trovassi 5 voci (le prime) uguali alle ultime del precedente EC più altre 10 nuove voci, la macro non cancellererebbe le 5 righe (identiche fino alla colonna G) perché la colonna H avrà un numero di record diverso (da 1 a 5 e non da 16 a 20 come registrato precedentemente)


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi fcudia » 28/07/09 19:55

Sono d'accordo con te circa la scarsa intuitività di un file che, se importato 2 volte, cambiando nome non darebbe contezza dell'importazione duplicata, ci avevo anche pensato, ma per me è importante anche sapere quando l'operatore fa l'import dei dati.
Per cui ho deciso di risolvere il problema formattando il nome del file così: cod.banca_nr.conto_mese_anno (es. MPS_112233_Luglio_09.xls). In questo modo, aggiungendo, dopo l'import, data ed ora d'importazione all'inizio dei file archiviati, posso verificare se e quando l'operatore effettua l'aggiornamento. In ogni caso la data di creazione dell'estratto conto resta nelle proprietà del file, e mi da la possibilità di verificare quando è stato creato l'E.C..
Inoltre avendo ad inizio file la data d'impotazione, questi verranno anche archiviati con la giusta sequenza mensile.

Grazie per la modifica al codice sia della data di import, che della macro che elimina i doppioni. Purtroppo per quest'ultima, dovrò momentaneamente disattivarla, perchè ho già verificato che alcune operazioni possono avere record identici nella stessa giornata, e non posso correre il rischio di eliminarne per errore qualcuno.
Diciamo che, generando il file dell'E.C. mensilmente, il rischio di caricamenti duplicati dovrebbe essere quasi nullo. In ogni caso, almeno per il primo periodo farò fare dei controlli all'operatore, che nel momento in cui gli arriva l'E.C. cartaceo, spunterà le operazioni inserite nel file.
Sono d'accordo pure con te circa la soluzione cui hai pensato per risolvere questo problema inserendo il contatore, infatti l'esempio che hai fatto calza perfettamente e in quel caso non ci sarebbe certezza di una corretta eliminazione.
Un idea però mi è venuta e vorrei confrontami con te su questa. infatti se in fase di import del file, nel caso di record (leciti) duplicati contenuti nello stesso file, si inserisse una sigla (marcatore) solo su quei record, nel caso di nuovo import di due, o più, record con un file successivo, avendo questo lo stesso numero di record identici nel nuovo import, entrambi col marcatore, questi si potrebbero eliminare come gruppo di record, avendo la certezza di aver eliminato dei record veramente doppi.
Per chiarire, se nel file successivo trovo un singolo duplicato (i duplicati singoli non hanno il marcatore), lo elimino, ma se i duplicati da importare dovessero essere più d'uno, e questo gruppo fosse presente anche nei record importati in precedenza si potrebbe eliminare tutto il nuovo gruppo.
Ragionaci anche tu, per capire se questo metodo può realmente funzionare e se non è troppo complicato implementarlo.

Ti ringrazio nuovamente per il tuo prezioso contributo e a presto.

Fabrizio
fcudia
Utente Junior
 
Post: 37
Iscritto il: 20/06/09 14:53

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi Flash30005 » 28/07/09 22:05

Non so cosa intendi per marcatore ma penso che è possibile fare così
inserisci queste 3 righe di codice nella macro "Riepilogo" come indicato
Codice: Seleziona tutto
...
For D = 1 To URE   '<<<< esistente
contatore = 0  '<<<< inserire qui
FXLS = Worksheets("Lista_CC").Range("A" & D).Value   '<<<< esistente
...
For RX = 1 To URD  '<<<< esistente
contatore = contatore + 1  '<<<< inserire qui
UROut = Worksheets("Output").Range("A" & Rows.Count).End(xlUp).Row + 1   '<<<< esistente
...
End If  '<<<< esistente
Worksheets("Output").Range("H" & UROut).Value = contatore  '<<<< inserire qui
Next RX  '<<<< esistente
Workbooks(FXLS).Close savechanges:=False  '<<<< esistente


Poi sostituisci la macro EliminaDoppi con questa (ho aggiunta anche un'altra macro)
Codice: Seleziona tutto
Sub Eliminadoppi()
Worksheets("Output").Select
URE = Range("A" & Rows.Count).End(xlUp).Row
For EL = 2 To URE - 1
Stringa1 = Range("A" & EL).Value & Range("B" & EL).Value & Range("C" & EL).Value & Range("D" & EL).Value & Range("E" & EL).Value & Range("F" & EL).Value & Range("G" & EL).Value & Range("H" & EL).Value
 If Stringa1 = "" Then GoTo esci
 For REL = URE To EL + 1 Step -1
 Stringa2 = Range("A" & REL).Value & Range("B" & REL).Value & Range("C" & REL).Value & Range("D" & REL).Value & Range("E" & REL).Value & Range("F" & REL).Value & Range("G" & REL).Value & Range("H" & REL).Value
 If Stringa1 = Stringa2 Then Rows(REL & ":" & REL).Delete Shift:=xlUp
 Next REL
Next EL
esci:
Call ControllaDuplicati
End Sub
Sub ControllaDuplicati()
ContaD = 0
URE = Range("A" & Rows.Count).End(xlUp).Row
For EL = 2 To URE - 1
Stringa1 = Range("A" & EL).Value & Range("B" & EL).Value & Range("C" & EL).Value & Range("D" & EL).Value & Range("E" & EL).Value & Range("F" & EL).Value & Range("G" & EL).Value
 If Stringa1 = "" Then GoTo esci
 For REL = URE To EL + 1 Step -1
 Stringa2 = Range("A" & REL).Value & Range("B" & REL).Value & Range("C" & REL).Value & Range("D" & REL).Value & Range("E" & REL).Value & Range("F" & REL).Value & Range("G" & REL).Value
 If Stringa1 = Stringa2 Then
 ContaD = ContaD + 1
 Worksheets("Output").Range("I" & EL).Value = ContaD
 Worksheets("Output").Range("I" & REL).Value = ContaD
 End If
 Next REL
Next EL
esci:
MsgBox "Ci sono " & ContaD & " operazioni uguali, verificare! ", vbExclamation
End Sub

Con questo metodo
1) se ci sono righe uguali nello stesso file che si sta importando non le cancella
2) se si carica per errore un intero file già processato cancellerà tutte le righe aggiunte (elimina i duplicati)
3) se si carica un nuovo file contenente alcune righe già processate esse non verranno cancellate ma numererà a coppia le righe uguali (col I) e alla fine del processo un messaggio informerà quanti duplicati sono stati trovati, dipenderà dall'utente se cancellarli o no.

Ciao

P.s Mi sembra strano che la causale per gli assegni circolari sia identica :roll: non hanno un numero anche essi?
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi fcudia » 29/07/09 09:41

Buongiorno Flash,
Non so cosa intendi per marcatore

Per marcatore intendo una sigla, numero o qualsiasi cosa che identifichi i record duplicati, praticamente è quello che hai fatto tu con la nuova macro che inserisce in colonna "I" un numero, per evidenziare i record duplicati.

Stamattina ho testato le modifiche alle macro del tuo ultimo post, e credo ci sia qualcosa che non va nel conteggio delle operazioni della macro "ControllaDuplicati()". Infatti finché ci sono operazioni doppie, esse vengono segnalate correttamente, ossia 1,2,3 ecc.
Quando però esistono più di due operazioni duplicate, da 3 a salire, il conteggio sballa, anche se comunque tutti i duplicati vengono segnalati. Ti faccio un esempio.
In un file ho le seguenti serie: serie 1 = 3 operazioni uguali, serie 2 = 4 operazioni uguali serie 3 = 2 operazioni uguali. Eseguendo la macro di riepilogo, vengono prese tutte e 9 operazioni e vengono inserite nel foglio di output, ma il msgbox mi segnala 10 operazioni duplicate al posto di 3. La numerazione di colonna I invece ha la seguente sequenza: 2-3-3, 6-8-9-9, 10,10, quindi la numerazione sballa anche se comunque vengono riscritte nel foglio di output tutte le operazioni duplicate.

Per tornare al marcatore, io pensavo di usarlo per contrassegnare tutte le operazioni uguali, ad esempio con un numero o una lettera univoco, si potrebbe usare per tutti la lettera D (che sta per duplicato).
In questo modo la macro "ControllaDuplicati()" mi mantiene tutte le operazioni duplicate e le marca con quella lettera.
Quando farò un successivo import che contiene la stessa serie duplicata, a prescindere che sia la serie 1, 2 o 3, se quella serie è già presente nel foglio di output, questa viene eliminata.
Così si eviterebbe il controllo manuale successivo, che nel caso di un operatore poco attento può indurre ad un errore, e sopratutto che in caso di mancata corrispondenza nella numerazione dei duplicati non consente una veloce individuazione degli stessi.
Fammi sapere cosa ne pensi.
Ciao
Fabrizio

P.S.
P.s Mi sembra strano che la causale per gli assegni circolari sia identica :roll: non hanno un numero anche essi?

L'impostazione della causale dipende dalla banca, ci sono banche che propongono causali molto dettagliate ed altre che invece abbreviano o usano causali generiche. Il caso specifico fa riferimento ad MPS, che tra l'altro inserisce 2 descrizioni come causali, le quali non sempre sono molto dettagliate, comunque, nel caso specifico dato che si tratta dell'emissione di più assegni circolari, anche se l'importo totale è lo stesso, non è possibile inserire i nr. di serie di tutti gli assegni, credo per ragioni di spazio.
fcudia
Utente Junior
 
Post: 37
Iscritto il: 20/06/09 14:53

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi Flash30005 » 29/07/09 10:40

Effettuando questa modifica dovresti avere lo stesso numero di duplicato a parità di duplicato ed è più semplice risalire alle righe uguali (reso ancora più semplice ordinando la colonna (I) in ordine crescente).
Sostituisci la macro "controlladuplicati"
Codice: Seleziona tutto
Sub ControllaDuplicati()
ContaD = 0
URE = Range("A" & Rows.Count).End(xlUp).Row
Range("I2:I" & URE).ClearContents
For EL = 2 To URE - 1
Stringa1 = Range("A" & EL).Value & Range("B" & EL).Value & Range("C" & EL).Value & Range("D" & EL).Value & Range("E" & EL).Value & Range("F" & EL).Value & Range("G" & EL).Value
If Stringa1 = "" Then GoTo esci
For REL = URE To EL + 1 Step -1
Stringa2 = Range("A" & REL).Value & Range("B" & REL).Value & Range("C" & REL).Value & Range("D" & REL).Value & Range("E" & REL).Value & Range("F" & REL).Value & Range("G" & REL).Value
If Stringa1 = Stringa2 Then
If Worksheets("Output").Range("I" & EL).Value = "" Then
ContaD = ContaD + 1
Worksheets("Output").Range("I" & EL).Value = ContaD
End If
Worksheets("Output").Range("I" & REL).Value = Worksheets("Output").Range("I" & EL).Value
End If
Next REL
Next EL
esci:
If ContaD > 0 Then MsgBox "Ci sono " & ContaD & " operazioni uguali, verificare! ", vbExclamation
End Sub


Non ho testato la macro per assenza di dati txt (dovrei preparare appositamente questi file)

Per quanto riguarda il marcatore unico con lettera D non differenziandosi dagli altri marcatori non mi permette di capire se è un duplicato falso o vero (in caso di assegni circolari).

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi fcudia » 29/07/09 12:06

Grazie Flash, tutto a posto, con questa versione non c'è più l'inconveniente dell'errata numerazione.

Per quanto riguarda il marcatore unico con lettera D non differenziandosi dagli altri marcatori non mi permette di capire se è un duplicato falso o vero (in caso di assegni circolari).

Per quanto riguarda il sistema che ti avevo proposto, vorrei fare alcune considerazioni:
1) I singoli duplicati venivano già eliminati con la prima versione della tua macro;
2) Nella seconda modifica alla macro, hai corretto l'eliminazione dei duplicati all'interno del file importato, che si considerano adesso leciti, se non ne sono stati importati altri uguali precedentemente;
Basterebbe (forse anche senza inserire il marcatore) eliminare le serie di duplicati (già la macro li individua, numerandoli), quando la stessa serie di dati (composta da 2,3 4 duplic.) è già presente nel Foglio di output.
Infatti, quello che già avveniva nella prima macro per l'eliminazione dei singoli record importati nuovamente, dovrebbe essere fatto per le serie di record, se queste sono già presenti.
Questo perché se troviamo dei duplicati nel nuovo file banca che importiamo è perché le date di ricerca movimenti inserite, si sovrappongono alle precedenti. Per cui se in una tal data ci sono 3 operazioni, già caricate precedentemente e per errore inserisco quella data nel range per scaricare il nuovo E.C., quelle 3 operazioni già scaricate in precedenza le devo cancellare, come già facevo con la prima macro, (ad eccezione del fatto, che la prima macro mi cancellava tutti i duplicati).
Ricapitolando,
- se ho dei duplicati all'interno del file che importo, non li devo eliminare;
- se questi duplicati invece esistono già (come serie), nel foglio di Output,, li posso eliminare (perché già importati in precedenza e scaricati dal sito per sovrapposizione di date).
Cosa ne pensi? è possibile implementare questo?

Grazie

Fabrizio
fcudia
Utente Junior
 
Post: 37
Iscritto il: 20/06/09 14:53

Re: [EXCEL] Caricamento dati da files con accodamento

Postdi Flash30005 » 29/07/09 13:00

Come faccio ad assegnare una serie?
Nel controllo righe come faccio a sapere che si tratta della stessa serie?
Se la prima volta la serie è composta da tre righe e la seconda da due o una di quelle tre righe per inizio report "troncato" cosa dovrebbe fare la macro?

Fammi sapere se hai provato l'ultima modifica fatta e quali inconvenienti incontri in caso di duplicati e non.
Ricorda che stiamo trattando dati che hanno valori uguali su tutti i campi esaminati e per un software è impossibile discriminare una riga rispetto all'altra senza l'intervento umano o senza una metodologia sicura (tipo fare un report periodico da data a data e il successivo report che inizia dalla data fine del precedente + 1 giorno).

Ciao


P.s. ho lasciato i codici delle macro postate in maniera "integrale" e con molti riferimenti proprio per renderle intuitive e dare la possibilità all'utente di intervenire e modificare a piacimento e secondo la propria esigenza, puoi quindi inserire marcatori (lettere e/o numeri in qualsiasi colonna), vedendo l'esempio di controllo da me realizzato puoi fare filtri e ulteriori controlli e se ti viene qualche idea su come differenziare le colonne in maniera tale da dare piena fiducia ad un software che ti cancella i dati che "ritiene" doppioni, informami perché, personalmente, in questo momento, non ho idea di come intervenire.
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL] Caricamento dati da files con accodamento":


Chi c’è in linea

Visitano il forum: Nessuno e 32 ospiti