Condividi:        

copiare celle da un foglio ad un altro 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 celle da un foglio ad un altro file

Postdi flaviomars » 09/06/18 09:11

Ciao a tutti
mi chiamo Flavio ho 40 anni e sono di Pistoia e avrei bisogno del vostro aiuto.

ho un file che uso per fare dei raggruppamenti con delle macro per creare un output che viene salvato in un foglio nascosto all'interno di questo mio file con il nome Allegato Mail.

mi piacerebbe che una volta creato questo output, attraverso un nuovo pulsante, mi leggesse tutte le righe presenti nel foglio Allegato mail ( che ripeto nel file originale è nascosto) e mi spostasse le colonne, secondo un ordine, in un file esterno che si chiama output.xlsm si trova in una cartella sul mio desktop.

io ho provato a fare qualcosa ma riesco solo a creare un foglio all'interno del file che uso abitualmente.

vi allego il codice che ho scritto e due file dimostrativi

chi mi può aiutare?


Codice: Seleziona tutto
Sub Pulsante1_Click()



Sheets("Allegato Mail").Visible = True




x = 6
i = 5

Sheets("Allegato Mail").Select
For i = 5 To Cells(Rows.Count, 1).End(xlUp).Row

Sheets("Allegato mail").Cells(i, "A").Copy Destination:=Sheets("output").Cells(x, "C")
Sheets("Allegato mail").Cells(i, "B").Copy Destination:=Sheets("output").Cells(x, "A")
Sheets("Allegato mail").Cells(i, "C").Copy Destination:=Sheets("output").Cells(x, "B")
Sheets("Allegato mail").Cells(i, "D").Copy Destination:=Sheets("output").Cells(x, "U")
Sheets("Allegato mail").Cells(i, "D").Copy Destination:=Sheets("output").Cells(x, "U")
Sheets("Allegato mail").Cells(i, "H").Copy Destination:=Sheets("output").Cells(x, "E")
Sheets("SIM1").Cells(x, "D") = "Nestle Profesional"
Sheets("Allegato mail").Cells(i, "N").Copy Destination:=Sheets("output").Cells(x, "G")
Sheets("Allegato mail").Cells(i, "O").Copy Destination:=Sheets("output").Cells(x, "H")


x = x + 1

Next i
Sheets("Allegato Mail").Visible = False



End Sub


https://wetransfer.com/downloads/82084c8f75ad75989f29eb32dcb8113520180609075604/7487808b342fb7e23542c328e8abba2320180609075604/d5b29b
flaviomars
Utente Junior
 
Post: 11
Iscritto il: 09/06/18 09:01

Sponsor
 

Re: copiare celle da un foglio ad un altro file

Postdi Anthony47 » 09/06/18 11:54

Ciao "Flaviomars", bentornato nel forum...

Sei sulla buona strada, devi solo imparare a "indirizzare" non solo i Fogli ma anche i Workbooks.

Per fare quello che ti serve devi pero' aprire anche il secondo workbook, e a questo scopo immagino tu sappia gia' che puoi usare
Codice: Seleziona tutto
Workbooks.Open "C:\PercorsoCompleto\NomeFile.xlsx"


A questo punto devi tenere a mente che il file che contiene le macro e' indirizzabile come ThisWorkbook, mentre il file appena aperto e' "attivo" e quindi e' indirizzato per default.

Di conseguenza le tue istruzioni potrebbero cambiare come segue:
Codice: Seleziona tutto
Sheets("Allegato Mail").Select
Workbooks.Open "C:\PercorsoCompleto\NomeFile.xlsx"
For I = 5 To ThisWorkbook.Sheets("Allegato Mail").Cells(Rows.Count, 1).End(xlUp).Row
    ThisWorkbook.Sheets("Allegato mail").Cells(I, "A").Copy Destination:=Sheets("output").Cells(x, "C")
'copia altre colonne
'
Next I
ActiveWorkbook.Close True    'Salva e chiude il file esterno


Nota che invece di copia /incolla potresti usare quest'altra metodologia, piu' veloce (che copia solo il valore, non la formattazione; ma immagino che il foglio di destinazione sia gia' formattato come serve)
Codice: Seleziona tutto
    Sheets("output").Cells(x, "C").Value = ThisWorkbook.Sheets("Allegato mail").Cells(I, "A").Value


Oppure potresti evitare di scansionare le righe una per una e copiare il valore di tutta la colonna; tipo:
Codice: Seleziona tutto
Sheets("Allegato Mail").Select
Workbooks.Open "C:\PercorsoCompleto\NomeFile.xlsx"
'senza ciclo For I /Next I
    LastR = ThisWorkbook.Sheets("Allegato Mail").Cells(Rows.Count, 1).End(xlUp).Row
    Sheets("output").Cells(x, "C").Resize(LastR - 4, 1).Value = ThisWorkbook.Sheets("Allegato mail").Cells(I, "A").Resize(LastR - 4, 1).Value
    'copia altre colonne
    '
ActiveWorkbook.Close    'Salva e chiude il file esterno


Oggi non ti spiego come potresti accorciare la scrittura delle formule usando ad esempio
Codice: Seleziona tutto
With ThisWorkbook.Sheets("Allegato Mail")
'
   .Cells(I, "A").Copy Destination:=Sheets("output").Cells(x, "C")
'
End With


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

Re: copiare celle da un foglio ad un altro file

Postdi flaviomars » 09/06/18 12:13

Ciao e grazie

mi da un errore strano su questa riga

LastR = ThisWorkbook.Sheets("Allegato Mail").Cells(Rows.Count, 1).End(xlUp).Row --> errore di runtime errore di automazione

Cosa significa?
flaviomars
Utente Junior
 
Post: 11
Iscritto il: 09/06/18 09:01

Re: copiare celle da un foglio ad un altro file

Postdi Anthony47 » 09/06/18 12:21

Invece che .Cells(Rows.Count, 1).End(xlUp) prova con .Cells(65000, 1).End(xlUp)
Avatar utente
Anthony47
Moderatore
 
Post: 19183
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copiare celle da un foglio ad un altro file

Postdi flaviomars » 09/06/18 22:09

mi da sempre quel tipo di errore
flaviomars
Utente Junior
 
Post: 11
Iscritto il: 09/06/18 09:01

Re: copiare celle da un foglio ad un altro file

Postdi Anthony47 » 09/06/18 23:27

Puoi riallegare il file di prova che usi, con la nuova macro?
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19183
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copiare celle da un foglio ad un altro file

Postdi flaviomars » 10/06/18 01:52

flaviomars
Utente Junior
 
Post: 11
Iscritto il: 09/06/18 09:01

Re: copiare celle da un foglio ad un altro file

Postdi Anthony47 » 10/06/18 15:58

A me il file pubblicato (una volta sistemato il percorso & nome del file da aprire e il nome del foglio aperto su cui incollare i valori) funziona senza errori; ne' vedo cose strane all'interno del file.

C'e' da notare che nella versione "senza ciclo For I /Next I" il mio codice manca del flag per salvare il file di output dopo la sua compilazione; la versione corretta:
Codice: Seleziona tutto
ActiveWorkbook.Close True    'Salva e chiude il file esterno

Ho anche un dubbio se sia corretto partire da I = 5 visto che sul foglio "Allegato Mail" i dati partono da riga 2.

Se a te il problema persiste:
1) Aggiungi Dim LastR as Long all'inizio del codice
2) Prova a fare Ripristino di Office; vedi https://support.office.com/en-us/articl ... b40c5bb88b (vale per Office 2016, che mi sembra la tua)

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

Re: copiare celle da un foglio ad un altro file

Postdi flaviomars » 10/06/18 22:02

Ciao
ancora lo stesso errore.
Stavo pensando che magari mi da un problema sul file d'origine ma se a te va...
volevo provare magari a creare un pulsante su un nuovo file. Come potrei fare ad aprire i due file e fare tutte le operazioni che devo fare?
magari facendo cosi non mi crea l'errore
flaviomars
Utente Junior
 
Post: 11
Iscritto il: 09/06/18 09:01

Re: copiare celle da un foglio ad un altro file

Postdi Anthony47 » 10/06/18 23:25

Se vuoi ripartire da zero allora crea un nuovo file, copiaci dati, formule e formati da ogni foglio del file corrente; poi gli aggiungi il pulsante: Menu /Sviluppo /Gruppo Controlli, Inserisci /Pulsante (va benne quello dei Moduli).
Poi inserisci un nuovo Modulo vba, ci copi la macro, la associ al Pulsante (tasto dx sul pulsante, scegli Assegna macro). Questo sara' il nuovo file Prova.xlsm

Pero' se hai quell'errore sull'istruzione LastR = ThisWorkbook.Sheets("Allegato Mail").Cells(65000, 1).End(xlUp).Row mi sembra piu' un problema di Excel che di file; hai fatto il Ripristino?

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

Re: copiare celle da un foglio ad un altro file

Postdi flaviomars » 11/06/18 08:11

Ciao
ho provato il ripristino ma ancora quel errore. Ho provato anche a copiare il tutto su un nuovo file ma anche li. Ho provato a far girare altre macro e quelle girano.

ultima idea che mi è venuta è quella di fare un file a parte solo con la macro, ma ho il problema che non so come far aprire due file insieme.
flaviomars
Utente Junior
 
Post: 11
Iscritto il: 09/06/18 09:01

Re: copiare celle da un foglio ad un altro file

Postdi flaviomars » 11/06/18 11:04

io ho fatto una cosa del genere, ma si ferma con un errore sul ciclo for

Codice: Seleziona tutto
Sub Pulsante1_Click()
Dim fDialog As Office.FileDialog

Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
Dim selezione As Variant
Dim PercorsoStandard As String

  PercorsoStandard = "C:\"    'inserisci il percorso che desideri aprire di default

With fDialog
    .AllowMultiSelect = False
    .Title = "Seleziona il file da aprire"
    .InitialFileName = PercorsoStandard

    If .Show = -1 Then
        For Each selezione In .SelectedItems
            FileDaAprire = selezione
            ActiveWorkbook.FollowHyperlink Address:=FileDaAprire
        Next
    Else
        MsgBox "Caricamento annullato!", vbInformation  'quanto premi ‘cancella’ la macro si stoppa
        Exit Sub
    End If
End With

x = 6
I = 5


Workbooks.Open "C:\percorso\output.xlsm"

For I = 5 To Sheets("Allegato Mail").Cells(Rows.Count, 1).End(xlUp).Row
    Sheets("Allegato mail").Cells(I, "A").Copy Destination:=Sheets("output").Cells(x, "C")
'copia altre colonne
'
Next I
ActiveWorkbook.Close True    'Salva e chiude il file esterno

End Sub
flaviomars
Utente Junior
 
Post: 11
Iscritto il: 09/06/18 09:01

Re: copiare celle da un foglio ad un altro file

Postdi flaviomars » 11/06/18 13:42

mi dice indice non trovato nell'intervallo. ho provato anche a dichiarare la variabile
flaviomars
Utente Junior
 
Post: 11
Iscritto il: 09/06/18 09:01

Re: copiare celle da un foglio ad un altro file

Postdi Anthony47 » 11/06/18 18:50

Faccio fatica a seguirti...
E faccio fatica a pensare che per risolvere il problema semplice bisogna complicare il quadro complessivo.

Comunque i file con cui devi lavorare sono sempre gli stessi o hanno nome e percorso che cambiano?

Se sono fissi allora usa il Percorso + Nome file per aprirli. Tipo
Codice: Seleziona tutto
Workbooks.Open "C:\PercorsoCompleto\NomeFile1.xlsx"

Se sono variabili allora il sistema piu' semplice secondo me e' usare Dialogs(xlDialogOpen):
Codice: Seleziona tutto
Rispo = Application.Dialogs(xlDialogOpen).Show
If Rispo = False Then
    MsgBox ("Nessuna scelta, procedura terminata")
    Exit Sub
End If
Questa sequenza ti apre il file che l'utente scegliera', come se fosse stata avviata la procedura di Menu /File /Apri

Se i file diventano tre, allora non puoi piu' identificare il file principale tramite ThisWorkbook (visto che ora la macro sarebbe in un terzo file). Potrai allora impostare un riferimento al file principale subito dopo che l'hai aperto, quando e' il workbook attivo, usando
Codice: Seleziona tutto
Set FilePrincip = ActiveWorkbook


Dopodiche' invece di usare ThisWorkbook.Sheets("Allegato Mail").etc etc userai
Codice: Seleziona tutto
FilePrincip.Sheets("Allegato Mail").etc etc   'Dove prima usavi ThisWorkbook.Sheets("Allegato Mail").etc etc


Non dovrebbe cambiare l'indirizzamento del file che contiene il foglio "Output", se questo e' l'ultimo ad essere aperto e quindi e' il workbook al momento attivo.

Nel codice che ti ho dato ci sono le variabili Rispo e FilePrincip; esse e' bene che vengano dichiarate in testa al codice come tipo "Variant":
Codice: Seleziona tutto
Dim Rispo as Variant, FilePrincip as Variant

Usa questi tasselli, in aggiunta a quelli che descrivono come copiare le colonne fa un file/Foglio a un altro File/Foglio, per comprorre il quadro complessivo.

Se hai degli errori indica per favore
-il testo esatto del messaggio di errore
-la riga in errore, cioe' quella evidenziata quando scegli l'opzione Debug sul popup dell'errore

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

Re: copiare celle da un foglio ad un altro file

Postdi flaviomars » 11/06/18 22:56

Ciao
come prima l'errore me lo da sul ciclo for ( che scrivo in giallo)

Codice: Seleziona tutto
Sub Pulsante1_Click()
Dim Rispo As Variant, FilePrincip As Variant
Rispo = Application.Dialogs(xlDialogOpen).Show
If Rispo = False Then
    MsgBox ("Nessuna scelta, procedura terminata")
    Exit Sub
End If
x = 6
I = 5


Workbooks.Open "C:\Users\Desktop\SIM\Profesional\output.xlsm"
Set FilePrincip = ActiveWorkbook
[color=#FFFF40]For I = 5 To FilePrincip.Sheets("Allegato Mail").Cells(Rows.Count, 1).End(xlUp).Row
[/color]    FilePrincip.Sheets("Allegato mail").Cells(I, "A").Copy Destination:=Sheets("output").Cells(x, "C")
'copia altre colonne
'
Next I
ActiveWorkbook.Close True    'Salva e chiude il file esterno


End Sub


Come errore mi segna errore di run-time '9': indice non incluso nell'intervallo
flaviomars
Utente Junior
 
Post: 11
Iscritto il: 09/06/18 09:01

Re: copiare celle da un foglio ad un altro file

Postdi Anthony47 » 12/06/18 01:14

come prima l'errore me lo da sul ciclo for
Che significa "come prima"?

Per il resto hai fatto una gran confusione e mi tocca ripetere quanto gia' detto:
Se i file diventano tre, allora non puoi piu' identificare il file principale tramite ThisWorkbook (visto che ora la macro sarebbe in un terzo file). Potrai allora impostare un riferimento al file principale subito dopo che l'hai aperto, quando e' il workbook attivo, usando
Codice: Seleziona tutto
    Set FilePrincip = ActiveWorkbook


Ora io mi immagino che il file principale sia quello aperto tramite Application.Dialogs(xlDialogOpen).Show, e non quello aperto successivamente tramite Workbooks.Open "C:\Users\Desktop\SIM\Profesional\output.xlsm"; quindi hai messo l'istruzione Set FilePrincip = ActiveWorkbook nel posto sbagliato (lo devi mettere PRIMA di questo Workbooks.Open )
Immagino che il file output.xlsm = FilePrincip non abbia un foglio chiamato "Allegato mail", da qui l'errore run-time '9': indice non incluso nell'intervallo che ora ti esce (mentre fino a ieri avevi parlato di un mitologico "errore di runtime errore di automazione").

Insomma devi seguire con diligenza le istruzioni altrimenti giriamo in tondo e non risolviamo niente.
Avatar utente
Anthony47
Moderatore
 
Post: 19183
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copiare celle da un foglio ad un altro file

Postdi flaviomars » 12/06/18 06:06

Ciao
ti chiedo scusa.
il file che si apre con dialog è il file principale, mentre quello con woorkobbs.open è il file dove andrà scritto l'output.

io ho provato a mettere quel workbookopen all'inizio di tutto e poi fare il dialog in modo che su set fileprincip prenda il file aperto da schermata.

e questo facendo il debug dovrebbe farlo. il problema ora è all'interno del ciclo for che si blocca dando quell'errore di indice non incluso
flaviomars
Utente Junior
 
Post: 11
Iscritto il: 09/06/18 09:01

Re: copiare celle da un foglio ad un altro file

Postdi Anthony47 » 12/06/18 21:55

L'esperimento didattico sta' fallendo...
Questo e' quanto ho cercato di farti realizzare:
Codice: Seleziona tutto
Sub CCCC()
Dim Rispo As Variant, FilePrincip As Variant
'Apro il file Principale:
Rispo = Application.Dialogs(xlDialogOpen).Show
If Rispo = False Then
    MsgBox ("Nessuna scelta, procedura terminata")
    Exit Sub
End If
x = 6
I = 5
'Imposto riferimento al file principale:
Set FilePrincip = ActiveWorkbook
'Apro ora il file esterno:
Workbooks.Open "C:\Users\Desktop\SIM\Profesional\output.xlsm"
'Loop per copiare e trasporre cella per cella:
For I = 5 To FilePrincip.Sheets("Allegato Mail").Cells(Rows.Count, 1).End(xlUp).Row
    FilePrincip.Sheets("Allegato mail").Cells(I, "A").Copy Destination:=Sheets("Foglio1").Cells(x, "C")
    '
    'copia altre colonne: AGGIUNGERE QUI IL CODICE PER FARLO
    '
    x = x + 1
Next I
ActiveWorkbook.Close True    'Salva e chiude il file esterno

'?? Cosa fare del file principale? lo tieni aperto? lo chiudi?
'FilePrincip.Close False        'Con questa lo chiudi senza salvare
End Sub

Ho adattato la parte Destination:=Sheets("Foglio1").Cells(x, "C") inserendo un nome foglio presente nel file output.xlsm che hai pubblicato (perche' non esiste un foglio chiamato "output")

Questo codice non e' pero' quello che preferisco; tra quelli che avevo suggerito la mia preferenza va a questa versione:
Codice: Seleziona tutto
Sub CCCC()
Dim Rispo As Variant, FilePrincip As Variant
'Apro il file Principale:
Rispo = Application.Dialogs(xlDialogOpen).Show
If Rispo = False Then
    MsgBox ("Nessuna scelta, procedura terminata")
    Exit Sub
End If
x = 6
I = 5
'Imposto riferimento al file principale:
Set FilePrincip = ActiveWorkbook
Workbooks.Open "C:\Users\Desktop\SIM\Profesional\output.xlsm"
'senza ciclo For I /Next I
'Calcolo quante righe dati sono su Allegato Mail:
    LastR = FilePrincip.Sheets("Allegato Mail").Cells(Rows.Count, 1).End(xlUp).Row
    'copia e trasponi una colonna alla volta:
    Sheets("Foglio1").Cells(x, "C").Resize(LastR - 4, 1).Value = FilePrincip.Sheets("Allegato mail").Cells(I, "A").Resize(LastR - 4, 1).Value
    '
    'copia altre colonne: AGGIUNGERE QUI IL CODICE PER FARLO
    '

ActiveWorkbook.Close True    'Salva e chiude il file esterno
'?? Cosa fare del file principale? lo tieni aperto? lo chiudi?
'FilePrincip.Close False        'Con questa lo chiudi senza salvare

End Sub
Leggi i commenti, se non sei certo chiedi

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

Re: copiare celle da un foglio ad un altro file

Postdi flaviomars » 16/06/18 06:03

Scusami ero and uno workshop senza accesso al pc.
grazie mille
flaviomars
Utente Junior
 
Post: 11
Iscritto il: 09/06/18 09:01


Torna a Applicazioni Office Windows


Topic correlati a "copiare celle da un foglio ad un altro file":


Chi c’è in linea

Visitano il forum: Nessuno e 65 ospiti