...
A me servirebbe una macro che svolga l'operazione per tutti i codici cliente, in automatico o su mio inserimento/selezione del codice cliente.
Questa è un immagine del file B dal quale devo prelevare i dati. i codici clienti sono ripetuti due volte, a me serve selezionare il primo che viene trovato dalla funzione Trova in modo che copi i dati sulla riga del primo codice.
Per il momento verifica il funzionamento della macro allegata, dopo le necessarie personalizzazioni. Verificato il corretto funzionamento faremo in modo che si azioni ad ogni nuovo codice inserito.
Sub RiportaDatiCliente()
Dim wbData As Workbook
Dim wsData As Worksheet
Dim rCel As Range
Dim sFolderName As String, sBookName As String
Dim lColonnaRicerca As Long, lLastRow As Long
Dim bOpened As Boolean
Dim vRow As Variant, vCode As Variant
'--- parametri ricerca da modifcare
sFolderName = ThisWorkbook.Path & ""
sBookName = "bomboloni Gpl MODIFICATO.xls"
lColonnaRicerca = 4 ' d
'----------------------------------------------
Application.ScreenUpdating = False
'--- referenzia il file utilizzato per la ricerca, può essere aperto o chiuso
On Error Resume Next
Set wbData = Workbooks(sBookName)
If wbData Is Nothing Then
Set wbData = Workbooks.Open(sFolderName & sBookName, , True)
bOpened = True
End If
On Error GoTo Uffa
'--- modifica il nome del foglio nel quale effettuare la ricerca
Set wsData = wbData.Worksheets("Foglio1")
'--- modifica il nome del foglio che contiene i codici da ricercare
With ThisWorkbook.Worksheets("Foglio1")
'--- i codici si trovano in colonna Q
lLastRow = .Cells(Rows.Count, "q").End(xlUp).Row
For Each rCel In .Range("q2:q" & lLastRow)
vCode = rCel.Value
If Len(vCode) Then
vRow = Application.Match(vCode, wsData.Columns(lColonnaRicerca), 0)
If Not IsError(vRow) Then
'--- copia 4 celle a partire dalla colonna J e le incolla a partire dalla colonna ay
.Cells(rCel.Row, "ay").Resize(, 4).Value = wsData.Cells(vRow, "j").Resize(, 4).Value
Else
.Cells(rCel.Row, "ay").Resize(, 4).Value = Array("not found", "not found", "not found", "not found")
End If
End If
Next
End With
ExitHere:
On Error Resume Next
If bOpened Then wbData.Close False
Set rCel = Nothing: Set wsData = Nothing: Set wbData = Nothing
Exit Sub
Uffa:
Call MsgBox("Ohibò, si è verificato il seguente errore: " & vbNewLine & _
CStr(Err.Number) & ": " & Err.Description & vbNewLine & vbNewLine & _
"Codice in elaborazione: " & vCode, _
vbCritical + vbOKOnly, "Error message")
Resume ExitHere
End Sub
[EDIT]
Aggiungo, che se i file sono entrambi aperti, come appare dal tuo codice, potrebbe essere sufficiente utilizzare una formula per ottenere le informazioni desiderate.
Se non le conosci puoi approfondire l'utilizzo delle seguenti funzioni:
CERCA.VERT()
CONFRONTA(), INDICE().