Lister les noms de fichiers d'un repertoire

ruth -  
 Rost -
Bonjour à tous !
SVP en VB comment lister les noms des fichiers (texte en principe) d'un repertoire donné?
Merci d'avance et a+
Ruth
A voir également:

45 réponses

u
 
Bonjour,

C'est bizarre tout ca j'ai les mêmes librairies que vous mais chez moi cela ne fonctionne pas...

Avez-vous Visual Basic installé chez vous ? car moi non j'utilises tout depuis Access...

Merci d'avance.
0
Utilisateur anonyme
 
re:

sur une de mes machines, je n'ai pas VB d'installer et ça fonctionne
seulement avec Access. Il semble que la version 2000 ne supporte
pas cette fonctionnalité.

... désolé, cela me semble sans solution ...

Lupin
0
ushiwa.sasuke
 
Oki je vois... :(

ben tempis merci de ma'voir aider en tout cas...:)

je vais essayer de mettre à jour la version d'access pour pouvoir avancer...
0
Utilisateur anonyme
 
re:

c'est un peu ce à quoi je pensais, vous pourriez peut-être remplacer
les fichiers relatifs au fichiers de référence !

Visual Basic For Applications
Microsoft Visual Basic For Applications Extensibility 5.3

J'ai déjà été confronter à un problème de calendrier sur un poste
qui avait VB et Outlook d'Installer. J'ai donc du ecraser un fichier
d'une version vers une autre !

Je vais regarder ce soir sur mon poste et vous donner la version
exacte de ces fichiers !

Et je me suis amuser à bonifier votre code !

Je vous reviens avec quelques idées !

Lupin
0

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

Posez votre question
ushiwa.sasuke
 
Bonjour,

Merci bcp pour votre aide, si j'ai bien compris vous voulez ecraser les fichiers .dll actuel par ceux de VB de facon à "mettre à jour" les librairies...?


Sinon de mon coté petite amélioration...j'ai enfin compris ce que vous disiez avec le const...

Voici le code mis à jour :

Private Sub btn_lister_Click()

    Dim ext As String
    Dim myRep As String
    
    myRep = edit_repertoire.Value
    
    ext = Dir(myRep & "\*.doc")
    List_rep.Visible = True
    List_rep.RowSource = ""
    Do While ext <> ""
        List_rep.RowSource = List_rep.RowSource & ext & ";"
        ext = Dir
    Loop
   
   'List_rep.ListStyle = fmListStyleOption
    
End Sub


En métant un point d'arret au niveau de
List_rep.RowSource = ""


myRep contient le path du dossier que j'ai défini dans mon champs edit_repertoire

et ext contient le premier fichier .doc du dossier

Maintenant le problème est juste la boucle...j'essaie de regarder de mon coté...

Merci encore.

P.S: c'est dur d'apprendre un language ^^
0
ushiwa.sasuke
 
enfait j'ai oublié de préciser que c'est l'affichage de la boucle qui pose problème car ext prend une nouvelle valeur à chaque nouvelle entrée dans la boucle et les valeurs sont bien les nom des .doc que j'ai dans mon dossier :)
0
Utilisateur anonyme
 
Bonjour,

voilà en attendant, voici le code remanier que j'ai fais :

n.b. il faut rajouter une zone de liste modifiable pour le type de fichier !
[ typ_fichier ]

et j'ai ajouté un bouton [ Quitter ] !

Private Sub btn_parcourir_Click()

    Me.edit_repertoire = SelectFolder("D:\", WithoutNetworkFolders)
          
    If Not (IsNull(edit_repertoire) Or Len(edit_repertoire) = 0) Then
        Mise_A_Jour_Liste
    End If
          
End Sub
'

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
'

Private Sub cmd_Quitter_Click()
    DoCmd.Close
End Sub
'

Private Sub edit_repertoire_Change()
          
    If Not (IsNull(edit_repertoire.Text) Or Len(edit_repertoire.Text) = 0) Then
        Mise_A_Jour_Liste
    End If
    
End Sub
'

Private Sub Form_Load()

    Me.typ_fichier.AddItem "*.doc"
    Me.typ_fichier.AddItem "*.xls"
    Me.typ_fichier.AddItem "*.pdf"
    Me.typ_fichier.AddItem "*.txt"
    Me.typ_fichier.AddItem "*.*"
    
    If Not (IsNull(edit_repertoire) Or Len(edit_repertoire) = 0) Then
        Mise_A_Jour_Liste
    End If
    
    
End Sub
'

Private Sub typ_fichier_AfterUpdate()
    Mise_A_Jour_Liste
End Sub
'

Private Sub Mise_A_Jour_Liste()

    Dim monRep As Variant, monType As Variant
    Dim ext As String, Ctr As Integer
    
    While Me.List_rep.ListCount > 0
        Me.List_rep.RemoveItem (Me.List_rep.ListCount - 1)
    Wend
    
    ext = ""
    monRep = Me.edit_repertoire.Value
    monType = Me.typ_fichier.Value
    
    ext = Dir(monRep & "\" & monType)
    List_rep.Visible = True
    List_rep.DefaultValue = ""
    Do While ext <> ""
        Me.List_rep.AddItem ext
        ext = Dir
    Loop

End Sub
0
Utilisateur anonyme
 
re:

voici la localisation que je trouve de mon côté :

Visual Basic For Applications
\Program Files\Fichiers communs\Microsoft Shared\VBA\VBA6\VBE6.DLL

Microsoft Access 10.0 Object Library
\Program Files\Fichiers communs\Microsoft Shared\Office10\mso.dll

Microsoft DAO 3.6 Object Library
\Program Files\Fichiers communs\Microsoft Shared\DAO\dao360.dll

OLE Automation
\WINDOWS\system32\STDOLE2.TLB

Microsoft Visual Basic For Applications Extensibility 5.3
\Program Files\Fichiers communs\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB


tu peux tenter une mise à jour en prenant de renommer l'original ou en faire une copie de sécurité.

Lupin
0
ushiwa.sasuke
 
Bonjour,

En ce qui concerne les librairies elle sont à la même place que vous...

Mais pour le remaniment du code que vous avez fait...je dois dire que je suis un peu perdu...

Nom de procédure changé...

Ajout de procédure...

Enfait ce qui me perd le plus et qu'il n'y a plus la procèdeure btn_cliquer...

Merci d'avance...

PS: je vais quand meme jeter un coup d'oeil :)
0
ushiwa.sasuke
 
Re bonjour,

C'est vraiment bizare j'ai pris mon application à la maison pour la tester et etonnement elle fonctionne avec ce code...

Private Sub btn_lister_Click()

    Dim ext As String
    Dim myRep As String
    
    myRep = edit_repertoire.Value
    
    ext = Dir(myRep & "\*.doc")
    List_rep.Visible = True
    Do While ext <> ""
        List_rep.AddItem (myRep & "\" & ext)
        ext = Dir
    Loop
    
End Sub


maintenant j'arrive à lister mes fichiers dans la listbox chez moi mais pas au boulot...je pense que je vais re installer windows demain et voir ce que ca donne...

Merci bcp pour votre aide en tout cas...

PS : petite question maintenant j'aimerai pouvoir choisir plusieurs fichier dans ma listbox comment dois-je faire car quand j'appuie sur ctrl puis je clique sur les nom des fichiers je n'arrives pas à en séléctionner plusieurs :S

Merci d'avance.
0
ushiwa.sasuke
 
Effectivement après une re installation complète de Windows mon application marche maintenant...

Cela dit je suis un peu bloqué pour continuer... comment puis-je séléctionner plusieurs non de fichier dans la listbox pour pouvoir effectuer ma conversion par la suite ???

Merci d'avance.
0
Utilisateur anonyme
 
re :

... pour suivre sur le message 29 et fonction du message 27 ...

à mon avis, la fonction du bouton [ Lister ] est implicite dans le
bouton parcourrir ...

ex.: les boites de dialogue standard [ Ouvrir/Enregistrer/Fermer ]

une barre d'adresse
un liste de types de fichiers ( *.doc,*.xls,*.pdf,*.*,etc...)

une fois ces deux conditions remplies l'affichage est explicite.

j'ai transformer la routine
btn_lister_Click
par
Private Sub Mise_A_Jour_Liste()

ainsi celle-ci est appellé par les 2 évènements de ces objets
la mise à jour est implicite au bon moment :-)

si tu veux conserver le btn_Lister_clic, tu peux ainsi faire :

Private Sub btn_lister_Click()

    Mise_A_Jour_Liste
    
End Sub


bon, tu fais quand même ce que tu préfères, je ne t'apporte que des suggestions !

Lupin
0
ushiwa.sasuke
 
Merci bcp pour votre réponse c'est toute suite plus clair maintenant :)

cela dit je repose ma question que j'ai cité précédément :

Une foi que tout mes fichiers sont listés, comment pourrai-je faire pour séléctionner ceux que j'ai envie de convertir ? (juste la séléction car vous la conversion je crois déjà avoir trouvé...)

merci d'avance.
0
Utilisateur anonyme
 
re :

Dans les propriété de l'objet [ List_Rep ], vous devez modifier
la propriété [ Sélection multiple ] à [ Simple ] ou [ Étendue ].
ainsi en appuyant sur la touche [ Shift ] (majuscule), la sélection
est conservé !

je recommande [ Étendue ].

exemple de code associé :

Private Sub List_Rep_Click()

    Dim Control_Liste As Control, Fichier_Item As Variant
    Dim Contenu As String
    
    Contenu = ""
    Set Control_Liste = Forms!CheminDAcces.List_rep
    For Each Fichier_Item In Control_Liste.ItemsSelected
        Contenu = Contenu & vbCrLf & Control_Liste.ItemData(Fichier_Item)
    Next Fichier_Item
    MsgBox Contenu

End Sub
'


Lupin
0
ushiwa.sasuke
 
Merci bcp :)
0
ushiwa.sasuke
 
Cela dit j'ai le msg d'erreur suivant qui arrive quand je test :

http://img175.imageshack.us/img175/9333/msgerreurtg0.jpg
0
ushiwa.sasuke
 
Cela dit j'ai le msg d'erreur suivant qui arrive quand je test :

http://img175.imageshack.us/img175/9333/msgerreurtg0.jpg
0
Utilisateur anonyme
 
re :

Avez-vous modifier la Propriété [ Sélection multiple ] de l'objet ?
Avez-vous sauvegarder le formulaire ?
(question peut-être idiote ?)

Il vous faudra peut-être traqué la routine en mode pas a pas en
plaçant un point d'arrêt

Voici le code ou j'en suis dans cet exemple sans les déclarations
et sans la routine SelectFolder. J'ai aussi ajouter un bouton quitter.

'      mon bouton parcourir :

Private Sub btn_parcourir_Click()

    Me.edit_repertoire = SelectFolder("D:\", WithoutNetworkFolders)
          
    If Not (IsNull(edit_repertoire) Or Len(edit_repertoire) = 0) Then
        Mise_A_Jour_Liste
    End If
          
End Sub
'

Private Sub cmd_Quitter_Click()
    DoCmd.Close
End Sub
'

Private Sub edit_repertoire_Change()
          
    If Not (IsNull(edit_repertoire.Text) Or Len(edit_repertoire.Text) = 0) Then
        Mise_A_Jour_Liste
    End If
    
End Sub
'

Private Sub Form_Load()

    Me.typ_fichier.AddItem "*.doc"
    Me.typ_fichier.AddItem "*.xls"
    Me.typ_fichier.AddItem "*.pdf"
    Me.typ_fichier.AddItem "*.txt"
    Me.typ_fichier.AddItem "*.*"
    
    If Not (IsNull(edit_repertoire) Or Len(edit_repertoire) = 0) Then
        Mise_A_Jour_Liste
    End If
    
    
End Sub
'

Private Sub typ_fichier_AfterUpdate()
    Mise_A_Jour_Liste
End Sub
'

Private Sub Mise_A_Jour_Liste()

    Dim monRep As Variant, monType As Variant
    Dim ext As String, Ctr As Integer
    
    While Me.List_rep.ListCount > 0
        Me.List_rep.RemoveItem (Me.List_rep.ListCount - 1)
    Wend
    
    ext = ""
    monRep = Me.edit_repertoire.Value
    monType = Me.typ_fichier.Value
    
    ext = Dir(monRep & "\" & monType)
    List_rep.Visible = True
    List_rep.DefaultValue = ""
    Do While ext <> ""
        Me.List_rep.AddItem ext
        ext = Dir
    Loop

End Sub



Lupin
0
ushiwa.sasuke
 
Je suis vraiment bête...j'avais oublié de modifié la propriétés pour accepter la séléction multiple...

Si vous voulez jeter un coup d'oeil --> https://www.cjoint.com/?lgqySYsMJW
0
ushiwa.sasuke
 
J'ai encore un petit problème dans mon code à ce niveau la :

Private Sub btn_convertir_Click()
    Dim reponse As Integer
    Dim fso As Object
    Dim rep As String
    Dim fname As String
    Dim RepExist As Boolean
GetDir:
    rep = InputBox("Veuillez entrer le répértoire de destination", "Répértoire de Destination", edit_repertoire & "\convertion\")
    Set fso = CreateObject("Scripting.FileSystemObject")
    RepExist = fso.FolderExists(rep)
    Do While Not RepExist
        reponse = MsgBox("Le répértoire cité n'existe pas ! Voulez-vous le créer ?", vbYesNoCancel + vbQuestion, "création répértoire")
        If reponse = vbYes Then
            MkDir (rep)
            Exit Do
        ElseIf vbCancel Then
            Exit Sub
        Else
           GoTo GetDir
        End If
    Loop
    For i = 0 To List_rep.ListCount - 1
         If List_rep.Selected(i) Then
            k = InStr(List_rep.List(i), ".")
            fname = Left(List_rep.List(i), k - 1)
            objWord.Documents.Open List_rep.Selected(i) ' ouvrir un document Word
            ActiveDocument.SaveAs FileName:=fname & ".rtf", FileFormat:=wdFormatRTF
            objWord.Documents(1).Close  ' fermer le document
            objWord.Quit ' quitter l'application Word
            Set objWord = Nothing  ' libérer la mémoire
         End If
    Next i
    
End Sub


Il met de message d'erreur :

http://img170.imageshack.us/img170/1038/msgerreurxv0.jpg

à la ligne :

objWord.Documents(1).Close  ' fermer le document


Avez-vous une idée ?

Merci d'avance.
0