Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Estrarre determinati file da una cartella e copiarli

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

Estrarre determinati file da una cartella e copiarli

Postdi Londonoffice » 08/09/10 18:36

Ciao a tutti, ho un nuovo grattacapo che sembra insolubile, quindi questo è il posto giusto per smentirmi!
Dunque...
Ho una cartella con centinaia di file dai nomi ostici (molto simili tra loro).
Ho una lista in excel che contiene in una colonna alcuni nomi di questi file, mettiamo 50.
Vorrei fare in modo di selezionare i 50 file della lista dalla cartella che contiene tutti i file e copiarli in un'altra.
A me sembra impossibile, non ho idea di che software potrei usare... o che formula o macro?!
Eppure voglio credere che si può!
Grazie! :)
Londonoffice
Utente Junior
 
Post: 28
Iscritto il: 13/08/10 20:57

Sponsor
 

Re: Estrarre determinati file da una cartella e copiarli

Postdi Anthony47 » 09/09/10 13:57

Devi fare una macro che legge uno dopo l' altro i nomi file, gli aggiungi il path, rinomini quel nome.
A spanne, qualcosa del tipo
Codice: Seleziona tutto
Sub RinominaLista()
PercCorr = "C:\percorso\sottoperc\"   '<<< Percorso corrente; nota la "\" finale....
PercNew= "C:\percorso1\sottoperc1\"  '<<< Nuovo percorso
Do
For I=2 to Cells(Rows.count,1).End(XLup).Row    'Elenco file da A2 verso il basso
NomeFile=PercCorr & Cells(I,1).value
Name NomeFile as Replace(NomeFile, PercCorr, PercNew)
Next I
End Sub

Metti nelle due istruzioni marcate <<< gli esatti valori e poi esegui la macro.

Questo SPOSTA i file da una cartella all' altra, se vuoi "creare una opia" dei file si puo' fare usando invece della Name il "Metodo Copy" (vedi help on line del vba); quindi se non risolvi posta ancora spiegando dove sei arrivato.

Ciao

Ps: preferiamo un "grazie" a consuntivo piuttosto che tanti salamelecchi preventivi... ;)
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrarre determinati file da una cartella e copiarli

Postdi Londonoffice » 09/09/10 15:28

Ciao, grazie della risposta (permettimi almeno questo, visto che hai dedicato il tuo tempo a leggere e rispondere al mio messaggio;))
Ho dimenticato di dire che sono completamente all'asciutto di programmazione...
Ho provato come dici tu a modificare il tuo codice, ma senza grandi risultati.
Una volta avviata la macro mi dice "Compile error: Do without Loop"
Non ho capito perché mi hai scritto un codice per rinominare... comunque, ecco il pasticcio che ho messo insieme.
Ah, i dati cominciano da A1 (ma qual è il dato da cambiare se invece partono da A3?) e il numero di righe può cambiare ogni volta. Mi piacerebbe scegliere la cartella sorgente dove pescare i file della lista e quella di destinazione tramite un dialogue box.

Codice: Seleziona tutto
Sub CopiaFile()
PercCorr = "C:\Documents and Settings\user\Desktop\Test\"   '<<< Percorso corrente; nota la "\" finale....
PercNew = "C:\Documents and Settings\user\Desktop\Test\destination\" '<<< Nuovo percorso
Do
For I = 1 To Cells(Rows.Count, 1).End(xlUp).Row 'Elenco file da A2 verso il basso
NomeFile = PercCorr & Cells(I, 1).Value
FileCopy NomeFile, PercNew
Next I
End Sub
Londonoffice
Utente Junior
 
Post: 28
Iscritto il: 13/08/10 20:57

Re: Estrarre determinati file da una cartella e copiarli

Postdi Anthony47 » 09/09/10 18:57

Ho proposto una macro di SPOSTAMENTO invece che di Copia perche' trovo autolesionistico avere piu' copie dello stesso file in posizioni diverse, speravo quindi che ti fossi sbagliato...
Se vuoi proprio duplicare:
Codice: Seleziona tutto
Sub CopiaLista()
PercCorr = "C:\Documents and Settings\UTENTE\Desktop\PC-FACILE\"   '<<< Percorso corrente; nota la "\" finale....
PercNew = "C:\Documents and Settings\UTENTE\Desktop\PC-FACILE\PIPPOA\" '<<< Nuovo percorso
For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row 'Elenco file da A2 verso il basso
NomeFile = PercCorr & Cells(I, 1).Value
'Name NomeFile As Replace(NomeFile, PercCorr, PercNew)
FileCopy NomeFile, Replace(NomeFile, PercCorr, PercNew)
Next I
End Sub

La macro precedente aveva un "Do" assolutamente erroneo: e' che come test avevo usato il metodo del Do / Loop, poi convertito in fase di risposta nel ciclo For /Next.

Se vuoi usare un dialoguebox per le directories oìpuoi usare qualcosa come:
Codice: Seleziona tutto
With Application.FileDialog(msoFileDialogFolderPicker)
    .Show
    PercCorr = .SelectedItems(1) & "\"
End With

Una cosa analoga per PercNew, a meno che non lo possa calcolare come
PercNew = PercCorr & "destination\"

Bye.

PS:
It didn't seem that Italian public could provide a solution, but I hope I'm wrong!
You man of little faith
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrarre determinati file da una cartella e copiarli

Postdi Londonoffice » 10/09/10 08:03

Ottimo inizio! L'ho provata a casa (dove uso OpenOffice 3.x Calc in italiano) e mi dà un errore:
Errore di runtime basic. Variabile dell'oggetto non impostata.
...evidenziando la riga:
For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row 'Elenco file da A2 verso il basso
Più tardi provo in ufficio che uso excel 2007 in inglese, magari lì funziona?
Già che ci sono... la cartella di destinazione, come quella di origine, possono variare e non sempre sono una dentro l'altra.
Per soddisfare la tua curiosità, diciamo che questa cosa mi serve per estrarre solo alcuni file su cui altre persone devono lavorare e quindi devo inviarglieli. La batch originale non può essere alterata, altrimenti i programmi che usano quei file vanno a farsi friggere. ;) Inoltre lo trovo molto utile ai fini di backup! In entrambi i casi, non è sullo stesso hard disk che i file finiscono.
Ancora grazie per il tentativo, poi però vorrei farti qualche domanda sul funzionamento della macro, così anche da ignorante posso almeno dire di capire quello che fa la macro!
Ciao, buona giornata.
Londonoffice
Utente Junior
 
Post: 28
Iscritto il: 13/08/10 20:57

Re: Estrarre determinati file da una cartella e copiarli

Postdi Londonoffice » 10/09/10 11:19

Perfetto!
In ufficio funge alla perfezione!!
Genio! :D

A questo punto ho provato qualche accorgimento da una macro che qualcuno mi aveva gentilmente scritto per fare un'altra cosa. Volevo solo settare il percorso iniziale e attivare la macro all'apertura. E ci sono riuscito! :)
Codice: Seleziona tutto
Sub Auto_Open()
With Application
.OnKey Key:="^+K", Procedure:="CopiaLista"
End With
End Sub

Sub CopiaLista()
        Dim InitialFoldr$
        InitialFoldr$ = "C:\source\"
With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Please select a folder to copy Files from"
        .InitialFileName = InitialFoldr$
    .Show
    PercCorr = .SelectedItems(1) & "\"
End With

With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = Application.DefaultFilePath & "\"
        .Title = "Please select a folder to copy Files to"
        .InitialFileName = InitialFoldr$
    .Show
    PercNew = .SelectedItems(1) & "\"
End With

For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row 'Elenco file da A2 verso il basso
NomeFile = PercCorr & Cells(I, 1).Value
'Name NomeFile As Replace(NomeFile, PercCorr, PercNew)
FileCopy NomeFile, Replace(NomeFile, PercCorr, PercNew)
Next I

End Sub



Adesso però... Ho provato a non scegliere un folder, cliccando Cancel nel dialogue box e mi dà un errore: Runtime error 5: Invalide procedure call or argument.
Ricordo che nell'altra macro avevo qualcosa come:
Codice: Seleziona tutto
If .SelectedItems.Count <> 0 Then
           blablabla
        End If

ma non so bene come ficcarlo qua dentro... any idea?
E grazie ancora per il prezioso aiuto, credo che risparmierai a me e i miei colleghi molta fatica, con risultati decisamente più precisi! Grazie!
Londonoffice
Utente Junior
 
Post: 28
Iscritto il: 13/08/10 20:57

Re: Estrarre determinati file da una cartella e copiarli

Postdi Londonoffice » 10/09/10 11:38

Argh!
A dire il vero non funziona più l'apertura automatica...
Nell'altra macro a mia disposizione trovavo...
Codice: Seleziona tutto
Option Explicit
Sub Auto_Open()
With Application
.OnKey Key:="^+K", Procedure:="GetFileNames"
End With
End Sub

Private Sub Workbook_Open()
With Application
.OnKey Key:="^+K", Procedure:="GetFileNames"
End With
End Sub

Ma se metto qui Option Explicit poi mi dice che "Variable not defined" evidenziando PercCorr.
Scusa la confusione, ma in pratica a quella macro che hai suggerito e cui nel messaggio precedente ho inserito il dialogue box per scegliere le cartelle vorrei aggiungere la funzione di avviare la macro con una scorciatoia da tastiera, e quindi forse avviarla nel contempo all'apertura del file.
Idee? :P
Londonoffice
Utente Junior
 
Post: 28
Iscritto il: 13/08/10 20:57

Re: Estrarre determinati file da una cartella e copiarli

Postdi Londonoffice » 10/09/10 12:47

Ecco, mi è venuta in mente un'altra cosa! Come faccio a fare in modo che non sovrascriva mai? O ancora meglio, se il file nel destination folder esiste, magari mi chiede caso per caso se voglio sovrascrivere...?
Scusate tanti post consecutivi ma non capisco come editare i precedenti!
Londonoffice
Utente Junior
 
Post: 28
Iscritto il: 13/08/10 20:57

Re: Estrarre determinati file da una cartella e copiarli

Postdi Anthony47 » 10/09/10 18:14

Se vuoi impostare una shortcut per la macro:
-da excel, Alt-F8
-seleziona dall' elenco il nome della macro, premi Opzioni
-digita il carattere che preferisci, Ok, Ok.

Quindi puoi abbandonare la Auto_Open.

La macro non e' un prodotto finito, ma uno spunto da affinare in funzione delle tue esigenze; ad esempio vedo che hai saggiamente inserito la descrizione dell' oprazione da compiere (.Title). Se vuoi inserire il controllo che effettivamente sia stata prelevata una directory userai, prima PerCorr=Etc etc:
Codice: Seleziona tutto
If .SelectedItems.Count = 0 Then Msgbox("Abortito") : Exit sub

Per soddisfare la tua curiosità, diciamo che questa cosa mi serve per estrarre solo alcuni file su cui altre persone devono lavorare e quindi devo inviarglieli.
Non e' per curiosita' che facevo quella considerazione, mettevo solo in evidenza quella che io considero una "bad practice"; adesso uno dei problemi che avrai sara' l' allineamento tra file aggiornati e file meno aggiornati.

In proposito, chiedi di non sovrascrivere file gia' presenti nella directory di destinazione; se questo e' per guadagnare tempo di copia allora e' un falso problema; se invece mantenere copie precedenti ha un significato reale, allora l' istruzione FileCopy non e' idonea, bisognera' procedere con un "FilesystemObject", che consente di impostare l' overwrite.
Se confermi il bisogno ti proporro una bozza su cui lavorare, comunque "piu' tardi".

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrarre determinati file da una cartella e copiarli

Postdi Londonoffice » 10/09/10 18:40

Grazie come sempre per la disponibilità.
Il problema dei file più aggiornati o meno non c'è, perché una volta mandati i file dove devono andare, non ho più il diritto di modificarli.
Il fatto è che li devo inviare a scaglioni, quindi le liste che mi forniscono sono ogni volta diverse.
Per il fatto di non sovrascrivere, la preoccupazione è che qualcuno inavvertitamente selezioni come destinazione la cartella di un'altra lingua (che contiene file con gli stessi nomi, ma con contenuti totalmente diversi) e faccia un pasticcio apocalittico. Invece se la target location è quella attesa, dovrebbe essere vuota. Ecco ora che ci penso un altro espediente potrebbe essere quello di segnalare "se la cartella di destinazione non è vuota, forse c'è un problema!". Il massimo comunque sarebbe l'allarme che rischi di sovrascrivere, che renderebbe la macro universale anche per altri propositi.
Mi sembra già incredibile che tu ti prenda la briga di rispondermi con tanta pazienza, perciò prendo il tuo più tardi come una cortesia! :)
Se questo ti può servire, ho trovato in un altro sito una macro che sembra fare al caso mio, ma non sono capace di modificarla in modo che anziché tutta la cartella mi copi solo i file della lista, come hai gentilmente scritto tu.
Ecco il link (sono sicuro che non ne hai bisogno, ma magari ti risparmia qualche minuto a scrivere!)
http://www.vbaexpress.com/kb/getarticle.php?kb_id=827
Non l'ho provata, ma basandomi sulla descrizione sembra azzeccarci! O meglio, l'ho provata ma ho fatto qualcosa storto perché non funzionava :(
Londonoffice
Utente Junior
 
Post: 28
Iscritto il: 13/08/10 20:57

Re: Estrarre determinati file da una cartella e copiarli

Postdi Anthony47 » 13/09/10 00:43

Una macro come la seguente, da inserire subito dopo la compilazione di PercNew, segnala che la directory di destinazione contiene dei file e abortisce la procedura:
Codice: Seleziona tutto
FileI = 0
FileMx(FileI) = Dir(PercNew & "*.*")
    If Len(FileMx(FileI)) > 0 Then
'        FileI = 1: FileMX (FileI)
    Do
        FileI = FileI + 1: If FileI > 18 Then FileI = 18
        FileMx(FileI) = Dir
        If Len(FileMx(FileI)) = 0 Then Exit Do
        Loop
    End If

If FileI > 0 Then
Mess = "La directory di destinazione contiene "
If FileI > 15 Then Mess = Mess & "piu' di 15 files!" Else Mess = Mess & FileI & " file(s):"
For I = 0 To FileI
If I > 4 And Len(FileMx(I)) > 0 Then Mess = Mess & vbCrLf & "... e altri": Exit For
Mess = Mess & vbCrLf & ">> " & FileMx(I)
Next I
MsgBox (Mess & vbCrLf & "La procedura VIENE ABORTITA"): Beep: Exit Sub
End If
Non mi sembra che il warning prima di sovrascrivere sia esente da rischi, visto che dici che i files hanno sempre gli stessi nomi; e soprattutto non e' evitando la sovrascrittura che si evita il possibile errore, al limite si puo' vieppiu' fare casino.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrarre determinati file da una cartella e copiarli

Postdi Londonoffice » 23/10/10 13:10

Ciao Anthony, e grazie per i preziosi consigli, anche se è già passato un bel po'! Sono riuscito a semplificare quanto dovevo fare. Di nuovo grazie!
Londonoffice
Utente Junior
 
Post: 28
Iscritto il: 13/08/10 20:57


Torna a Applicazioni Office Windows


Topic correlati a "Estrarre determinati file da una cartella e copiarli":


Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti