[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:

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
 

Pièces jointes

  • LisMestDossiersRécents.xls
    44.5 KB · Affichages: 212
Dernière édition:

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...
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Excel VBA
Réponses
50
Affichages
2 K

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 868
dernier inscrit
pierreselo33