Ciao vediamo insieme ......allora seguimi bene .......il dettaglio della tua richiesta:
Situazione:
- Ha un file di origine (Nuovo1) con circa 4500 righe.
- Vuoi copiare alcune righe in un altro file (Nuovo2).
- La riga va copiata solo se nella colonna X c’è scritto "FATTO".
Obiettivo:
- Copiare i dati nella colonna A (o eventualmente l’intera riga) nel file di destinazione.
- Inserire i dati una riga dopo l’ultima riga piena nel file di destinazione.
- I dati originali devono rimanere intatti nel file di origine, perché è un file condiviso.
Problema specifico:
- Sa usare un po’ VBA e riesce a copiare dati da un foglio all’altro nello stesso file, ma non riesce a farlo tra due file diversi.
Motivo dell’operazione:
- Deve fare una verifica delle giacenze di materiale elettronico.
- Dopo la verifica, dovrà attendere la scadenza e inviare i dati al fornitore.
e fino a qui tutto chiaro, adesso seguimi per capire....
....quindi stai cercando una soluzione VBA semplice per automatizzare il copia/incolla condizionale tra due file Excel, preservando i dati originali e gestendo file separati.
Vediamo
Ho preparato per te un esempio di macro VBA che automatizza il tuo compito.
- Apre i due file (origine e destinazione).
- Scorre tutte le righe del file di origine e controlla se nella colonna X c’è scritto "FATTO".
- Per ogni riga con "FATTO", copia il valore della colonna A e lo incolla nella prima riga libera del file di destinazione.
- Non modifica i dati originali nel file di origine.
- Alla fine salva e chiude il file di destinazione e mostra un messaggio "Copia completata!".
Come usarla:
- Apri Excel, premi ALT + F11 per aprire l’editor VBA.
- Inserisci un modulo (clic destro ? Inserisci ? Modulo) e incolla il codice.
- Modifica i percorsi dei file con quelli reali sul tuo computer.
- Premi F5 per eseguire la macro.
Se vuoi copiare tutta la riga invece della sola colonna A, posso mostrarti come fare con una piccola modifica al codice.
Il codice che ti ho fatto io dovrebbe funzionare e ti spiego come lo puoi sostituire con foglio 1 e foglio 2
Leggi bene non te lo dico per offenderti ma per farti capire
Sì, è assolutamente possibile automatizzare questa operazione con VBA. L’idea è di aprire entrambi i file, scorrere le righe del file di origine, controllare se nella colonna X c’è scritto “FATTO” e copiare l’intera riga (o solo la colonna A, come indicato) nel file di destinazione, appoggiandosi all’ultima riga disponibile, senza modificare i dati originali.
un esempio di codice VBA che puoi usare in Excel (Office 365) :
Sub CopiaFattoInAltroFile()
Dim wbOrigine As Workbook
Dim wbDest As Workbook
Dim wsOrigine As Worksheet
Dim wsDest As Worksheet
Dim lastRowOrig As Long
Dim lastRowDest As Long
Dim i As Long
Dim fileOrigine As String
Dim fileDest As String
' Percorsi dei file
fileOrigine = "C:\Percorso\FileNuovo1.xlsx" ' Modifica con il percorso corretto
fileDest = "C:\Percorso\FileNuovo2.xlsx" ' Modifica con il percorso corretto
' Apri file di origine e destinazione
Set wbOrigine = Workbooks.Open(fileOrigine)
Set wsOrigine = wbOrigine.Sheets(1) ' Usa il foglio corretto
Set wbDest = Workbooks.Open(fileDest)
Set wsDest = wbDest.Sheets(1) ' Usa il foglio corretto
' Trova l'ultima riga con dati
lastRowOrig = wsOrigine.Cells(wsOrigine.Rows.Count, "X").End(xlUp).Row
lastRowDest = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Row + 1 ' riga dopo l'ultima
' Scorri le righe del file di origine
For i = 1 To lastRowOrig
If wsOrigine.Cells(i, "X").Value = "FATTO" Then
' Copia la colonna A (puoi modificare se vuoi tutta la riga)
wsDest.Cells(lastRowDest, "A").Value = wsOrigine.Cells(i, "A").Value
lastRowDest = lastRowDest + 1
End If
Next i
' Salva e chiudi il file di destinazione
wbDest.Save
wbDest.Close
' Chiudi file di origine senza salvare
wbOrigine.Close SaveChanges:=False
MsgBox "Copia completata!"
End Sub
******************************************************************
tieni in considerazione
- Modifica i percorsi fileOrigine e fileDest con i percorsi reali dei tuoi file.
- Se vuoi copiare tutta la riga, puoi sostituire wsDest.Cells(lastRowDest, "A").Value = wsOrigine.Cells(i, "A").Value con:
wsOrigine.Rows(i).Copy wsDest.Rows(lastRowDest)
- Questo codice mantiene i dati originali nel file di origine, come richiesto.
- Assicurati che entrambi i file non siano protetti o condivisi con permessi limitati durante l’esecuzione.
***************************************************************
Questo invece funziona
Sub CopiaFattoSuAltroFile()
Dim wbOrigine As Workbook
Dim wbDest As Workbook
Dim wsOrigine As Worksheet
Dim wsDest As Worksheet
Dim ultimaRigaOrig As Long
Dim ultimaRigaDest As Long
Dim i As Long
Dim percorsoOrigine As String
Dim percorsoDest As String
' Inserire i percorsi corretti dei file
percorsoOrigine = "C:\Percorso\FileNuovo1.xlsx"
percorsoDest = "C:\Percorso\FileNuovo2.xlsx"
' Apri il file di origine e destinazione
Set wbOrigine = Workbooks.Open(percorsoOrigine)
Set wsOrigine = wbOrigine.Sheets(1) ' modifica se il foglio non è il primo
Set wbDest = Workbooks.Open(percorsoDest)
Set wsDest = wbDest.Sheets(1) ' modifica se il foglio non è il primo
' Trova l'ultima riga nella colonna X del file di origine
ultimaRigaOrig = wsOrigine.Cells(wsOrigine.Rows.Count, "X").End(xlUp).Row
' Trova l'ultima riga disponibile nel file di destinazione
ultimaRigaDest = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Row + 1
' Cicla tutte le righe del file di origine
For i = 1 To ultimaRigaOrig
If wsOrigine.Cells(i, "X").Value = "FATTO" Then
' Copia il valore della colonna A nel file di destinazione
wsDest.Cells(ultimaRigaDest, "A").Value = wsOrigine.Cells(i, "A").Value
ultimaRigaDest = ultimaRigaDest + 1
End If
Next i
' Salva e chiudi il file di destinazione
wbDest.Save
wbDest.Close
' Chiudi il file di origine senza salvare
wbOrigine.Close SaveChanges:=False
MsgBox "Copia completata!", vbInformation
End Sub
***********************************************************
Come si utilizza
- Apri Excel, premi ALT + F11 per aprire l’editor VBA.
- Inserisci un Modulo (clic destro su “VBAProject” ? Inserisci ? Modulo).
- Copia e incolla il codice sopra.
- Modifica i percorsi dei file (percorsoOrigine e percorsoDest) con quelli reali.
- Premi F5 per eseguire la macro.
Se vuoi copiare tutta la riga invece della sola colonna A, puoi sostituire la riga:
wsDest.Cells(ultimaRigaDest, "A").Value = wsOrigine.Cells(i, "A").Value
con:
wsOrigine.Rows(i).Copy wsDest.Rows(ultimaRigaDest)
Così copierai tutti i dati della riga, preservando anche eventuali formati.
NB=
Gli asterischi evidenziati in verde è per delimitare non si scrivono nei codici.