Posez votre question Signaler

Lister les noms de fichiers d'un repertoire

ruth - Dernière réponse le 20 juin 2012 à 09:49
Bonjour à tous !
SVP en VB comment lister les noms des fichiers (texte en principe) d'un repertoire donné?
Merci d'avance et a+
Ruth
Lire la suite 
Réponse
+27
moins plus
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
Vinz- 4 oct. 2011 à 16:47
Yes ça marche !
Merci bien
Répondre
heyquem 760Messages postés mercredi 17 juin 2009Date d'inscription 29 décembre 2013Dernière intervention - 4 oct. 2011 à 21:36
pétard, vous trouvez ça bien vous ?

En Python pour lister les fichiers et sous-répertoire d'un répertoire , il suffit d'une fonction et du chemin du répertoire:

import os

print os.listdir(chemin) 


et c'est tout !

Il y a même une fonction
os.walk() 
pour explorer tous les niveaux de sous répertoires d'un répertoire de départ.
Répondre
bigAlex- 25 oct. 2011 à 14:55
VBA est sans doute plus verbeux, mais dans l'exemple fourni il demande à l'utilisateur quel est le dossier à explorer (getFolder)
Répondre
heyquem 760Messages postés mercredi 17 juin 2009Date d'inscription 29 décembre 2013Dernière intervention - 25 oct. 2011 à 15:00
Que veux-tu dire ?

En Python, pour que le programme demande à l'utilisateur quel dossier explorer, il suffit d'écrire:

import os 

print os.listdir(raw_input('Entrez le chemin du dossier que vous voulez explorer : '))


raw_input() pour les versions Python 2.x
Répondre
lt- 20 juin 2012 à 09:49
Chaque langage a ses avantages et ses inconvénients. Je me demande pourquoi les fans de Python se croient obligés de toujours tout ramener à ce langage : le sujet est ici le VBA !
Répondre
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+3
moins plus
http://www.vbfrance.com/code.aspx?ID=19249

-- 
julien barbier
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+3
moins plus
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
Ajouter un commentaire
Réponse
+2
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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 :)
Ajouter un commentaire
Réponse
+0
moins plus
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)
teleteubis- 28 juin 2010 à 18:40
mais quel C...
Répondre
Thedub2001- 8 juin 2011 à 11:40
Bonjour,

Utiliser le contrôle "FileListBox" me semble approprié puisqu'il peut lister tous les fichiers d'un dossier.
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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 :)
Ajouter un commentaire
Réponse
+0
moins plus
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...
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
Pkoi mon post s'affiche-t-il 3 fois ???
Ajouter un commentaire
Réponse
+0
moins plus
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 :'(
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé «  lister les noms de fichiers d'un repertoire  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.