Help me : récupérer des noms de fichiers...

  • Initiateur de la discussion Initiateur de la discussion Morkrock
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

Morkrock

Guest
Je cherche à récupérer des noms de fichiers '*.xls' dans plusieurs sous-répertoires d'un répertoire, enregistrer ces noms dans une liste et utiliser cette liste dans une listbox afin de sélectionner les fichiers à traiter par une macro déjà existante...
comment faire avec mes peu de connaissances...
 
Bonsoir Morkrock, excalibur,

Ci-joint une deuxième solution...

J'ai utilisé le code suivant :
Sub ScanClasseurs()
'ATTENTION : nécessite une référence à la librairie
'Microsoft Visual Basic For Applications Extensibility 5.3
Dim Dossier As Object, Fichier As Object
Dim
Chemin As String, CeFichier As String
Dim
TabDossiers As Variant
Dim
L As Long, D As Long
      Application.ScreenUpdating = False
      ThisWorkbook.Sheets('Test').Range('A2:B65536').ClearContents
      CeFichier = ThisWorkbook.Name
      L = 1
      'Création du tableau des sous-dossiers existants
      TabDossiers = lstDossiers(ThisWorkbook.Path, True)
      For D = 1 To UBound(TabDossiers)
            'Chemin du dossier (ou sous-dossier) à analyser
            Chemin = TabDossiers(D) & '\'
            'Analyse du dossier (ou sous-dossier)
            Set Dossier = CreateObject('Scripting.FileSystemObject').GetFolder(Chemin)
            For Each Fichier In Dossier.Files
                  If Fichier.Name <> CeFichier Then
                        'Liste les fichiers Excel
                        If Right(Fichier.Name, 3) = 'xls' Then
                              L = L + 1
                              'MAJ feuille Excel
                              With ThisWorkbook.Sheets('Test')
                                    .Cells(L, 1) = Chemin
                                    .Cells(L, 2) = Fichier.Name
                              End With
                              'MAJ liste Usf
                              usfScan.lstClasseurs.AddItem Chemin & Fichier.Name
                        End If
                  End If
            Next
      Next D
      Set Dossier = Nothing
      'Rétablit l'alerte de lien éventuelle dans les options Excel
      Application.ScreenUpdating = True
      usfScan.lblCompteur = L - 1 & ' classeurs trouvés !'
      usfScan.Show
End Sub

Private Function lstDossiers(Chemin As String, Optional Debut As Boolean) As Variant
Dim
Dossier As Object, SD As Object, D As Object
Static
TabTemp() As String
      If Debut Then
            ReDim TabTemp(1 To 1)
            TabTemp(1) = Chemin
      End If
      Set Dossier = CreateObject('Scripting.FileSystemObject').GetFolder(Chemin)
      'examen du dossier courant
      For Each D In Dossier.subfolders
            ReDim Preserve TabTemp(1 To UBound(TabTemp) + 1)
            TabTemp(UBound(TabTemp)) = D.Path
      Next
      'Traitement récursif des sous-dossiers (d'après un code de F.Sigonneau)
      For Each SD In Dossier.subfolders
        lstDossiers SD.Path
      Next SD
      lstDossiers = TabTemp()
      Set Dossier = Nothing
End Function
Cordialement, [file name=mDFScanFichiers.zip size=19024]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/mDFScanFichiers.zip[/file]
 

Pièces jointes

Super !
C'est un début d'excellente réponse à mon problème !
Cette 2ième solution est très bien...
Maintenant je m'attèle à voir comment l'adapter et je reviens poser les bonnes questions pour continuer...
encore merci !
 
Bonjours MyDearFriend

Ta macro est superbe, mais elle a, pour moi, un petit inconvénient, je voudrais lister l'ensemble des fichiers xls d'un répertoire qui n'est ouvert qu'en lecture seule.
Je ne peux donc pas l'utiliser puisqu'il faut, au préalable, placer le fichier excel sur la racine.
Que faut-il changer pour lui indiquer la racine sans qu'il soit obligé de s'y trouver.

Merci d'avance.
 
Bonsoir Marc,

Visiblement, tu connais déjà le chemin du répertoire à analyser. Dans ce cas, il convient simplement d'adapter la ligne de code :
      TabDossiers = lstDossiers(ThisWorkbook.Path, True)
En précisant le chemin souhaité, comme suit :
      TabDossiers = lstDossiers('C:\\\\\\\\Mes Documents', True)        'à adapter
Cordialement,
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
37
Affichages
684
Réponses
9
Affichages
319
Réponses
4
Affichages
115
Réponses
4
Affichages
298
Réponses
40
Affichages
762
Retour