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
 

sangarmatha

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

Lors du post N°10 qui repondait à ma premiere demande, j'avais recherché et transféré 1 par 1 les 1000 fichiers avant de les traiter avec des formules puis le code que tu avais fais (et qui va trés bien).
Ceci étant fastidieu, je pensais pouvoir adapter un code existant pour faire aussi cette première étape en auto, sur la base de la liste dont je dispose type:
*400000259876* (en utilisant le nom partiel) .... Mais * n'est pas accepté en VBA
C'est hélas le seul morceau du nom dont je dispose ainsi que la structure des noms des fichiers qui est toujours la même:
O_400000259876_0010.pdf et P_BCCM08_ELE_0012364_400000259876_0010.pdf
Aucun souci pour l'age ou le DOS car ça au moins je maitrisais mieux que VBA.
Merci encore de votre aide
 

Pierrot93

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

Bonjour à tous,

Ceci étant fastidieu, je pensais pouvoir adapter un code existant pour faire aussi cette première étape en auto, sur la base de la liste dont je dispose type:
*400000259876* (en utilisant le nom partiel) .... Mais * n'est pas accepté en VBA

ah bon... teste peut être ceci alors....

Code:
Option Explicit
Sub test()
Dim t As String
t = "P_BCCM08_ELE_0012364_400000259876_0010.pdf"
If t Like "*400000259876*" Then MsgBox "Trouvé..."
End Sub

A noter également que ce caractère peut être utilisé avec la fonction "Dir"... Voir l'exemple fourni dans l'aide vba

bonne journée
@+
 

Jack2

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

Bonjour le fil,

Quand je parlais d’occurrences, ça correspond à ce que tu appelles "nom partiel". S'il est fixe, Instr suffit, sinon la solution de Pierrot permet l'ajout de * (on l'appelait joker je crois). On peut imaginer une boucle du type qui scanne le répertoire "c:\Tmp" :
Code:
Dim Fichier As Object
Repertoire = "c:\Tmp"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set DossierSource = FSO.GetFolder(Repertoire)
For Each Fichier In DossierSource.Files
      NomFich = Fichier.Name
      If InStr(NomFich , "400000259876") then Traitement_Copie_Fichier 
      
      'Utilisation de like
      If NomFich Like "*400000259876*" Then Traitement_Copie_Fichier

Next Fichier
La procédure Traitement_Copie_Fichier correspondrait à ce que l'on a déjà vu. Du type FSO.CopyFile Rep_Init & NomFich, Rep_Fin & NomFich, True.

Par contre je n'ai jamais utilisé RegExp. C'est à découvrir.

A+ Jack2
 

sangarmatha

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

Bonjour,
Pour info j'ai trouvé le fichier ci-joint que je vais adapter à mon problème. En effectuant une recherche des fichiers par leurs noms partiels dont je dispose, puis à partir des noms complets retournés une copie vers mon répertoire de travail.
A+
 

Pièces jointes

  • Recherche tests.xls
    45.5 KB · Affichages: 43

Jack2

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

Bonjour sangarmatha,

Ci-après ta procédure récursive peu modifiée pour te montrer que l'on peut prendre le chemin complet et le répertoire ou le sous-répertoire seul, ce qui peut servir plus tard.
Code:
Sub ListeArborescence(Dossier As String)
Dim fs As Object, sousdoss As Object, Racine As Object
Dim CheminComplet As String, SousRep As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set Racine = fs.GetFolder(Dossier)
For Each sousdoss In Racine.SubFolders
    'pour récupérer le chemin complet
    CheminComplet = sousdoss.Path
    'pour récupérer uniquement le nom du dossier
    SousRep = sousdoss.Name
    ReDim Preserve ListeDoss(1 To UBound(ListeDoss) + 1)
    ListeDoss(UBound(ListeDoss)) = CheminComplet
    ListeArborescence CheminComplet
Next sousdoss
End Sub

Sub lanceliste(Dossier As String)
    ReDim ListeDoss(1 To 1)
    ListeDoss(1) = Dossier
    ListeArborescence Dossier
End Sub
Je ne suis pas un spécialiste, mais il me semble plus pratique de lister dans une feuille ou dans une colonne, avec ou sans arborescence si tu ne mets que le chemin. Ensuite tu n'as plus qu'à scanner chacun des répertoires et sous répertoires pour trouver les fichiers qui t'intéressent.

La méthode de Pierrot93 fait le boulot, tu récupères les fichiers que tu veux et l'endroit (ou chemin) où ils se trouvent. Ca me semble plus simple que tes deux nouvelles procédures '"Chercher - ChercherTout." Ta recherche tu la fais dans chaque boucle qui scanne un (sous) répertoire. Un truc du genre :
Code:
Public Sub ChercherFichiers(Dossier As String)
Dim Fs As Object
Dim Racine As Object
Dim Fichier As Object
Dim NomFich As String
Dim i As Integer
Set Fs = CreateObject("Scripting.FileSystemObject")
Set Racine = FSO.GetFolder(Dossier)
i = 1
For Each Fichier In Racine.Files
    NomFich = Fichier.Name
    If NomFich Like "*P_BCCM08_ELE_0012364_400000259876_0010.pdf*" Or NomFich _
        Like "*400000259876*" Then
        'Et hop tu les ranges pour le réutiliser : adapter les colonnes
        Range("B" & i) = NomFich
        Range("C" & i) = Dossier
        i = i + 1
    End If
Next Fichier
Set DossierSource = Nothing
Set FSO = Nothing
End Sub
Bon courage,
A+ Jack2

PS Si tu es à l'aise avec le Dos tu prends la Madeleine de Staple1600, puis import du fichier texte dans un classeur, ce qui évite effectivement des lignes de code, juste un peu de nettoyage
 

sangarmatha

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

désolé je n'ai pas réussi a exploiter ces éléments correctement, je n'arrive pas à coller ce script dans mon fichier, je n'ai plus la macro visible ensuite????
Pourtant ça me parait bien avec NomFich like "*fichier*" mais je dois intégrer le fait que j'ai une liste de noms de fichiers à parcourir.
A+
 

Jack2

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

Bonsoir sangarmatha, Bonsoir le fil,

C'est difficile de procéder par petits bouts. Essayes d'envoyer ce que je t'ai demandé au post n°10 (le 30/12). Avec une vue "plus large" de ce que tu souhaites, quelqu'un, ou moi, pourra peut-être t'aider plus efficacement. J'ai commencé à me mettre au VBA en avril dernier et, comme toi, j'avais tendance à vouloir arriver à la solution rapidement, ce qui est difficile. Si on peut faire quelque chose qui est proche de ce que tu souhaites, il faut d'abord essayer de comprendre le code proposé, voir ce qu'il fait. Une fois que c'est assimilé, on passe à l'étape suivante et non pas chercher des bouts de code que tu ne comprends pas et qui ne font que t'embrouiller. En résumé, il faut du temps et comprendre au fur et à mesure. J'en suis également là avec quelques mois d'avance.

Bref cf. ci-dessus en gras.

A+ Jack2

EDIT J'ai peut-être un "baseline" à défaut de citation : Aide-toi, XLD t'aidera
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 391
Messages
2 087 943
Membres
103 679
dernier inscrit
yprivey3