Help excel vba

Bonjour,

Dans un fichier excel, j'ai une liste de noms "partiel" de fichiers sous forme "4000005240123" le reste est variable, j'aimerai récupérer le nom complet de tous les fichiers contenant les noms partiels et présent dans un répertoire c:\test. Ensuite sur la base du nom complet faire une copie de tous les fichiers trouvés dans un autre répertoire.

nom partiel = 4000005240123
recherche nom complet dans c:\temp = jhchhb 4000005240123 echbejbh.pdf
Copy nom complet vers c:\new

Si qq peut m'aider un peu car je n'arrive pas à adapter ce que j'ai pu trouver faute de compétences. Soit cela recherche 1 seul de mes noms soit j'extraie la totalité du répertoire.

J'ai 800 noms partiels à extraire, avec 2 ou 3 occurrences, mais dans 80000 fichiers....
Merci d'avance

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Peux-tu être plus pécis ?

    Dans un fichier excel, j'ai une liste de noms "partiel" de fichiers ...

    Dans quel onglet, sous quel forme ? dans un tableau, une colonne, une ligne ?

    Peux tu mettre un exemple de ton fichier, en enlevant les données confidentielles le cas échéant, sur cjoint.com et mettre ici le lien pour récupérer ton fichier.

    Merci

    ;0)
    1. Merci de ta rapidité, il y a de ça et bien mieux que ce que j'ai pu obtenir mais....:
      - dans un contexte normal de départ, seule la colonne A contient des données (puisque je n'ai pas les noms complets). Dans ce cas j'ai "traitement terminé" mais aucun noms de "récupéré" ni aucun fichier copié.
      - Si je laisse les noms colonnes 2 et 3 mais cela être vide, cela copie bien mais s'arrête si le fichier est absent
      Merci de ton aide
      1. Peux-tu me confirmer le répertoire où il faut rechercher et le répertoire où il faut copier ?

        Merci

        Edit: J'ai fait une boullette dans l'instruction InStr()

        Il faut remplacer :
        If InStr(1, str, fichier.Name) <> 0 Then
                    derlig = ws.Range("B" & Rows.Count).End(xlUp).Row + 1
                    ws.Range("B" & derlig).Value = ExtractFileName(fichier.Path)
                End If


        par

        If InStr(1, fichier.Name, str) <> 0 Then
                    derlig = ws.Range("B" & Rows.Count).End(xlUp).Row + 1
                    ws.Range("B" & derlig).Value = ExtractFileName(fichier.Path)
                End If


        Je suis désolé.

        «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
        Nicolas Boileau
        1. J'ai pris pour mes brouillons:
          C:\temp = origine
          C:\tests = destination
          Merci
          1. As-tu fait la modif comme indiquée ci dessus ?
        2. Bravo!!! C'est exactement ça, en bien plus rapide et juste que moi. Je testerai demain sur un grand nombre de fichier et te tiendrai au courant.
          Un grand merci