Lister contenu dossier dans excel (VBA)

Neliville51 Messages postés 99 Statut Membre -  
Neliville51 Messages postés 99 Statut Membre -
Bonjour tout le monde,

Voilà je suis débutant en VBA excel. Je voudrais savoir s'il existe un code qui permet de me lister le nom des fichiers contenu dans un dossier spécifique de mon disque dur selon des critères définis dans une feuille excel? Par exemple tous les fichiers ayant pour première lettre P ou I ou O etc...

Merci pour ceux ou celles qui savent et qui pourront m'éclairer.0

A bientôt



--
Il ne suffit pas d'engranger les récoltes du savoir, du savoir-faire, ni de vendanger les fruits du savoir-être et du savoir-devenir, encore faut il accepter de les offrir pour s'agrandir ensemble.
[Jacques Salomé]

1 réponse

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Je n'ai pas compris si la liste des fichiers était sur une feuille Excel ou s'il fallait copier les noms des fichier dans une feuille Excel. Ici c'est la deuxième option que j'ai pris:

    Nécessite d'activer la référence Microsoft Scripting Runtime
    Menu > Outils > Références ... > cocher Microsoft Scripting Runtime

    Sub ListeFichier() 
    Dim oFso As FileSystemObject 
    Dim oFolder As folder 
    
        Set oFso = New FileSystemObject 
        Set oFolder = fso.GetFolder("D:\Temp")  'Indiquer ici le chemin du repétoire à scanner 
        scan oFolder 
    
    End Sub 
    
    Public Sub scan(ByVal dossier As folder) 
    Dim oFile As file 
    Dim oCollec As Collection 
    Dim i As Long 
    Dim lig As Long 
    Dim nomFichier As String 
    
        Set oCollec = New Collection 
        lig = 2 
    
        'On parcours le répertoire pour récupérer tous les fichiers 
        For Each oFile In dossier.Files 
            oCollec.Add oFile 
        Next 
         
        'Il est également possible de parcourir les sous dossiers 
        'Dim oSubFolder As Folder 
        ' For Each oSubFolder In dossier.SubFolders 
        '    scan oSubFolder 
        ' Next 
         
        For i = 1 To oCollec.Count 
            nomFichier = ReturnFileName(oCollec(i)) 
            If UCase(Mid(nomFichier, 1, 1)) = "A" Or UCase(Mid(nomFichier, 1, 1)) = "L" Or UCase(Mid(nomFichier, 1, 1)) = "M" Then 
                Worksheets(1).Range("A" & lig).Value = nomFichier 
                lig = lig + 1 
            End If 
        Next i 
    
    End Sub 
    
    'On Extrait le nom du fichier du chemin complet 
    Public Function ReturnFileName(ByVal sChemin As String) As String 
        If InStr(sChemin, "\") = 0 Or Right(sChemin, 1) = "\" Then 
            ReturnFileName = "" 
            Exit Function 
        End If 
        ReturnFileName = Mid(sChemin, InStrRev(sChemin, "\") + 1) 
    End Function 
    


    ;o)
    «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
    Nicolas Boileau
    0
    1. Neliville51 Messages postés 99 Statut Membre
       
      Bonjour,

      Merci pour cette réponse rapide.
      J'ai donc essayé le code mais il y a une erreur de compilation à ce niveau et je n'arrive à la corriger.

      A bientôt
      0
    2. Polux31 Messages postés 7219 Statut Membre 1 204
       
      et c'est quoi le message d'erreur ? sur quelle ligne ?
      0
    3. Neliville51 Messages postés 99 Statut Membre
       
      Re
      Erreur de compilation
      Type défini par l'utilisateur non défini

      pour :
      "Public Sub scan(ByVal dossier As Folder"

      Au fait si j'ai bien compris la liste doit se faire dans la prmière feuille de mon classeur non?
      0
    4. Polux31 Messages postés 7219 Statut Membre 1 204
       
      As- tu bien cocher la référence Microsoft Scripting Runtime comme indiqué dans mon post ?

      Dans l'exemple, oui la liste commence à la ligne 2 de la colonne A de l'onglet "Feuil1".

      Il suffit de modifier cette ligne pour l'adapter à ton classeur:
      Worksheets(1).Range("A" & lig).Value = nomFichier
      0
    5. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Il y a une erreur ici

      Set oFolder = fso.GetFolder("D:\Temp")

      il faut mettre

      Set oFolder = oFso.GetFolder("D:\Temp")

      Ensuite il faut aussi modifier cette ligne :

      If UCase(Mid(nomFichier, 1, 1)) = "A" Or UCase(Mid(nomFichier, 1, 1)) = "L" Or UCase(Mid(nomFichier, 1, 1)) = "M" Then 


      En mettant à la place de "A", "L" et "M" les initiales que tu veux tester.

      J'ai laissé celles que j'ai utilisé pour mon test.
      0