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:
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_
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_