Creare macro per rinominare file



  • Creare macro per rinominare file
    di Elena (utente non iscritto) data: 22/08/2016 17:30:50

    Ciao.... giuro che ho cercato, ma non ho trovato la macro esatta per il mio caso....

    vi espongo il problema:

    ho una cartella chiamata "tappo" contenente foto nominate tipo "45258 collezione pippo.jpg, 45260 collezione baubau.jpg" ecc....

    ho un file xlsx con due colonne: colonna A 45258, 45260 eccc - colonna B 10125, 11301 ecc

    praticamente la colonna A mi rappresenta il codice della foto senza il testo.. (codice vecchio)
    la Colonna B mi rappresenta il nuovo codice che la foto dovrebbe prendere....

    nell'elenco xlsx ci sono molti piü codici che foto nella cartella tappo...

    la macro dovrebbe rinominarmi 45258 collezione pippo.jpg in 10125.jpg avendo l'xlsx solo 45258 e non tutto il testo...

    spero di essere stata chiara.....

    grazie
    Elena



  • di patel data: 22/08/2016 17:46:35

    allega un file di esempio con 10 righe e spiega meglio





  • di Elena (utente non iscritto) data: 22/08/2016 18:02:59

    Ciao Patel,
    come faccio ad allegare i file?

    in ogni caso ho file xls con con colonna A codice vecchio (5 cifre) , colonna B codice nuovo (5 cifre).

    i file jpg nella cartella perö sono nominati col codice vecchio (5 cifre) piu una breve descrizione testuale poi esensione jpg

    spero di essere stata un po piu chiara...

    grazie per l'aiuto!



  • di patel data: 22/08/2016 18:12:09

    prova questa
     
    Sub RenameFile()
    TotalRow = Cells(Rows.Count, "A").End(xlUp).Row
    cartella = "F:Download" ' <<< percorso completo da modificare e terminare con 
    For r = 1 To TotalRow
      numero = Cells(r, 1)
      nomefile = Dir(cartella & numero & "*")
      If nomefile <> "" Then
         MsgBox nomefile
      End If
      Name cartella & nomefile As cartella & Cells(r, 2) & ".jpg"
    Next
    MsgBox "Fatto"
        
    End Sub






  • di Elena (utente non iscritto) data: 22/08/2016 18:59:17

    Grazzie mille!! Domani mattina provo e ti faccio sapere!!



  • di Elena (utente non iscritto) data: 23/08/2016 09:35:04

    Ciao... ho provato ma mi da errore percorso...
    premetto che ho cambiato il percorso puntando sulla mia cartella....

    ti allego l'errore...



  • di patel data: 23/08/2016 09:55:49

    ce l'ho anche scritto che il percorso deve terminare con
    perché ci hai messo l'asterisco ?





  • di Elena (utente non iscritto) data: 23/08/2016 10:00:46

    non ho messo asterisco... ho messo .....



  • di Elena (utente non iscritto) data: 23/08/2016 10:09:23

    Cliccando su debug,

    mi evidenzia questa riga..

    Name cartella & nomefile As cartella & Cells(r, 2) & ".jpg"



  • di patel data: 23/08/2016 10:15:27

    prova con un'altra cartella che non sia in temp





  • di Elena (utente non iscritto) data: 23/08/2016 10:22:04

    ho provato con un'altra cartella sul desktop... ma stesso errore....



  • di Elena (utente non iscritto) data: 23/08/2016 13:06:16

    ....non abbandonarmi Patel.....



  • di Albatros54 data: 23/08/2016 14:23:20

    Scusate l'intromissione

    Stando ha quello che hai scritto, ho creato uno scenario seguendo i tuoi dati.
    Icolla il codice postato in un modulo del foglio di excel e lo lanci.
    NATURALMENTE devi settare il percorso del file dove ci sono i nomi dei file che vuoi modificare.
    ciao  
     
    Sub RenameFile()
    
        totalrow = Cells(Rows.Count, "A").End(xlUp).Row
        cartella = "C:UsersUtenteDesktopalessandro	appo"    ' <<< percorso completo da modificare e terminare con 
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objFolder = objFSO.GetFolder(cartella)
        For Each objfile In objFolder.Files
            s = Replace(objfile, "", "")
            cont = ""
            For N = 1 To Len(s)
                If Mid(s, N, 1) <= "9" And Mid(s, N, 1) >= "0" Then
                    cont = cont & Mid(s, N, 1)
                    cont = CDbl(cont)
                End If
            Next
            MsgBox CDbl(cont)
            For r = 1 To totalrow
                numero = Cells(r, 1)
                If cont = numero Then
                    MsgBox objfile
                    FILENUOVO = Replace(objfile, cont, Cells(r, 2))
                    Name objfile As FILENUOVO
                    MsgBox "Fatto"
                End If
            Next
        Next
    
    End Sub






  • di Elena (utente non iscritto) data: 23/08/2016 14:42:53

    intromissione scusata!!

    ho provato... me ne ha cambiato uno....

    perche non mi cambia tutto in massa??



  • di Elena (utente non iscritto) data: 23/08/2016 14:52:08

    ho provato con la cartella completa con 1800 foto e ne ha cambiati solo una ventina...

    non capisco....



  • di Albatros54 data: 23/08/2016 14:56:10

    ma i riferimenti alla colonna A del fili ci sono tutti o manca qualche numero che lui non trova?






  • di Elena (utente non iscritto) data: 23/08/2016 14:57:36

    potrebbe mancare... anzi sicuramente manca...
    l'xls comprende molti piu codici che foto...



  • di Albatros54 data: 23/08/2016 15:17:27

    :)))





  • di Elena (utente non iscritto) data: 23/08/2016 15:24:12

    e come facciamo adesso??




  • di Elena (utente non iscritto) data: 23/08/2016 15:45:40

    ah... e ci sono anche foto che non ci sono nell'xls...



  • di Albatros54 data: 23/08/2016 15:57:28

    Quindi il codice funziona ^__^





  • di Elena (utente non iscritto) data: 23/08/2016 16:06:20

    eh... no.....
    me ne converte solo una piccolissima parte.....





  • di Albatros54 data: 23/08/2016 16:15:18

    Se vogliamo risolvere devi allegare il file non dico reali ma in parte, perche cosi non caviamo un Buco dal Ragno!!!
    ciao





  • di Elena (utente non iscritto) data: 23/08/2016 16:18:00

    posso caricare il file completo xls ma la cartella fotografica è qualche giga....

    comunque grazzie davvero per l'aiuto!!



  • di Elena (utente non iscritto) data: 23/08/2016 16:19:25

    ma non era un ragno dal buco.....



  • di Raffaele_53 data: 23/08/2016 16:28:34

    Ciao a tutti
    Puoi allegare il file che stai usando?
    Dimmi il percorso esatto della cartella dove ci sono le foto



  • di Albatros54 data: 23/08/2016 16:28:36

    Dipende dai punti di vista......





  • di Elena (utente non iscritto) data: 23/08/2016 16:41:15

    ciao!
    il percorso è:

    C:UsersElenaRDesktopProva

    ti allego xls completo?? o ti basta quello allegato con un po di righe??




  • di Raffaele_53 data: 23/08/2016 16:57:18

    Prima copia questo codice nel file (dato che hai solo la colonna A e B scritte).
    Metti il file dove ci sono le foto
    Avvia il codice.
    Spostami il file completto  

    Edit Se non appare l'elenco dei file modifica il codice da Dir(Percorso & "*.Jpg") in Dir(Percorso & "*.*")EDIT
     
    Sub aa()
    Dim Percorso As String, Nome1 As String, Nome2 As String, NomeFile As String, Ur As Long, Rg As Long
    Percorso = ThisWorkbook.Path & ""
    Ur = Range("A" & Rows.Count).End(xlUp).Row
    Rg = 1
    NomeFile = Dir(Percorso & "*.Jpg")
    Do While NomeFile <> ""
        Cells(Rg, 5) = NomeFile
        Rg = Rg + 1
        NomeFile = Dir
    Loop
    MsgBox "fatto"
    End Sub



  • di Elena (utente non iscritto) data: 23/08/2016 17:20:50

    ...mi ha creato nella colonna E i nomi dei file contenuti nella cartella fotografica....



  • di Raffaele_53 data: 23/08/2016 17:28:24

    Sto aspettando il file completto
    Dentro non c'è la lista che Ti ho fatto fare.
    Il file quando inserisci del codice va salvato come >>> nome.XLSM
    Rifai il tutto



  • di Elena (utente non iscritto) data: 23/08/2016 17:36:05

    Fatto...

    Colonna A codice vecchio
    Colonna B codice nuovo

    la macro di Albatros funziona.... ma ha convertito solo una piccola parte....



  • di Elena (utente non iscritto) data: 23/08/2016 17:45:15

    fatto



  • di Raffaele_53 data: 23/08/2016 17:53:18

    Scusami
    Hai allegato un file xlsx dove vedo solo due serie di numeri
    Manca quello che Ti ho chiesto di fare (casomai rilegggi l'ultimo post).

    Dal documento Word ho visto che in colonna B hai dei nomi finiti con estenzione .JPG
    Pertanto mi aspetto in colonna A dei numeri
    In colonna B tutti i nuovi nomi con .JPG finale
    In colonna E il listato che Ti ho fatto fare.
    Puoi allegare anche una foto qualsiasi?



  • di Elena (utente non iscritto) data: 23/08/2016 17:59:23

    ho allegato l'xlsx con la colonna E (nomi file)



  • di patel data: 23/08/2016 18:19:03

    mi sono accorto di un errore nella mia macro che diventa questa.
    Se non rinomina tutti i file togli l'apice da
    ' Application.Wait (Now + TimeValue("0:00:01"))
      
     
    Sub RenameFile()
    TotalRow = Cells(Rows.Count, "A").End(xlUp).Row
    cartella = "F:Download" ' <<< percorso completo da modificare e terminare con 
    For r = 1 To TotalRow
      numero = Cells(r, 1).Text
      nomefile = Dir(cartella & numero & "*")
      If nomefile <> "" Then   Name cartella & nomefile As cartella & Cells(r, 2) & ".jpg"
    ' Application.Wait (Now + TimeValue("0:00:01")) 
    Next
    MsgBox "Fatto"
        
    End Sub






  • di Raffaele_53 data: 23/08/2016 18:37:47

    Mi sà che il problema è molto più serio....

    >>>la macro dovrebbe rinominarmi 45258 collezione pippo.jpg in 10125.jpg
    Prendo altre foto perchè la Foto del Tuo esempio non esiste

    In pratica col E riga12/16 ci sono quattro 45003.
    45003 Collezione Vetro A copia.jpg
    45003 Collezione Vetro B copia.jpg
    45003 Collezione Vetro C copia.jpg
    45003 Collezione Vetro D copia.jpg
    Alla riga17 vorresti che si chiamasse 11017.JPG
    Ma quale delle quattro devo rinominare?

    Altro caso, col E riga204 = 57081-82-83 Teramente copia.jpg
    riga159 = 57081 11159
    riga160 = 57082 11160
    riga161 = 57083 11161
    Vorresti che la foto sopra diventasse tre foto uguali?

    Naturalmente la foto 45000-01 Collezione Tiffany copia.jpg
    Non verrà rinominata perche non esiste in colonna A

    Puoi darci ulteriori informazioni
    EDIT Ho fatto in questo modo EDIT
    Inserisci l'allegato (Copia_Foto) nella cartella delle foto.
    Nella stessa Directory crei una cartella col nome FOTO
    Ps. Il codice non rinomina, le copia cambiando il nome.

    Prova 4/5 volte per capire il tutto in una cartella a parte con qualche foto.
    Appena aperto, premi il tasto "Elenco Foto"
    A questo punto nella colonna B, se desideri inserisci il nuovo nome (senza .JPG fimale)
    Quando hai fatto premi AVVIO.
    NB Quando sarai sicura, "vai nel codice e togli l'apostrofo alla riga verde". Quella riga elimina i file dalla tua cartella (però sarà presente in FOTO).



  • di Elena (utente non iscritto) data: 24/08/2016 10:01:45

    Raffaele!!! l'xlsm Funziona egregiamente!!!!!!

    davvero un grazie di cuore a tutti per il vostro aiuto!!!!!!



  • di Elena (utente non iscritto) data: 25/08/2016 12:44:57

    Ciao.... mi vergogno un po a chiedervi un altro favore.....

    sarebbe possibile creare un xlsm (tipo quello di Raffaele) che inserito in una cartella generale di foto, dato un elenco di codici nella colonna A

    crei una cartella (oppure creo in precedenza io) con solo le foto relative hai codici riportati??
    e se non trova la foto magari dirmi foto non trovata......

    se mi mandate a quel paese vi capisco....



  • di Raffaele_53 data: 25/08/2016 20:09:13

    Non ho capito bene
    Ok per la cartella, ma per i codici cosa intendi?
    Metti alcuni codice nel foglio (ex 45039, numero composto da solo 5 caratteri) e se il VBA trova una foto che inizia col Tuo codice, l'ho sposta nella cartella? (non deve rinominare?)
    Ex 45039-38 Chiaro-Scuro 1 copia.jpg sarà spostato in una cartella diversa?



  • di Elena (utente non iscritto) data: 26/08/2016 09:32:02

    esatto!
    praticamente adeso tutte le foto sono nominate tipo 11125.jpg oppure 10125 A.jpg 10125 B.jpg
    non deve rinominare ....

    l'elenco che userei per creare la cartella con le foto, corrisponde con il nome della foto (a parte quelle doppie con A B C ecc..)
    quindi il VBA prenderebbe i primi 5 caratteri... sarebbe perfetto....

    grazie!!!



  • di Raffaele_53 data: 26/08/2016 13:34:35

    Allegato Rinomina_Sposta_Foto.xlsm
    Leggermente diverso

    Foglio Rinomina, legge le foto presenti (se scritto in colonna B le rinomina)
    Lasciandole nella stessa Directory

    Foglio Copia
    In B1 = nome cartella
    In colonna A inserisci i codici
    Le foto che iniziano con i (5 caratteri) vengono spostate



  • di Elena (utente non iscritto) data: 26/08/2016 14:42:18

    Grazie davvero tantissimissimo!!!!!

    ultimo favore.... sarebbe possibile creare una copia delle foto invece di trasferirle nella cartella "mare"??

    poi giuro che fino a lunedi non mi senti piu... (scherzo) dovrebbe essere tutto....

    ho scoperto da poco cosa si puo fare con VBA... ma come si fa ad impare??????????



  • di Raffaele_53 data: 26/08/2016 20:54:39

    >>>ma come si fa ad impare?
    impare???

    Dai (libri/forum), primo insegnamento, in questo caso:

    FileSystemObj.MoveFile Percorso1 & Nome2, Percorso2 & Nome2
    in
    FileCopy Percorso1 & Nome2, Percorso1 & Percorso2 & Nome2

    La riga è facoltativa in base al risultato >>>Sheets("Copia").Rows(x & ":" & x).Delete



  • di Vecchio Frac data: 27/08/2016 08:54:59

    cit. Elena "ma come si fa ad impa(ra)re?"
    ---> Come in tutte le cose, leggendo la guida incorporata, consultando dei buoni libri, oggi (da parecchi anni in verità) c'è la sterminata possibilità di appoggiarsi a forum e blog specializzati. Soprattutto però con la pratica e il tentativo. VBA non è un linguaggio ostico o inaccessibile, però c'è uno sforzo iniziale da considerare, per acquisire dimestichezza con la terminologia e capire come devi far ragionare un compilatore che di suo è "stupido", cioè non ha iniziativa e non impara dai propri errori. Soprattutto ci vuole pazienza (con se stessi e con il linguaggio scelto).





  • di Elena (utente non iscritto) data: 30/08/2016 15:37:38

    Rieccomi!!!

    Raffaele!!!! non so se volevoi mettermi alla prova,....
    FileCopy Percorso1 & Nome2, Percorso1 & Percorso2 & Nome2 ==> errato
    FileCopy Percorso1 & Nome2, Percorso2 & Nome2 ==> corretto

    adesso funziona facendo una copia!!!!

    @ Vecchio Frac
    la voglia di imparare c'è.... purtroppo è il tempo che manca.....
    prometo che cerchero di applicarmi
    comunque ringrazio ancora per l'aiuto che mi avete dato!!!

    ci risentiamo piu avanti per un nuovo progeto che ho in mente!!

    buona giornata!!!