Copiare righe da altri file
Hai un problema con Excel?
Copiare righe da altri file
di Berio data: 04/02/2017 11:52:28
Buon giorno, premetto che questa domanda l’ho già fatta su un altro forum ma la persona (gentilissima) che mi ha risposto con le sue competenze è arrivata fino ad un certo punto e quindi io non ho risolto la questione e mi sembrava scortese rilanciarla, quindi chiedo qui per altri pareri, tutto questo per dire che non è un cross post ma ho necessità di risolvere questo problema.
Il mio livello di conoscenza di VBA è pari a zero, tanto per dire ho scoperto da poco che si possono registrare le macro…quindi abbiate pietà.
Veniamo al problema, io vorrei far confluire su di un file che chiamerò Destinazione tutti i nuovi record che vengono inseriti in altri file, tecnicamente ci dovrebbe essere il confronto fra il file Destinazione e gli altri file e registrare (sul file Destinazione) solo le nuove righe escludendo di fatto i doppioni.
Ho provato importando su Destinazione il foglio di altri file usando la Formattazione condizionale con la formula =A1<>Foglio1!A1 ma mi evidenzia i record sbagliati, ho provato anche con CERCA.VERT ma anche qui non individua le differenze.
Il problema è complicato dal fatto che all’interno dei file di registrazione ci possono essere delle persone registrate due volte che non deve essere riconosciuti come doppione quindi bisogna impostare il confronto fra due colonne una è il Codice Fiscale l’altra è la Matricola, se questi due record sono uguali allora si che è un doppione.
Provo a spiegarmi meglio con dei file di prova allegati dove troverete nel file Tab_A, Tab_A-1 e Tab_A-2 una simulazione di inserimento di nuovi record, righe 5- 6 - 7, se si nota la persona registrata in queste ultime tre righe è la medesima e la cosa è voluta non è un doppione e quindi non deve essere riconosciuto come tale, l’unica cosa che la differenzia è sulla colonna Matricola, quindi devo impostare un confronto fra il file Destinazione e Tab_A in modo che se trova due Codici Fiscali uguali prima di riconoscerli come doppioni confronti anche la colonna Matricola, se uguale è un doppione se diverso è un nuovo record.
Grazie per l’attenzione
di mabolsie data: 04/02/2017 16:02:31
Ciao Berio il primo consiglio che ti darei è di pensare ad un lavoro sviluppato all'interno di un file workbook, sono molto più facili i collegamenti tra fogli.
cit. "Il problema è complicato dal fatto che all’ interno dei file di registrazione ci possono essere delle persone registrate due volte che non deve essere riconosciuti come doppione quindi bisogna impostare il confronto fra due colonne una è il Codice Fiscale l’altra è la Matricola, se questi due record sono uguali allora si che è un doppione. " ..ed allora come facciamo a fare la scansione se una persona può essere un doppione?
Se i dati ti arrivano da un foglio esterno potresti fare un copia/incolla nel database creato e far partire le verifiche.
Ciao Max
di Berio data: 04/02/2017 17:50:20
Grazie mabolsie, cerco di spiegare meglio il concetto di doppioni...se dai un'occhiata ai file allegati per i file Tab_A, B e C hanno la stessa struttura
colanna 1 : Nome Cognome
colonna 2 : Codice fiscale
colonna 3 : Matricola
e altre colonne
Struttura file Tab_A
Nome Cod.F Matricola
___________________________________
Mario MRA (cella vuota) (vuol dire nessun dato)
Mario MRA 100
Mario MRA 200
GINO GNI (Cella vuota)
Roberto RBT (cella vuota)
Roberto RBT 300
Struttura file Destinazione
Nome Cod.F Matricola
___________________________________
Mario MRA 100
Mario MRA 200
GINO GNI (Cella vuota)
Roberto RBT (cella vuota)
Roberto RBT 300
ora devo fare il confronto fra i due file e fare un copia-incolla sul file Destinazione delle sole righe che li differenziano in questo caso solo la riga 1
Mario MRA (cella vuota)
quindi non posso fare per esempio un INDICE E CONFRONTA (o una formattazione condizionale con formula) solo sulla colonna Matricola perchè altrimenti mi avrebbe riconosciuto anche i record di Gino e Roberto come assenti nel file Destinazione, di conseguenza devo usare un'altra discriminante per ricavarmi il dato mancante e cioè usare la colonna del codice fiscale.
Spero di essermi spiegato, concettualmente c'è l'ho in testa e che materialmente non sono capace di realizzarla, se mi date qualche punto di partenza con il VBA magari cerco di capirne qualche cosa.
Grazie ancora.
di mabolsie data: 04/02/2017 20:19:05
penso che non si possa fare neanche con il VBA.
però lascia aperta la discussione che magari qualcuno risolve.
Ciao Max
di Albatros54 data: 05/02/2017 08:46:11
scenario: in una cartella ho tutti i file da confrontare compreso il file destinazione, apri il file destinazione e lanci la macro che si trova al suo interno, ti posto anche il codice, se ho capito quello che chiedi.
ciao
albatros54
Public Sub copiabis()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim wk As Workbook
Dim wk1 As Workbook
Dim r As Long
With Application
.ScreenUpdating = False
End With
sPath = ThisWorkbook.Path ' & "
uova cartella" '<< da Modificare
Set wk1 = Workbooks("DESTINAZIONE.xlsx")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(sPath)
For Each objFile In objFolder.Files
myname = Dir(objFile, vbNormal)
If Left(myname, 1) <> "~" And (Right(myname, Len(myname) - InStrRev(myname, ".")) Like "*xl*") And (myname <> ThisWorkbook.Name) Then
Set wk = Workbooks.Open(objFile.Path)
irow = wk.Sheets("foglio1").Range("b" & Rows.Count).End(xlUp).Row
irow1 = wk1.Sheets("foglio1").Range("b" & Rows.Count).End(xlUp).Row
Set Rng = wk.Sheets("foglio1").Range("b2:b" & irow)
Set rng1 = wk1.Sheets("foglio1").Range("b2:b" & irow1)
For Each cl In Rng
For Each lc In rng1
If cl Like lc And cl.Offset(0, 1) <> lc.Offset(0, 1) Then
MsgBox "dato non uguale "
cl.Activate
irow1 = wk1.Sheets("foglio1").Range("a" & Rows.Count).End(xlUp).Row + 1
ActiveCell.Cells.Offset(0, -1).Resize(1, 5).Copy wk1.Sheets("foglio1").Cells(irow1, 1)
End If
Next
wk.Close
Next
End If
Next
With Application
.ScreenUpdating = True
End With
Set wk = Nothing
Set sh = Nothing
Set objFile = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
End Sub
|
di Berio data: 05/02/2017 21:42:10
Grazie Albatros, scusa il ritardo ma ho un raffreddore che mi sta uccidendo, ho inserito la tua macro nel file Destinazione e dove hai indicato di modificare ho sostituito con il percorso dove risiedono i file, ma mi dice indice non trovato... dove sbaglio?
Grazie ancora.
di Albatros54 data: 06/02/2017 16:44:29
Se lo scenario è quello che ti ho indicato io, non devi modificare il codice, non considerare la nota.
ciao
albatros54
di Berio data: 06/02/2017 22:41:33
Si Albatros, continua a darmi Errore di run-time '9': indice non incluso nell'intervallo.
Tutti i file risiedono sulla cartella (per non sbagliare l'ho chiamata nuova cartella), dal file Destinazione ho aperto VBA, in alto a dx doppio clic su Foglio1 si apre una finestra, copio-incollo il tuo codice.
Grazie per la pazienza.
Vuoi Approfondire?