[VBA] Défis! trouver fichier le plus récent récursivement (avec filtre)

Camaytoc

XLDnaute Nouveau
Bonjour,

J'ai besoin de faire une recherche récursive d'un fichier et le copier dans un autre dossier. Ce que je cherche à faire semble un véritable défis. En effet après avoir silloné le web à ce sujet, je ne trouve rien de concluant.

Je cherche le fichier "index.xml" le plus récent dans "z:\statistics\..." et souhaite le copier dans c:\xsltprocDump. J'aimerais égualement pouvoir filtré la recherche des sous-dossier avec une chaine de texte contenu dans le nom des dossier. Comme je ne code pas vraiment en vba, je perd un temps fou à essayer de faire fonctionner des bouts de code, mais je n'arrive à rien qui fonctionne.

Il semblerait que cela soit un vrai défis sans le fameux Application.FileSerach qui n'est plus présent dans excel 2007. Je n'ai pas le choix d'utiliser cette version d'excel puisque notre entreprise utilise 2007...

Voici un exemple:

Sur Z:\statistics je cherche le fichier index.xml le plus récent dans les sous-dossier contenant le texte xbox. Tous les sous-dossier du dossier statistics porte un nom en date comme par exemple:"Z:\statistics\2011_12_05_14_21_57_xbox". Je veux pouvoir écrire un code VBA en auto_start qui lira dans une cellule le texte (ex.: "xbox", "wii", "ps3") et trouvera le fichier index.xml le plus récent dans le dossier contenant ce texte. Ensuite je dois copier ce fichier dans un autre dossier (c:\xsltprocDump).

Je vous demande votre aide!

Merci d'avance.
 
Dernière édition:

Camaytoc

XLDnaute Nouveau
Re : [VBA] Défis! trouver fichier le plus récent récursivement (avec filtre)

Selon vous, existe-t-il une façon de faire cela sans Application.FileSearch ?
 

julberto

XLDnaute Occasionnel
Re : [VBA] Défis! trouver fichier le plus récent récursivement (avec filtre)

Bonjour,

Sur la base de la macro récursive de F. Sigonneau :
VB:
Sub TousLesFichiers(LeDossier$, Idx As Long, Optional SousFldr = True)
'pour empêcher l'examen des ss/répertoires, affecter False à SousFldr
Dim fso As Object, Dossier As Object
Dim sousRep As Object, Fich As Object

  Set fso = CreateObject("Scripting.FileSystemObject")
  Set Dossier = fso.GetFolder(LeDossier)
  
  '"System Volume Information" est inaccessible ==> on le zappe !!
  If Dossier.Name <> "System Volume Information" Then
  
    'examen du dossier courant
    For Each Fich In Dossier.Files
      Idx = Idx + 1
      Cells(Idx, 1).Value = Fich.ParentFolder
      Cells(Idx, 2).Value = Fich.Name
      Cells(Idx, 3).Value = Fich.Size
      Cells(Idx, 4).Value = Fich.DateCreated
      Cells(Idx, 5).Value = Fich.Type
      Cells(Idx, 6).Value = Fich.Attributes
      Cells(Idx, 7).Value = Fich.DateLastModified
    Next
  
    If SousFldr Then
      'traitement récursif des sous dossiers
      For Each sousRep In Dossier.subfolders
        TousLesFichiers sousRep.Path, Idx
      Next sousRep
    End If
  End If
  
End Sub 'fs
Je t'ai écrit une macro qui donne le nom du fichier le plus récent du dossier "Mes documents". Voir pièce jointe.
La modification pour ton cas ne devrait pas être insurmontable.

J'ai laissé la macro de F.S. telle quelle. Elle peut être édulcorée un tant soit peu, mais je ne voulais pas transgresser le code.

cordialement
 

Fichiers joints

Dernière édition:

Camaytoc

XLDnaute Nouveau
Re : [VBA] Défis! trouver fichier le plus récent récursivement (avec filtre)

Bonjour et merci de vous intéresser à mon cas,

Julberto, je ne vois pas la pièce jointe.
 

Camaytoc

XLDnaute Nouveau
Re : [VBA] Défis! trouver fichier le plus récent récursivement (avec filtre)

Merci Julberto,

Je bidouille, je bidouille...
Bref, merci pour ce point de départ qui m'a l'air beaucoup plus simple que ce que j'avais avant. Je dois maintenant essayer de faire ma recherche de sous-dossier avec filtre. Je suis plus que débutant en vba je me perd avec pas grand chose...
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas