È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Sposta file da elenco Excel

Ultimo Aggiornamento: 07/10/2018 10:09
Post: 88
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
05/10/2018 00:23

Buona notte a tutti
Avrei bisogno di aiuto riguardo una macro che mi sposti file con nomi di clienti nelle relative cartelle

PREMESSA

A. Ho tre file.xlsx (nominati 'Paperino', 'Pippo', 'Pluto') nella Directory "C:\Users\Home\Desktop\Ordini\"

B. Grazie ad una Macro, ho potuto:

RINOMINARE detti file da elenco Excel
DA
'Paperino', 'Pippo', 'Pluto' (in Celle J6-J7-J8)

A
'Paperino2', 'Pippo2', 'Pluto2' (in Celle K6-K7-K8)

e SPOSTARLI automaticamente in altra directory "C:\Users\Home\Desktop\Clienti\"


ESIGENZA

Esiste la possibilità di una macro attraverso la quale i file rinominati 'Paperino2', 'Pippo2', 'Pluto2' e presenti nella Directory "C:\Users\Home\Desktop\Clienti\" vengano SPOSTATI nelle relative Directories
C:\Users\Home\Desktop\Clienti\Paperino\
C:\Users\Home\Desktop\Clienti\Pippo\
C:\Users\Home\Desktop\Clienti\Pluto\
elencate in Celle L6-L7-L8 e generate attraverso formula “CONCATENA”?



Spero di essere stato sufficientemente chiaro
Allego File di esempio e ringrazio anticipatamente per qualsiasi riscontro
Windows 10 - Excel LTSC
Post: 1.938
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
05/10/2018 17:09

ciao
non l'ho testato ma credo sia corretto

saluti

Sub Spostafile()
r = 6 'riga inizio dati
ur = Range("K" & Rows.Count).End(xlUp).Row

For j = r To ur
    mFile = Cells(r, 11)
    Filename = Mid(mFile, 1, InStr(mFile, ".") - 2)
    OldDir = Cells(r, 12)
    If Dir(OldDir & Filename, vbDirectory) = "" Then
        MkDir OldDir & Filename
    End If
    Name OldDir & mFile As OldDir & Filename & "\" & mFile
    DoEvents
Next j
End Sub

Domenico
Win 10 - Excel 2016
Post: 3.137
Registrato il: 03/04/2013
Utente Master
Excel 2000 - 2013
OFFLINE
05/10/2018 19:27

Buona sera, Pierpaolo;
consentimi un caro saluto a Domenico.

@dodo47 mi perdonerà, potrei sbagliarmi, ma credo che una piccola modifica vada vatta al Codice VBA.
Voglio dire, credo che il Codice vada modicato da:
mfile = Cells(r, 11)

a:
mfile = Cells(j, 11)

Analogamente, credo che il Codice vada modicato da:
OldDir = Cells(r, 11)

a:
OldDir = Cells(j, 11)


Questo sempre che la "Directory Desiderata" esista già; altrimenti è necessario crearla preventivamente con un piccolo Codice VBA.

Pierpaolo, fammi sapere se serve il Codice VBA per creare tutte le "Directories Desiderate" di destinazione.



A disposizione.

Buona serata.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 91
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
05/10/2018 20:02

Buonasera, Dodo47
Innanzi tutto grazie per la pazienza avuta nel leggere la descrizione del mio quesito.

Ho inserito il tutto nel VBA e, all’esecuzione della macro, mi si apre finestra di avviso con:
Errore di run-time ‘53’:
Impossibile trovare il file

Il successivo Debug evidenzia:
Name OldDir & mFile As OldDir & Filename & "\" & mFile


In verità, all’interno della directory in questione (C:\Users\Home\Desktop\Clienti\) la cartella ‘Paperino’ risulta creata; come risulta spostato in essa il relativo file ‘Paperino2’

Il resto, no.
Purtroppo non ho le conoscenze per capirne il perché

Puoi aiutarmi?
Windows 10 - Excel LTSC
Post: 92
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
05/10/2018 20:06

Caro GiuseppeMN, piacere di risentirti.
Non avevo letto le modifiche da te suggerite.
Testo il tutto e ti aggiorno al più presto
Grazie
Windows 10 - Excel LTSC
Post: 93
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
05/10/2018 20:50

Caro GiuseppeMN, il tuo suggerimento ha risolto il problema; anche se, nella seconda delle modifiche da te suggerite, forse intendevi

Da: OldDir = Cells(r, 12)
A: OldDir = Cells(j, 12)

Adesso va alla grande, avendola testata su un elenco di 16 file.
Non credo che troverò problemi quando imposterò l'elenco sui 100 che avevo in mente.

Riguardo la "Directory Desiderata", esiste già e, essendo solo una, non mi occorre altro codice (una volta tanto ;-) )

Grazie ancora [SM=x423047] per la tua immutata capacità di togliermi sempre le castagne dal fuoco (è periodo… [SM=x423038] )
Windows 10 - Excel LTSC
Post: 94
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
05/10/2018 21:00

Un sentito grazie a Dodo47 per l'efficace soluzione proposta.

Sinceramente pensavo che il mio quesito potesse essere non risolvibile, oltre che seccante da leggere per la forma prolissa.

Invece qui trovo sempre persone con la soluzione giusta e la pazienza di leggere noi profani che, spesso, fatichiamo a spiegarci

[SM=x423017]
Windows 10 - Excel LTSC
Post: 1.939
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
06/10/2018 10:00

Ringrazio GIUSEPPE per il suo intervento....comincio a preoccuparmi se faccio errori simili!! [SM=x423054]

Comunque se inesistenti, le directory vengono generate da quel codice.

saluti



[Modificato da dodo47 06/10/2018 10:02]
Domenico
Win 10 - Excel 2016
Post: 95
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
06/10/2018 16:00

Buon pomeriggio, Dodo47

Hai buttato giù il codice in quattr'e quattr'otto, senza nemmeno testarlo e, alla fine, hai sforato giusto di un millimetro...

Magari li perdessi io i colpi così [SM=x423021]

Grazie ancora
Windows 10 - Excel LTSC
Post: 3.138
Registrato il: 03/04/2013
Utente Master
Excel 2000 - 2013
OFFLINE
06/10/2018 16:05

Buon pomeriggio a tutti.

@pierpaolo.cavallo;
grazie della tua precisazione che ho molto apprezzato, purtroppo un copia/incolla improvvido ha generato il mio errore.

@dodo47;
direi che parlare di errore è fuori luogo.
Non ho ancora testato il tuo Codice VBA ma l'ho già inserito nelle Procedure da "non cancellare mai"; ovviamente con riferimento all'Autore "Sposta file da elenco Excel (dodo).xlsm"


Alla prossima.

Buon fine settimana.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 97
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
06/10/2018 18:16

Houston, abbiamo (ho) un problema:

Andando ad applicare la macro su dati reali - più complessi di quelli che avevo indicato a scopo esemplificativo nel file di esempio - mi sono accorto che
il nome delle cartelle che si generano nelle Directories desiderate (Colonna M) deriva dai dati inseriti in Colonna K (Nuovo nome file) e non da quelli in colonna H (Nome Cliente)

Potreste indicarmi il criterio con cui modificare la macro al riguardo?

Anche perché nuove esigenze mi impongono di spostare il 'Nome Cliente in colonna E

Chiedo scusa ma da solo non ci arrivo [SM=x423023]

Grazie [SM=x423025]
Windows 10 - Excel LTSC
Post: 1.940
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
06/10/2018 18:26

Ciao
cioè il file da creare è paperino2 e non paperino?

se è così basta che nell'istruzione:

Filename = Mid(mFile, 1, InStr(mFile, ".") - 2)

sostituisci 2 con 1

NON CONSIDERARE quanto sopra, ma

è bene che tu posti la nuova struttura (dettagliando cosa vuoi) al fine di non lavorare a vuoto.


[Modificato da dodo47 06/10/2018 18:29]
Domenico
Win 10 - Excel 2016
Post: 99
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
06/10/2018 19:42

Chiedo scusa, non sono riuscito a spiegarmi bene non per mancanza di volontà o rispetto, ma per assoluta assenza di mentalità informatica.

Non avevo chiaro il meccanismo in base al quale venivano nominate le cartelle di destinazione dei file.

Invio il file excel con i chiarimenti del caso indicati nel commento,

sperando che sia realizzabile ciò che chiedo.

Grazie per l'attenzione

Windows 10 - Excel LTSC
Post: 3.139
Registrato il: 03/04/2013
Utente Master
Excel 2000 - 2013
OFFLINE
07/10/2018 01:50

Salve, Pierpaolo;
leggo solo ora.

Credo che il NomeFile abbia qualche criticità nella Data; voglio dire, Windows, normalmente, considera i caratteri che seguono il simbolo . (punto) come estensione del File.
Cerco di spiegarmi, .xlsx definisce un tipo di File generato con Release di Excel 2007 o successive.
Il simbolo "." è consentito nel NomeFile anche come simbolo intermedio ma, nel nostro caso, l'struzione:
Filename = Mid(mfile, 1, InStr(mfile, ".") - 2)

gestisce proprio il simbolo "." come discriminante per definire il NomeFile e questo crea problemi.

Potresti pensare di modificare i NomeFile da:
-    Rossi Paolo_ordine del 05.10.2018_€ 15,00.xlsx
-    Verdi Antonio_ordine del 06.10.2018_€ 11,00.xlsx
-    Bianchi Mario_ordine del 06.10.2018_€ 9,00.xlsx
a:
-    Rossi Paolo_ordine del 05-10-2018_€ 15,00.xlsx
-    Verdi Antonio_ordine del 06-10-2018_€ 11,00.xlsx
-    Bianchi Mario_ordine del 06-10-2018_€ 9,00.xlsx

Nel caso questo sia conciliabile con le tue necessità, è possibile vedere le modifiche da apportare al Codice VBA di Domenico.


A disposizione.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 1.941
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
07/10/2018 09:39

Ciao
Visto che in col. E hai il nome cliente, l'istruzione:

Filename = Mid(mfile, 1, InStr(mfile, ".") - 2)

è superflua. Pertanto anche la col M non serve dato che è composta da L più E.

Pertanto (sempre non testato):

Sub Spostafile()
Dim r As Long, j As Long, FileDaSpostare As String, OldDir As String, NewDir As String
r = 6 'riga inizio dati
ur = Range("K" & Rows.Count).End(xlUp).Row
 
For j = r To ur
    FileDaSpostare = Cells(j, 11)
    OldDir = Cells(j, 12)
    NewDir = Cells(j, 5)
    If Dir(OldDir & NewDir, vbDirectory) = "" Then
        MkDir OldDir & NewDir
    End If
    On Error Resume Next
    Name OldDir & FileDaSpostare As OldDir & NewDir & "\" & FileDaSpostare
    DoEvents
    On Error GoTo 0
Next j
End Sub


Pierpaolo: ti suggerisco di apprendere qualcosa sulla programmazione altrimenti per un nonnulla sarai sempre a ricasco degli altri.

saluti



[Modificato da dodo47 07/10/2018 09:44]
Domenico
Win 10 - Excel 2016
Post: 100
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
07/10/2018 09:47

Buon giorno a te, Giuseppe MN e a tutti gli utenti del Forum.

Non ho alcun problema a rinominare in un attimo tutti i file grazie a Bulk Rename Utility.


Allego il file aggiornato di conseguenza
In esso le righe sono tre
Preciso che in quello originale sono 100


Mi spiace aver fuorviato te e Dodo47 con l'indicazione di nomi file diversi da quelli effettivi
(era per semplificare il concetto e in base ad una mia errata convinzione che, per migliore immediatezza di lettura, ho espresso nel file allegato).
Windows 10 - Excel LTSC
Post: 101
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
07/10/2018 09:51

Buon giorno, Dodo 47
Ho appena letto la tua risposta
Provo subito la tua macro
Grazie mille


Windows 10 - Excel LTSC
Post: 102
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
07/10/2018 10:09

Ciao Dodo47

Testato, testato...

Funziona perfettamente! [SM=x423030]

Grazie mille.
Un abbraccio


Windows 10 - Excel LTSC
Vota: 15MediaObject5,00618 6
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 03:23. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com