Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

copiare da file a file

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

copiare da file a file

Postdi remo66 » 30/10/18 13:57

salve a tutti,
sono un nuovo iscritto, per niente pratico di macro e chiedo aiuto.

Devo copiare l'ultima riga di un elenco dinamico e incollarla
nell'ultima riga vuota di un altro elenco di un altro file.

Cercando nella rete, ho trovato un codice che fa quello che mi serve,
il problema è che prima di incollare la riga ricalcola tutte le precedenti,
se, come nell'esempio che posto, i dati sono pochi ci sta mezzo secondo
ma adattandolo ad un lavoro con 12 colonne e oltre 10.000 righe sempre in aggiornamento
prima di incollarla impiega quasi 2 minuti.

Si potrebbe modificarlo perché faccia solo il lavoro di copia/incolla?

http://www.filedropper.com/dafileafile_1

Sperando di essere stato chiaro
Vi ringrazio per la cortesia

Excel 2003
remo66
Newbie
 
Post: 5
Iscritto il: 29/10/18 12:28

Sponsor
 

Re: copiare da file a file

Postdi alfrimpa » 30/10/18 20:28

Ciao

Ad inizio macro metti

Codice: Seleziona tutto
Application.Calculation = xlManual


e prima di End Sub

Codice: Seleziona tutto
Application.Calculation = xlAutomatic


In questo modo la modalità di ricalcolo viene prima settata a manuale e poi ripristinata ad automatico
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: copiare da file a file

Postdi remo66 » 30/10/18 22:57

Ciao Alfrimpa
e grazie dell'interessamento

però scusa ancora non ci siamo
con il tuo codice invece di starci due minuti
ci impiega circa un minuto
ma alla fine ricalcola sempre le righe precedenti

il risultato da raggiungere è che incolli subito la riga
e non ricalcoli

Grazie ancora
remo66
Newbie
 
Post: 5
Iscritto il: 29/10/18 12:28

Re: copiare da file a file

Postdi Anthony47 » 30/10/18 23:05

Ciao remo66, benvenuto nel forum
A me pare che la macro ImportaDati presente nel file ImportaDati.xls importa tutti i record presenti sul Foglio1 del file richiamato, mentre tu parli di " copiare l'ultima riga di un elenco dinamico e incollarla nell'ultima riga vuota di un altro elenco di un altro file" (e immagino che volessi dire "PRIMA" riga vuota)

Quindi ti suggerirei di ignorare per ora la possibile soluzione e spiegare esattamente quel che vorresti fare (es copiare da file Dati.xls i record non ancora presenti nel file ImportaDati.xls, o solo l'ultimo record di Dati.xls controllando che ... , o...???)

Ciao, ti aspettiamo...
Avatar utente
Anthony47
Moderatore
 
Post: 17658
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copiare da file a file

Postdi remo66 » 30/10/18 23:20

ciao Anthony, grazie del benvenuto

hai ragione ho confuso prima con ultima

quello che deve fare è copiare sempre l'ultimo record di Dati.xls
remo66
Newbie
 
Post: 5
Iscritto il: 29/10/18 12:28

Re: copiare da file a file

Postdi Anthony47 » 31/10/18 20:08

Prova allora questa macro (in sostituzione di tutto il codice ora in uso):
Codice: Seleziona tutto
Sub Importa2()
Dim oFile As String, LastA As Long, I As Long, iNext As Long
'
oFile = "Dati.xls"      '<<< Il file in cui prelevare il record
'
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
iNext = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(iNext, 1).Formula = ("=CountA('" & ThisWorkbook.Path & "\[" & oFile & "]Foglio1'!A1:A30000)")
LastA = Cells(iNext, 1).Value
Cells(iNext, 1).ClearContents
For I = 1 To 12 Step 2
    Cells(iNext, I).Formula = "='" & ThisWorkbook.Path & "\[" & oFile & "]Foglio1'!" & Range("A1").Offset(LastA - 1, Int(I / 2)).Address
    If Len(Cells(iNext, I).Value) < 2 Then
        Cells(iNext, I).Clear
        Exit For
    End If
Next I
Range(Cells(iNext, 1), Cells(iNext, 20).End(xlToLeft)).Value = Range(Cells(iNext, 1), Cells(iNext, 20).End(xlToLeft)).Value
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub

Al bisogno dovrai mandare in esecuzione la Sub Importa2 avendo gia' attivato il foglio in cui vuoi importare il nuovo record.

Non ho capito quanto e' "lungo" il tuo Dati.xls, quindi non so stimare se ci saranno problemi di tempi di esecuzione.
E' possibile che la formattazione delle colonne debba essere impostata manualmente.

Prova e fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 17658
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copiare da file a file

Postdi remo66 » 01/11/18 19:23

Buonasera

Anthony, il tuo codice funziona benissimo
incolla in una frazione di secondo dopo quasi 10.000 records
e per questo ti ringrazio.

Purtroppo con dispiacere e chiedendo scusa
ti devo confessare che ho postato il file sbagliato,
vuoi perché era già pronto (non dovevo togliere altre macro, fogli e fronzoli vari)
vuoi perché in quello originale (non so per quale recondito motivo)
ho considerato gruppi di 5 colonne ravvicinate come fossero solo una
e credevo di poterci applicare sopra la tua macro
sta di fatto che ho sbagliato ed ora non coincidono più i valori per colonna,
ma un esempio vale più di tante parole

http://www.filedropper.com/dafileafile2_1

se cortesemente vorresti darmi ancora un aiuto
visto che io e le macro non andiamo tanto d’accordo

ciao
remo66
Newbie
 
Post: 5
Iscritto il: 29/10/18 12:28

Re: copiare da file a file

Postdi Anthony47 » 02/11/18 00:13

Allora prova questa variante:
Codice: Seleziona tutto
Sub Importa3()
Dim oFile As String, LastA As Long, I As Long, iNext As Long
Dim hOff As Long
'
oFile = "Dati.xls"      '<<< Il file in cui prelevare il record
'
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
iNext = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(iNext, 1).Formula = ("=CountA('" & ThisWorkbook.Path & "\[" & oFile & "]Archivio'!A1:A30000)")
LastA = Cells(iNext, 1).Value
Cells(iNext, 1).ClearContents
For I = 1 To 56
    If Len(Cells(iNext - 1, I + hOff).Value) < 1 Then hOff = hOff + 1
    Cells(iNext, I + hOff).Formula = "='" & ThisWorkbook.Path & "\[" & oFile & "]Archivio'!" & Range("A1").Offset(LastA - 1, I - 1).Address
Next I
Range(Cells(iNext, 1), Cells(iNext, 100).End(xlToLeft)).Value = Range(Cells(iNext, 1), Cells(iNext, 100).End(xlToLeft)).Value
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17658
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copiare da file a file

Postdi remo66 » 02/11/18 16:04

Anthony, va bene così!

Molte grazie per l'aiuto e la pazienza.

Ciao
remo66
Newbie
 
Post: 5
Iscritto il: 29/10/18 12:28


Torna a Applicazioni Office Windows


Topic correlati a "copiare da file a file":


Chi c’è in linea

Visitano il forum: Nessuno e 52 ospiti