Questions sur UserForm avec liste de fichiers

Mi_

XLDnaute Occasionnel
Bonjour le forum,

J'essaye d'utiliser un UserForm avec une ListBox où apparaissent tous les fichiers présents dans les sous-dossiers d'un dossier donné. En sélectionnant un fichier, je voudrais l'ouvrir avec CommandButton1. Le code que je tatonne pour le moment est:

Code:
[color=blue]Private Sub UserForm_Initialize()
Dim fso As Object, dossier As Object
Set fso = CreateObject('Scripting.FileSystemObject')
Set dossier = fso.GetFolder('C:\\Excel')
Set sousdossier = dossier.SubFolders
For Each Flder In sousdossier
Set Fichier = Flder.Files
For Each fl In Fichier
ListBox1.AddItem fl.Name
Next fl
Next Flder
End Sub

Private Sub CommandButton1_Click()
If UserForm1.ListBox1.ListIndex = -1 Then
MsgBox ('Sélectionner un fichier')
Else
Workbooks.Open (ListBox1.List(ListBox1.ListIndex)): End
End If
Unload Me
End Sub
[/color]

Ce code ne marche pas, et pour cause, car Excel ne peut pas trouver le chemin exact des fichiers qui sont dispersés un peu partout dans les sous-dossiers.

Et maintenant les questions:

1) Comment faire, justement, pour pouvoir ouvrir avec CommandButton1 les fichiers des sous-dossiers qui apparaissent dans ListBox1, n'importe leur location exacte ?

2) Comment faire pour avoir dans ListBox1 les fichiers des sous-dossiers filtrés en fonction d'un mot dans leur nom ? Par exemple, lister uniquement les fichiers qui contiennent 'Toto' dans leur nom. Et pour deux mots 'Toto' et 'Voiture' ? (Ex: 'La_voiture_de_toto_1.xls')

2') Filtrer par 'Toto' et 'voiture' si le UserForm a été lancé à partir du bouton 'Forme automatique 1' et par 'Toto' et 'maison' si par 'Forme automatique 2', en utilisant le même UserForm ?


3) Comment faire pour ajouter une ligne de commande, au processus d'ouverture des fichiers par cet même UserForm (Workbooks.Open) dans CommandButton1, variable en fonction du bouton qui a lancé le Userform ? Exemple:
Si le Macro est exécuté à partir de Forme automatique 1, insérer Sheets('Feuil1').Select, tandis que s'il est exécuté à partir de la Forme automatique 2, insérer Sheets('Feuil2').Select après la commande (Workbooks.Open).

Merci d'avance pour tout conseil qui m'aiderait à faire avancer ce ListBox si compliqué.

Cordialement,
Mi_
 

Creepy

XLDnaute Accro
Bonjour le Forum, Mi_

Tu as beaucoup de questions !!!!!!!


Le plus simple pour nous serait que tu mettes en PJ à ton post le fichier que tu as deja préparer plutôt que de nous 'balancer' un bout de code comme ca.

On pourrait alors travailler sur plus solide et surtout on irait plus vite !! (pas à créer un exemple de toutes pièces)

Bref voici un petit code qui permet de rechercher un fichier n'omporte où et donc de repondre à ta question 1.

  With Application.FileSearch
 
' d abord réinitialiser les critères (Attention : Le LookIn ne se réinitialise pas comme ça)
    .NewSearch
'Pour mettre à jour la liste des dossiers, au cas ou on viendrait de créer un nouveau dossier par VBA :
    .RefreshScopes
'Dossier(s) de recherche :
    .LookIn = 'c:\\temp'
' Fichiers à rechercher (J'ai essayé plusieurs formes 'a*.php;C*.*' mais ça ne marche pas:
'.FileName = '*.*' recherche tous les fichiers
'.FileName = 'C.php' recherche tous les fichiers qui contiennent c ou C quelque par dans leur nom, et qui se terminent par .php ou .PHP
    .Filename = 'Dudul.xls'
'Le type de fichiers qu'on recherche. Ici, tous, et de toute façon, on a déjà filtré avec .FileName. Mais on peut par exemple indiquer msoFileTypeExcelWorkbooks qui va extraire tous les fichiers Excelé (XLA, XLT, XLS, XLW)
    .FileType = msoFileTypeAllFiles
'On va rechercher dans les sous dossiers  :
    .SearchSubFolders =
True
'C est parti :
    .Execute
'Une boucle traditionnelle pour parcourir les fichiers trouvés. FoundFiles(Ctr) n'a pas de propriétés. Par exemple, pas question d'avoir le nom du fichier sans le dossier, ou même sa date de création (en tout cas par la méthode FoundFiles)
   
For ctr = 1 To .FoundFiles.Count
  S
'il y a plusieurs réponse

@+

Creepy
 

Mi_

XLDnaute Occasionnel
Bonjour Creepy, le forum,

Merci de ta reponse. Mais comment faire pour insérer les résultats de ton code de recherche dans ListBox1 ?

J'annexe un fichier qui exemplifie mes problèmes et mes demandes de secours.

Merci,
Mi_ [file name=exemple_20050902203249.zip size=11467]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/exemple_20050902203249.zip[/file]
 

Pièces jointes

  • exemple_20050902203249.zip
    11.2 KB · Affichages: 47

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 110
Membres
103 121
dernier inscrit
SophieS