copier un fichier d'un repertoire à un autre a partir de liste excel

sangarmatha

XLDnaute Junior
Bonjour,
J'ai trituré pas mal d'info cet après-midi et je cale sur ce point: comment copier des fichiers d'un dossier vers d'autres en tenant compte des infos de 2 colonnes excel qui contiennent les syntaxes exactes:
- colonne K ancien chemin et nom = c:\temp\2013\toto.pdf..... 1200 fichiers
- colonne M nouveau chemin et nom = c:\temp\2013\xxx\yyy\totoderv.pdf
En fait chaque fichier de ma liste va vers 1 répertoire différent d’où cette table de correspondance
je n'arrive tout simplement pas à écrire filecopy ou autre commande..... correctement en tenant compte des 2 infos précédentes.
Merci d'avance
 

Jack2

XLDnaute Occasionnel
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Bonjour sangarmatha,

En l'absence de fichier je te propose ce code :
Code:
Sub Copier_Fichiers_Colonne_D()
Dim FSO As Object
Dim NomFich As String
Dim St As String
Dim Rep_Init As String, Rep_Fin As String
Dim Derlig As Integer
Dim i As Long

Set FSO = CreateObject("Scripting.FileSystemObject")
Rep_Fin = "D:\Destination\" ' adapater
Sheets("Données").Select
Derlig = Range("D" & Rows.Count).End(xlUp).Row

For i = 2 To Derlig
    If Range("D" & i) <> "" Then
        St = CStr(Range("D" & i))
        Rep_Init = Replace(St, CStr(Range("E" & i)) & Right(St, 4), "")
        NomFich = Trim(Replace(St, Rep_Init, ""))
        FSO.CopyFile Rep_Init & NomFich, Rep_Fin & NomFich, True
    End If
Next i
Set FSO = Nothing
End Sub
Tu peux le charger via un fichier (avec quelques explications au cours du fil)
https://www.excel-downloads.com/threads/enregistrer-un-pdf-doc-jpg-a-partir-dexcel.214686/
Si tu a besoin d'autres précisions tu peux poster ton fichier.

A+ Jack2
 

sangarmatha

XLDnaute Junior
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Merci de cette réponse rapide, je ne peux la tester maintenant car mes éléments sont au bureau cependant ne comprenant pas vraiment le code, j'ai un doute quand au pourquoi d'un dossier d:\destination. Mes répertoires d'arrivées étant aussi variables que les noms d'ou les correspondances colonnes K et M.
Je joins un exemple de ce a quoi ressemble mon fichier
 

Pièces jointes

  • Classeur1.xlsx
    9.4 KB · Affichages: 67
  • Classeur1.xlsx
    9.4 KB · Affichages: 75
  • Classeur1.xlsx
    9.4 KB · Affichages: 82

Jack2

XLDnaute Occasionnel
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Re Bonjour sangarmatha,

Dans le fil dont est issu le code, la personne avait un répertoire de destination fixe. Mais on peut le faire varier. Je vais essayer de faire ça dans la matinée, sinon après Noël.

A+ Jack2

EDIT A tester, je vérifierai demain au bureau

Re EDIT C'est vérifié
Bonnes fêtes
 

Pièces jointes

  • sangarmatha.xls
    44.5 KB · Affichages: 84
Dernière édition:

sangarmatha

XLDnaute Junior
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Bonjour,
Un grand merci cela fonctionne trés bien, je ne comprends pas tout en particulier la premiere partie "Path-fichier......Ubound" mais je vais rechercher.
J'aurai une autre question quand même, j'ai par une macro précédente créé l'arborescence des nouveaux répertoires de destination colonne M de mon fichier mais y aurait il une possibilité pour que ta macro les génère lors de la copie?
Merci encore, Bonnes Fêtes
 

Jack2

XLDnaute Occasionnel
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Bonjour sangarmatha,

Ci-après le code :
Code:
Function RepertExiste(NomDossier As String) As Boolean
    RepertExiste = Dir(NomDossier, vbSystem + vbDirectory + vbHidden) <> ""
End Function

Function Path_Fich(Fich As String, Repert As Boolean)
Dim i As Integer
Dim Ts() As String, St As String
Ts = Split(Fich, "\")
'on extrait le répertoire
For j = 0 To UBound(Ts) - 1
    St = St & Ts(j) & "\"
    If Repert And Not RepertExiste(St) Then MkDir St
Next j
Path_Fich = St
'puis le nom du fichier
Fich = Ts(UBound(Ts))
End Function


Sub Copier_Fichiers()
Dim FSO As Object
Dim FichDep As String, FichArriv As String
Dim St As String, Ts() As String
Dim Rep_Dep As String, Rep_Arriv As String
Dim Derlig As Integer
Dim i As Long

Set FSO = CreateObject("Scripting.FileSystemObject")
Sheets("Feuil1").Select
'donne la dernière ligne non vide en colonnes K
Derlig = Range("K" & Rows.Count).End(xlUp).Row

 For i = 2 To Derlig
    Rep_Dep = ""
    Rep_Arriv = ""
    If Range("K" & i) <> "" Then
        'on prend le nom du fichier départ et le chemin en colonne K si la cellule n'est pas vide
        FichDep = CStr(Range("K" & i))
        Rep_Dep = Path_Fich(FichDep, False)
        'on prend le nom du fichier et le chemin d'arrivée en colonne M
        FichArriv = CStr(Range("M" & i))
        Rep_Arriv = Path_Fich(FichArriv, True)
        FSO.CopyFile Rep_Dep & FichDep, Rep_Arriv & FichArriv, True
    End If
Next i
Set FSO = Nothing
End Sub
et un explicatif
A+ Jac2
 

Pièces jointes

  • Explicatif.doc
    36 KB · Affichages: 75
  • Explicatif.doc
    36 KB · Affichages: 91
  • Explicatif.doc
    36 KB · Affichages: 86

sangarmatha

XLDnaute Junior
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Merci pour cette réactivité, je mettrai en application dès demain mais surtout pour avoir pris la peine d'écrire des explications détaillées ce que j'apprécie grandement et qui va me permettre de mieux comprendre....
Encore un grand merci pour tout ça,
Bonne soirée je te tiendrai au courant
 

sangarmatha

XLDnaute Junior
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Merci pour toute ces infos et le résultat attendu, je me suis limité à l'utilisation de la première partie car j'étais à la bourre mais j'e testerai la solution complète dès que possible. Bonnes Fêtes
 

sangarmatha

XLDnaute Junior
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Dans le même cadre j'essaie d'adapter le script ci-dessous mais sans succés.
En colonne D je n'ai que le nom partiel des fichiers à copier (213515), le repertoire origine est c:\temp, destination c:\tests mais souhaite avoir le nom complet (tel que dans le rep origine après le copie (ex: abcde213515uvw.pdf).
Filecopy n'accepte pas *?

Sub Copier_Fichiers_Colonne_D()
Dim FSO As Object
Dim NomFich As String
Dim St As String
Dim Rep_Init As String, Rep_Fin As String
Dim Derlig As Integer
Dim i As Long

Set FSO = CreateObject("Scripting.FileSystemObject")
Rep_Fin = "C:\tests\" ' destination
Rep_Init = "C:\temp\" 'origine
Sheets("Données").Select
Derlig = Range("D" & Rows.Count).End(xlUp).Row

For i = 2 To Derlig
If Range("D" & i) <> "" Then
St = CStr(Range("D" & i))
NomFich = Trim(Replace(St, Rep_Init, ""))
FSO.CopyFile Rep_Init & NomFich, Rep_Fin & NomFich, True
End If
Next i
Set FSO = Nothing
End Sub
 

Jack2

XLDnaute Occasionnel
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Bonjour sangarmatha,

Si tes noms de fichier du répertoire d'origine étaient valides, la boucle s’écrirait :
Code:
For i = 2 To Derlig
If Range("D" & i) <> "" Then
NomFich = CStr(Range("D" & i))
FSO.CopyFile Rep_Init & NomFich, Rep_Fin & NomFich, True
End If
Next i
La ligne contenant NomFich = Trim(Replace(St, Rep_Init, "")) n'était là que pour résoudre un cas particulier. Si tu souhaites avoir le nom complet, il faut connaître le type de données que tu as en colonne D et trouver comment arriver au fichier complet. A priori, la nouvelle instruction se placera au même endroit que la ligne mise en gras. Pour cela, il faut que tu me transmettes les données de la colonne D et ce à quoi tu veux arriver pour voir si c'est possible.

Il existe un logiciel qui ne nécessite pas d’installation qui permet de lister le contenu des répertoires puis de les exporter via le presse-papiers, Word ou Excel. Cela me permettrait de voir ce que contient le répertoire c:\tmp, et comparer avec le contenu de la colonne D. Liens pour le logiciel Directory List and Print
Télécharger Directory List and Print - Faites l'inventaire de vos données sur vos divers périphériques de stock : gratuit
Tlcharger Directory List and Print - 01net.com - Telecharger.com

A+ Jack2
 

Staple1600

XLDnaute Barbatruc
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Bonjour à tous

Il existe un logiciel qui ne nécessite pas d’installation qui permet de lister le contenu des répertoires
Il en existe un autre déjà présent dans Windows ;) : command.com ;)

et avec un simple batch le tour est joué ;)

Code:
@dir /S C:\*.xl? >listxl.txt
ou même
Code:
@dir /S C:\*.xl? >listxl.xls
@start listxl.xls

PS: C'était ma séance Nostalgie: joies et bonheur de la ligne de commande ;)
 

Jack2

XLDnaute Occasionnel
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Nostalgie quand tu nous tiens !!!!

J'avais complément oublié cette possibilité, l'utilisation des commandes DOS se fait rare. Je pense que la grande majorité des moins de 30-35 ans n'utilise pas le DOS. Win 3.11 a fêté ses 20 ans cette année...

A+ Jack2
 

sangarmatha

XLDnaute Junior
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Bonsoir
Le DOS? pourquoi pas car j'ai commencé par là...Version 1.0, oui au delà des 30-35.....
Pour ma demande, il s'agit d'extraire d'un répertoire contenant 80000 fichiers, environ 1000 d’entre eux pour lesquels j'ai une partie du nom dans une liste excel.
Le nom que je possède se compose de 12 chiffres, exemple 400000259876 et correspondent a 2 formats de fichiers:
O_400000259876_0010.pdf et P_BCCM08_ELE_0012364_400000259876_0010.pdf
Ils peuvent être nombreux car s'incrémentant par le _0020, _0030....
Je souhaite donc copier tous ceux qui correspondent à ma liste sans changer leurs noms de c:\temp vers c:\tests
Merci d'avance
 

Jack2

XLDnaute Occasionnel
Re : copier un fichier d'un repertoire à un autre a partir de liste excel

Bonsoir sangarmatha et Staple1600,

Ma remarque ne préjugeait pas de ton âge sangarmatha, elle était générale (j'ai quelque souvenir du DOS 3.?). Pour ce qui concerne ton problème :

- soit tu as la liste complète de tes fichiers dans le répertoire c:\tmp et l'on revient au post de 14h48 (n°10)
- soit tu dois les chercher selon un critère. Je viens de faire pour le boulot un code qui cherche les fichiers selon 3 types d’occurrences (toto, titi, tata : Instr(Chaîne,"toto") Vrai ou Faux) dans le non du fichier, puis qui les liste. Ca ne devrait pas être trop difficile à adapter si tu donnes les critères.

A+ Jack2
 

Staple1600

XLDnaute Barbatruc
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 188
dernier inscrit
evebar