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

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

excalibur

XLDnaute Impliqué
bonjour Morkrock le forum une approche de solution a ton pb a adapter salutations [file name=boucle_20051003160424.zip size=17507]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/boucle_20051003160424.zip[/file]
 

Pièces jointes

  • boucle_20051003160424.zip
    17.1 KB · Affichages: 221

myDearFriend!

XLDnaute Barbatruc
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

  • mDFScanFichiers.zip
    18.6 KB · Affichages: 287
  • mDFScanFichiers.zip
    18.6 KB · Affichages: 290
  • mDFScanFichiers.zip
    18.6 KB · Affichages: 288
M

Morkrock

Guest
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 !
 
M

Marc

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

myDearFriend!

XLDnaute Barbatruc
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,
 

Discussions similaires

Statistiques des forums

Discussions
312 192
Messages
2 086 056
Membres
103 110
dernier inscrit
Privé