Lister les noms de fichiers d'un repertoire

Fermé
ruth - 29 juin 2004 à 14:01
 Rost - 3 nov. 2016 à 09:00
Bonjour à tous !
SVP en VB comment lister les noms des fichiers (texte en principe) d'un repertoire donné?
Merci d'avance et a+
Ruth

45 réponses

Bonjour,

Sous VB et VBA vous pouvez utiliser les objets de scripting !


Exemple :

Sub ListeFichier
  Const ctePourLecture = 1
  Const ctePourEcrire = 2
  Const ctePourAjouter = 8

  Dim objFSO, objDossier, objFichier, objResultat
  Dim Repertoire, NomFichierTxt

  On Error Resume Next

  Repertoire = "C:\Document\Excel"
  NomFichierTxt = "Resultat.txt"
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objDossier = objFSO.GetFolder(Repertoire)
  Set objResultat = objFSO.CreateTextFile((Repertoire & "\" & NomFichierTxt),ctePourEcrire)


  If (objDossier.Files.Count > 0) Then
     For Each objFichier In objDossier.Files
        If (InStr(1, objFichier.Name, ".xls", 1) > 0) Then
            objResultat.WriteLine objFichier.Name
        End If
     Next
   End If

  objResultat.Close
  Set objResultat = Nothing
  Set objDossier = Nothing
  Set objFSO = Nothing

End Sub


Lupin
22
merci
c propre et sans bavure
0
écureuil67 Messages postés 1 Date d'inscription vendredi 25 juin 2010 Statut Membre Dernière intervention 25 juin 2010
25 juin 2010 à 16:05
Peut on l'adapter à un répertoire contenant des sous-répertoires?
0
C'est beau..
0
Vraiment bien. Merci bien pour ce bout de code
0
Yes ça marche !
Merci bien
0
_julien_ Messages postés 56 Date d'inscription lundi 31 mai 2004 Statut Membre Dernière intervention 31 juillet 2004 17
29 juin 2004 à 15:45
3
Utilisateur anonyme
21 oct. 2006 à 01:22
Bonjour,

vous devez détailler plus précicément la nature des objets utilisés !

voici un exemple de code :

Private Sub btn_lister_Click()

    Dim monRep As Variant
    Dim ext As String, Ctr As Integer
    
    ext = ""
    monRep = Me.edit_repertoire.Value
    
    
    ext = Dir(monRep & "\*.doc")
    List_rep.Visible = True
    List_rep.DefaultValue = ""
    Do While ext <> ""
        Me.List_rep.AddItem ext
        ext = Dir
    Loop
    'List_rep.ListStyle = fmListStyleOption

End Sub
'


je ne m'explique toujours pas :

Const myRep = "edit_repertoire.Text"

et quel est le type de l'objet [ List_rep ] ?

Lupin
3
Utilisateur anonyme
23 oct. 2006 à 15:51
re :

je suis sous Access 2002 ( "Suite Office XP").

pour ce qui est des librairies supplémentaires, je vais jeter un
coup d'oeil ce soir, car la je ne suis pas sous le même environnement.

si vous vouliez bien identifier les objets que vous utiliser, je pourrai plus
vous donner mon opignon !!!


List_Rep : Zone de liste déroulante, Zone de liste, Zone de texte ... ?
edit_repertoire : Zone de liste déroulante, Zone de liste, Zone de texte ... ?

Lupin
2

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,
Je recherche a faire la meme chose en vba sous access, mais les fonctions citée dans le lien précédent ne sont pas reconnues.
Si quelqu'un peut m'aider ,Merci :)
0
Merci beaucoup de ta reponse,
mais j'ai trouvé un code plus simple sous vba:

With Application.FileSearch
.LookIn = "C:\dede"
.Filename = "*.*"
If .Execute > 0 Then
MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "There were no files found."
End If
End With

Vus que le controle dirlistbox,drivelistbox sous vba n'existe pas, a ton avis faut t'il beaucoup de temps pour recréer un mini exploreur avec cette fonction et un treeview? (je ne connais pas les treeview, je sui entrain de me documenter dessus)
0
mais quel C...
0
Bonjour,

Utiliser le contrôle "FileListBox" me semble approprié puisqu'il peut lister tous les fichiers d'un dossier.
0
re:

Non, ce fut d'ailleur l'un de mes TPs lors de mon 3e cours de VB,
créer un interface qui remplace la boite de dialogue [Ouvrir] et
[ Enregistrer sous ].

Lupin
0
Bonjour :)
Ce week-end j'ai eu le temps de comprendre ce qu'était un treeview et comment globalement cela fonctionnait 'il.
En effet c'est pas tres compliqué.
Néanmoins je sui tombé sur une autre difficultée, certains repertoires ont un acces protégé (interdit a l'utilisateur que je suis).
Ainsi lorsque je souhaite obtenir l'arboloescence de ces derniers, cela bug et une erreur apparait, quelqu'un aurait une idée afin de contrer cela?
Merci d'avance :)
0
ushiwa.sasuke
16 oct. 2006 à 15:19
Bonjour,

Je cherche un peu à faire la même chose...seulement que moi l'utilisateur choisit le répértoire ou il faut lister les .doc ensuite j'aimerai pouvoir tout lister dans une listBox mais je sais aps trop comment faire...

Voici mon code :

ce qu'il faut déclarer en haut
Option Compare Database

Private Type BROWSEINFO
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

Public Enum NetWork
    WithNetworkFolders = 0
    WithoutNetworkFolders = 2
End Enum

Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
    Alias "SHGetPathFromIDListA" (ByVal pidl As Long, _
    ByVal pszPath As String) As Long

Private Declare Function SHBrowseForFolder Lib "shell32.dll" _
    Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) _
    As Long
    
Const BIF_RETURNONLYFSDIRS = &H1
Const BIF_USENEWUI = &H40


mon bouton parcourir :
Private Sub btn_parcourir_Click()

    Me.edit_repertoire = SelectFolder("D:\", WithoutNetworkFolders)
    
    If IsNull(edit_repertoire) Or Len(edit_repertoire) = 0 Then
        btn_lister.Visible = False
    Else
        btn_lister.Visible = True
    End If
    
End Sub


la fonction SelectFolder :
Public Function SelectFolder(Optional Folder As String = "" _
           , Optional NetWorkFolders As NetWork = WithNetworkFolders _
           ) As String
    Dim X As Long, bi As BROWSEINFO, dwIList As Long
    Dim szPath As String, wPos As Integer
    If Folder = "" Then Folder = CurrentProject.Path
    With bi
        .hOwner = hWndAccessApp
        .lpszTitle = "Sélectionnez votre dossier et cliquez sur OK"
        .ulFlags = BIF_RETURNONLYFSDIRS _
            Or BIF_USENEWUI _
            Or NetWorkFolders
    End With
    dwIList = SHBrowseForFolder(bi)
    szPath = Folder & Space$(512 - Len(Folder))
    X = SHGetPathFromIDList(ByVal dwIList, ByVal szPath)
    If X Then
        wPos = InStr(szPath, Chr(0))
        SelectFolder = Left$(szPath, wPos - 1)
    Else
        SelectFolder = ""
    End If
End Function


je rend visible mon bouton lister :
Private Sub edit_repertoire_Change()
    
    If IsNull(edit_repertoire.Text) Or Len(edit_repertoire.Text) = 0 Then
        btn_lister.Visible = False
    Else
        btn_lister.Visible = True
    End If
End Sub


fonction de mon bouton lister (c'est la ou je bloque :S)
Private Sub btn_lister_Click()

    Dim ext As String
    Dim Ctr As Integer
    Const myRep = "edit_repertoire.Text" ' Voir s'il ne faut pas definir repertoire...
    
    ext = Dir(myRep & "*.doc")
    List_rep.Visible = True
    List_rep.DefaultValue = ""
    Do While ext <> ""
        List_rep.ControlSource = ext
        ext = Dir
    Loop
   
   List_rep.ListStyle = fmListStyleOption
        
    Next
End Sub


Si qqun pourrait m'aider ca serait vraiment sympa...
0
Utilisateur anonyme
17 oct. 2006 à 00:56
Bonjour,

je n'ai pas tout saisi faute de temps mais déjà il serait souhaitable de modifier la déclaration de la constante.

Const myRep = "edit_repertoire.Text"

ext = Dir(myRep & "*.doc")

la constante semble pointer sur un objet VB et on y lit la propriété "Text", la constante ne peut varier lors de l'éxécution
du programme, ce serait plutôt :

Dim myRep As String

myRep = "edit_repertoire.Text"
ext = Dir(myRep & "*.doc")

Lupin
0
ushiwa.sasuke
17 oct. 2006 à 14:32
Bonjour,

pour le moment Access ne m'a pas généré d'erreur à ce niveau la...

mais il ne trouve pas la propriété : ListStyle

En VBA ca n'existe pas et je suis un peu coincé...y'a-t-il un autre moyen avec une boucle et un indice qui s'incrémente ? qqch comme ca...?

Merci d'avance.

Meilleures salutations.
0
ushiwa.sasuke
17 oct. 2006 à 14:32
Bonjour,

pour le moment Access ne m'a pas généré d'erreur à ce niveau la...

mais il ne trouve pas la propriété : ListStyle

En VBA ca n'existe pas et je suis un peu coincé...y'a-t-il un autre moyen avec une boucle et un indice qui s'incrémente ? qqch comme ca...?

Merci d'avance.

Meilleures salutations.
0
ushiwa.sasuke
17 oct. 2006 à 14:33
Bonjour,

pour le moment Access ne m'a pas généré d'erreur à ce niveau la...

mais il ne trouve pas la propriété : ListStyle

En VBA ca n'existe pas et je suis un peu coincé...y'a-t-il un autre moyen avec une boucle et un indice qui s'incrémente ? qqch comme ca...?

Merci d'avance.

Meilleures salutations.
0
ushiwa.sasuke
17 oct. 2006 à 15:41
Pkoi mon post s'affiche-t-il 3 fois ???
0
ushiwa.sasuke
19 oct. 2006 à 16:53
J'ai essayé comme ceci mais sans résultat...

Private Sub btn_lister_Click()

    Dim ext As String
    Const myRep = "edit_repertoire.Text" ' Voir s'il ne faut pas definir repertoire...
    
    ext = Dir(myRep & "*.doc")
    List_rep.RowSource = ""
    'Do While ext <> ""
        'List_rep.RowSource = List_rep.RowSource & ext & ";"
        'ext = Dir
    Loop
   
   'List_rep.ListStyle = fmListStyleOption
        
    
End Sub


Personne n'a une idée svp ? je commence à desespérer :'(
0
ushiwa.sasuke
23 oct. 2006 à 11:12
Merci pour votre réponse...

mais pour info les propriétés additems et lifestyle sont propriétaire à VB et non à VBA cela n'existe pas...donc c'est pour ca que je cherche un autre moyen de le faire...

Merci d'avance.
0
Utilisateur anonyme
23 oct. 2006 à 13:18
Bonjour,

le code soumis dans mon dernier post a été généré et testé sous
VBA d'access. Pour ce qui est de la méthode AddItem, elle est
bel et bien présente sous VBA, je l'utilise depuis longtemps ...

Lupin
0
ushiwa.sasuke
23 oct. 2006 à 14:44
Ah...c'est bizarre ca car chez moi elle est inconnue...

Quelle est la version d'Access que vous utilisez ? Y'a-t-il une librairie à activer ou un dll ???


De mon coté je suis en Access 2000...

Merci d'avance.
0
ushiwa.sasuke
23 oct. 2006 à 16:36
Oki aucun problème

Merci bcp de consacrer un peu de temps pour moi :)

Sinon pour les 2 objets :


List_Rep : Zone de liste
edit_repertoire : Zone de texte

Merci d'avance.
0
Utilisateur anonyme
24 oct. 2006 à 02:03
re:

Alors j'ai peut-être ajouté cette référence :
Microsoft Visual Basic For Applications Extensibility 5.3

Sinon, j'ai le standard :
Visual Basic For Applications
Microsoft Access 10.0 Object Library
Microsoft DAO 3.6 Object Library
OLE Automation

J'ai refais le test avec une zone de liste pour [ List_Rep ] et ça
fonctionne encore chez moi !

Lupin
0