Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

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 IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi commerciale » 24/05/18 16:38

Buongiorno a Tutti,
Chiedo un aiuto per creare questo excel/vba che mi serve per far ordine nelle foto:

Partendo da un elenco di excel (nella immagine da A3 a A14) che corrisponde al nome di una foto presente nella cartella indicata nella cella "B2", vorrei che copiasse l'immagine e ne inserisca una copia nella cartella indicata nelle colonne B, C, D, E. Se la colonna è vuota non deve copiarla.

https://imgur.com/a/svdw2xC#lvYNX8n
<img src="https://imgur.com/a/svdw2xC#lvYNX8n"

Grazie anticipato a chi riuscirà ad aiutarmi
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Sponsor
 

Re: COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi Anthony47 » 24/05/18 22:39

Senza nessuna possibilita' di prova:
Codice: Seleziona tutto
Sub CopyPics()
Dim sDir As String, PS As String, AFile As String, fSo As Object
Dim I As Long, J As Long
'
PS = Application.PathSeparator
sDir = Range("B1").Value & PS
'
Set fSo = CreateObject("Scripting.FileSystemObject")
For I = 3 To Cells(Rows.Count, 1).End(xlUp).Row
    AFile = Cells(I, 1) & ".jpg"
    For J = 2 To 5
        If Cells(I, J) <> "" Then
            fSo.CopyFile sDir & AFile, Cells(J, J) & PS & AFile
        End If
    Next J
Next I
Set fSo = Nothing
MsgBox ("Completato...")
End Sub


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

Re: COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi commerciale » 25/05/18 08:26

Grazie!
ho provato e mi da errore qui:

fSo.CopyFile sDir & AFile, Cells(J, J) & PS & AFile

Dice "Impossibile trovare il percorso"

Ho capito l'errore ma non come sistemarlo: In pratica inizia leggere l'inizio della destinazione da B2 anzichè B3...

Cercando di ovviare a questo problema mi ha dato anche un errore di "autorizzazione negata", credo sia legato ad un problema di colonna 5...
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi Anthony47 » 25/05/18 15:15

Grrrr...
Invece che Cells(J, J) & PS & Afile deve essere
Codice: Seleziona tutto
Cells(I, J) & PS & Afile


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

Re: COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi commerciale » 28/05/18 10:12

Grazie Anthony47,
Dopo la modifica funziona perfettamente!

Vorrei tentare di alzare l'asticella.
Ho riscontrato 2 possibili errori:
1 - Errore non trova il file: Se la foto non esiste (per errore di digitazione o altro) vorrei che anziché andare in debug continuasse il copia con la successiva riga

If AFile = "" Then
... e qui mi perdo...

Il top sarebbe che nel MsgBox finale mi scrivesse l'elenco delle foto non copiate perché non trovate.

2 - Errore non trova la cartella: Se la cartella di destinazione (per errore di digitazione o altro) non viene trovata va in debug. L'ideale sarebbe un MsgBox che dice quale cartella non esiste.

Grazie anticipato
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi Anthony47 » 28/05/18 23:05

Preferisco suggerirti di controllare che i dati inseriti in colonna A:E siano corretti; cosa che puoi fare con questa macro di Worksheet_Change:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myC As Range, myP As String
Dim fSo As FileSystemObject, myOk As Boolean
'
myP = Range("B1").Value: If Right(myP, 1) <> Application.PathSeparator Then _
    myP = myP & Application.PathSeparator

If fSo Is Nothing Then Set fSo = CreateObject("Scripting.FileSystemObject")
For Each myC In Target
    If myC.Column = 1 And myC.Value <> "" Then
        lookf = myC.Value & ".jpg"
        If fSo.FileExists(myP & myC.Value & ".jpg") Then myOk = True Else myOk = False
    ElseIf myC.Column >= 2 And myC.Column <= 5 And myC.Value <> "" Then
        If fSo.FolderExists(myP & myC.Value) Then myOk = True Else myOk = False
    Else
        If myC.Column <= 5 Then myC.Interior.ColorIndex = xlNone
        GoTo exiA
    End If
    If myOk Then
        myC.Interior.ColorIndex = xlNone
    Else
        myC.Interior.Color = RGB(255, 0, 0)
    End If
Next myC
exiA:
Set fSo = Nothing
End Sub


Va messa nel modulo vba del foglio su cui lavori; per questo:
-tasto dx sul tab col nome del Foglio
-scegli Visualizza Codice
-Copia i codice e incollalo sulla finestra vba che si e' così aperta

Poi torna su Excel e prova scrivere dei nomi di foto (col A) oppure delle directory (col B:E); se il dato non e' corretto la cella si colora di rosso e puoi correggere dove serve.
Dopo le correzioni, seleziona un dato in rosso, premi F2 e poi Enter per "sbiancare" il risultato.

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

Re: COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi commerciale » 31/05/18 08:23

Grazie Anthony47,
Purtroppo apre una finestra con questo errore:
Errore di compilazione:
Tipo definito dall'utente non definito

Si apre evidenziata in giallo la prima riga
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi Anthony47 » 31/05/18 14:59

Va messa nel modulo vba del foglio su cui lavori; per questo:
-tasto dx sul tab col nome del Foglio
-scegli Visualizza Codice
-Copia i codice e incollalo sulla finestra vba che si e' così aperta
Non hai seguito le istruzioni: o l'hai messo nel modulo sbagliato, oppure (piu' probabile) invece di fare Copia /Incolla del codice lo hai trascritto ma male.
Avatar utente
Anthony47
Moderatore
 
Post: 17656
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi commerciale » 05/06/18 17:05

Scusa Anthony47,
Credo di aver seguito le istruzioni ma non funziona comunque.
Il nome del foglio deve essere particolare o va bene qualunque nome?
E' giusto che ho dovuto salvare l'excel in formato .xlsm?

Grazie anticipato
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi Anthony47 » 06/06/18 01:06

Per evitare equivoci allega il file di cui parli, con l'esatta struttura e qualche dato esemplificativo, oltre che la macro inserita.

Per le istruzioni su come allegare un file:
viewtopic.php?f=26&t=103893&p=605487#p605487

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

Re: COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi commerciale » 06/06/18 11:34

Ciao Anthony47.
Allego link Wetransfer

Scarica link
https://we.tl/xGZGsdKySA

Rimango a disposizione per altri dati necessari.

Grazie ancora
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi Anthony47 » 06/06/18 18:17

Purtroppo apre una finestra con questo errore:
Errore di compilazione:
Tipo definito dall'utente non definito

Si apre evidenziata in giallo la prima riga

La riga che va in errore e' la numero tre; la variabile fSo va dichiarata as object.

C'era anche un secondo errore che segnalava come inesistenti le directory.
La macro rivista:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myC As Range, myP As String
Dim fSo As Object, myOk As Boolean
'
myP = Range("B1").Value: If Right(myP, 1) <> Application.PathSeparator Then _
    myP = myP & Application.PathSeparator

If fSo Is Nothing Then Set fSo = CreateObject("Scripting.FileSystemObject")
For Each myC In Target
    If myC.Column = 1 And myC.Value <> "" Then
        lookf = myC.Value & ".jpg"
        If fSo.FileExists(myP & myC.Value & ".jpg") Then myOk = True Else myOk = False
    ElseIf myC.Column >= 2 And myC.Column <= 5 And myC.Value <> "" Then
        If fSo.FolderExists(myC.Value) Then myOk = True Else myOk = False
    Else
        If myC.Column <= 5 Then myC.Interior.ColorIndex = xlNone
        GoTo exiA
    End If
    If myOk Then
        myC.Interior.ColorIndex = xlNone
    Else
        myC.Interior.Color = RGB(255, 0, 0)
    End If
Next myC
exiA:
Set fSo = Nothing
End Sub

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

Re: COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL

Postdi commerciale » 20/06/18 08:37

Sono diverse settimane che uso le macro e 0 errori! :) :)
Grazie infinite Anthony47 !!
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14


Torna a Applicazioni Office Windows


Topic correlati a "COPIARE IMMAGINI DA UNA CARTELLA AD UN'ALTRA CON EXCEL":


Chi c’è in linea

Visitano il forum: Nessuno e 42 ospiti