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,

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
24 oct. 2006 à 18:45
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
25 oct. 2006 à 13:48
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
25 oct. 2006 à 14:49
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
25 oct. 2006 à 16:01
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
25 oct. 2006 à 16:32
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
25 oct. 2006 à 21:25
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
28 oct. 2006 à 00:02
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
30 oct. 2006 à 11:59
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
30 oct. 2006 à 17:00
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
31 oct. 2006 à 15:59
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
31 oct. 2006 à 23:24
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
1 nov. 2006 à 12:14
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
1 nov. 2006 à 14:49
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
2 nov. 2006 à 11:48
Merci bcp :)
0
ushiwa.sasuke
2 nov. 2006 à 12:14
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
2 nov. 2006 à 12:16
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
2 nov. 2006 à 23:49
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
6 nov. 2006 à 16:25
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
9 nov. 2006 à 13:55
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