La mia interpretazione e' questa macro:
- Codice: Seleziona tutto
Sub spalmer()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=110135
Dim I As Long, fPath As String, nFile As String, fExt As String, flOk As Boolean
Dim sWs As Worksheet, myNext As Long, shName As String, J As Long, cRow As Long
fPath = "C:\PROVA\" '<<< La directory con i file da popolare, con lo \ finale
fExt = ".xlsx" '<<< Il "tipo" di file Excel da cercare
shName = "Foglio1" '<<< Il Nome del FOGLIO da popolare
Set sWs = ActiveSheet
For I = 2 To Cells(Rows.Count, "B").End(xlUp).Row
cRow = 0
nFile = Cells(I, "B").Value & fExt
If Application.WorksheetFunction.CountIf(Range("B2").Resize(I - 1, 1), Cells(I, "B").Value) < 2 Then
On Error Resume Next
Workbooks.Open fPath & nFile
On Error GoTo 0
For J = I To sWs.Cells(sWs.Rows.Count, "B").End(xlUp).Row
If sWs.Cells(J, "B") = sWs.Cells(I, "B") Then
cRow = cRow + 1
If UCase(ActiveWorkbook.Name) = UCase(nFile) Then
flOk = True
Sheets(shName).Select
myNext = Cells(Rows.Count, "C").End(xlUp).Row + 1
Cells(myNext, "C").Resize(1, 22).Value = sWs.Cells(J, "C").Resize(1, 22).Value
sWs.Cells(J, "B").Interior.Color = RGB(0, 255, 0)
Else
flOk = False
sWs.Cells(I, "B").Interior.Color = RGB(255, 0, 0)
End If
End If
Next J
If flOk Then
MsgBox ("Controlla le righe aggiunte (" & cRow & ") Poi continua la macro usando F5")
Stop
On Error Resume Next
Workbooks(nFile).Close True
On Error GoTo 0
flOk = False
Else
MsgBox ("File non trovato: " & nFile & vbCrLf & "Righe orfane: " & cRow & vbCrLf & "Controlla, poi continua la macro usando F5")
Stop
ThisWorkbook.Activate
End If
End If
ThisWorkbook.Activate
Next I
MsgBox ("Completato...")
End Sub
Va messa in un modulo standard del vba e va eseguita avendo prima attivato il foglio contenente i dati da "spalmare"
Le righe marcate <<< vanno personalizzate, come da commento.
La macro:
1) esamina la colonna B del foglio attivo, da riga 2 in avanti
2) cerca di aprire il file avente quel nome file, guardando nella directory che e' stata dichiarata
2a) se trova il file, accoda al contenuto gia' presente tutti i record che nel file di origine in colonna B hanno quello stesso valore. La cella B sul foglio originale viene colorata in verde.
A fine elenco la macro si sospende e l'utente viene invitato a controllare quanto fatto; se tutto Ok l'utente puo' continuare la macro premendo F5 sulla finestra del vba; se non e' Ok l'utente deve chiudere il file di destinazione (quello su cui sono state aggiunte le righe) SENZA SALVARLO, e poi continuare la macro sempre con F5. Le celle di colonna B RIMANGONO COLORATE DI VERDE, salvo azione manuale dell'utente
2b) se non trova il file allora la cella B sul foglio originale viene colorata in rosso e un messaggio averte della presenza di N record "orfani"; la macro va ripresa sempre col tasto F5
Questo viene ripetuto per ogni codice diverso dai precedenti trovato in colonna B.
Prova e fai sapere...