Lister contenu dossier dans excel (VBA)

Neliville51 Messages postés 92 Date d'inscription   Statut Membre Dernière intervention   -  
Neliville51 Messages postés 92 Date d'inscription   Statut Membre Dernière intervention   -
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


A voir également:

1 réponse

Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   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
Neliville51 Messages postés 92 Date d'inscription   Statut Membre Dernière intervention  
 
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
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
et c'est quoi le message d'erreur ? sur quelle ligne ?
0
Neliville51 Messages postés 92 Date d'inscription   Statut Membre Dernière intervention  
 
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
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   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
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   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