Copiare dei Dati Da file Nuovo1 a File Nuovo2

di il
4 risposte

Copiare dei Dati Da file Nuovo1 a File Nuovo2

Salve, 

Ho dei dati che devo riportare da un file all'altro, mi basterebbe copiare la riga, scrivendo nella colonna X "FATTO"

Mi servirebbe automatizzare il tutto visto che si tratta di 4500 righe.

Sarebbe Possibile?

Grazie per i suggerimenti. 

4 Risposte

  • Re: Copiare dei Dati Da file Nuovo1 a File Nuovo2

    È sicuramente possibile ed in tre modi diversi: formule, VBA e PowerQuery.

    Dipende quindi da quali di questi "strumenti" conosci, quale versione di Excel hai a disposizione, cosa ci devi fare dopo che hai riempito la colonna X, cosa succede ai dati di partenza dopo che li hai copiati... Un sacco di cose insomma.

  • Re: Copiare dei Dati Da file Nuovo1 a File Nuovo2

    03/11/2025 - Sgrubak ha scritto:

    È sicuramente possibile ed in tre modi diversi: formule, VBA e PowerQuery.

    Dipende quindi da quali di questi "strumenti" conosci, quale versione di Excel hai a disposizione, cosa ci devi fare dopo che hai riempito la colonna X, cosa succede ai dati di partenza dopo che li hai copiati... Un sacco di cose insomma.

    Ciao devo copiarli in un altro file perchè dobbiamo fare la verifica della giacenza e poi dobbiamo attendere la scadenza (materiale elettronico), per poi inviarlo al fornitore.

    Quindi si dovrebbe copiare la riga della colonna X dove c'è scritto "FATTO" e copiarlo nel nuovo file. una volta incollato nella riga finale (una riga dopo l'ultimo dato inserito) della colonna A deve incollare i dati presi dal file precedente. 

    Io conosco un pò VBA, ma non riesco a fare il copia e incolla in un'altro file, mentre da Foglio 1 a 2 si.

    I dati di partenza devono rimanere nell'altro file perchè è un file condiviso per la verifica de materiale.

    Attualmente ho Office 365

    Grazie

  • Re: Copiare dei Dati Da file Nuovo1 a File Nuovo2

    03/11/2025 - superdaniele74 ha scritto:

    Io conosco un pò VBA, ma non riesco a fare il copia e incolla in un'altro file, mentre da Foglio 1 a 2 si.

    Se riesci a farlo tra fogli, allora sai farlo anche tra cartelle. Ti basta ricordare che la sintassi è

    cartDestinazione.foglioDestinazione.cella.Value = cartSorgente.foglioSorgente.cella.Value

    Puoi aprire "l'altra" (non so se il codice lo metterai nella cartella sorgente, nella destinazione o in un'altra ancora) tramite il metodo Open. Questo metodo ritorna il riferimento alla cartella aperta e, se questo riferimento lo assegni ad una variabile, puoi poi usarla nel codice normalmente.

    Tieni sempre a mente che i comandi

    Sheets("Foglio1").Range("A1").Value = "prova"
    ActiveWorkbook.Sheets("Foglio1").Range("A1").Value = "prova"

    sono equivalenti. Prima di Sheets ci va sempre un oggetto Workbook. Quando non lo espliciti, sottintendi la cartella attiva

  • Re: Copiare dei Dati Da file Nuovo1 a File Nuovo2

    Ciao vediamo insieme ......allora seguimi bene .......il dettaglio della tua richiesta:

    1. 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".
    2. Obiettivo:

      1. Copiare i dati nella colonna A (o eventualmente l’intera riga) nel file di destinazione.
      2. Inserire i dati una riga dopo l’ultima riga piena nel file di destinazione.
      3. I dati originali devono rimanere intatti nel file di origine, perché è un file condiviso.
    3. Problema specifico:

      1. 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.
    4. Motivo dell’operazione:

      1. Deve fare una verifica delle giacenze di materiale elettronico.
      2. 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.

    1. Apre i due file (origine e destinazione).
    2. Scorre tutte le righe del file di origine e controlla se nella colonna X c’è scritto "FATTO".
    3. Per ogni riga con "FATTO", copia il valore della colonna A e lo incolla nella prima riga libera del file di destinazione.
    4. Non modifica i dati originali nel file di origine.
    5. 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 

    1. Modifica i percorsi fileOrigine e fileDest con i percorsi reali dei tuoi file.
    2. 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)

    1. Questo codice mantiene i dati originali nel file di origine, come richiesto.
    2. 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 

    1. Apri Excel, premi ALT + F11 per aprire l’editor VBA.
    2. Inserisci un Modulo (clic destro su “VBAProject” ? Inserisci ? Modulo).
    3. Copia e incolla il codice sopra.
    4. Modifica i percorsi dei file (percorsoOrigine e percorsoDest) con quelli reali.
    5. 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.

Devi accedere o registrarti per scrivere nel forum
4 risposte