Vous avez fait une macro qui ouvre un fichier texte (ou) et vous voudriez pouvoir laisser l'utilisateur choisir le fichier. Ou encore vous avez fait une macro qui fait une copie d'une feuille (ou qui crée un nouveau classeur) et vous voudriez que l'utilisateur choisisse le nom du fichier et son emplacement avant que la macro ne l'enregistre... Vous aurez besoin de l'objet FileDialog.

[Edit]Un oubli de ma part, et Dieu sait que le détail est important! Avant toute chose, il faut ajouter la référence Microsoft Office (version) Object Library.[/Edit]

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub ChargerFichier()
    ' Déclaration des variables
    Dim fdlg As FileDialog
    Dim vrtSelectedItem As Variant  ' les noms de fichiers
 
    ' Initialisation de la variable de l'objet FileDialog
    Set fdlg = Application.FileDialog(msoFileDialogFilePicker)
 
    ' Spécifie les valeurs pour les principales propriétés
    With fd
        .Title = "Ouvrir un fichier texte"  ' le titre de la boîte de dialogue
        .Filters.Clear   ' efface tous les filtres par défaut
        .Filters.Add "Fichier texte(.txt)", "*.txt"  ' crée le filtre pour les fichiers texte
        .InitialFileName = ActiveWorkbook.Path  ' détermine le dossier par défaut
        .AllowMultiSelect = True   ' Autorise la sélection multiple
 
        ' L'utilisateur a cliqué sur le bouton
        If .Show = -1 Then
            ' Parcourre les différentes sélections
            For Each vrtSelectedItem In .SelectedItems
                ' Vous pouvez utiliser les fonction de lecture de fichier d'Excel
                ' ou encore lire directement le fichier par une instruction Open
                ' Pour cet exemple, on affiche simplement une boîte de message
                MsgBox "Le chemin est : " & vrtSelectedItem
            Next vrtSelectedItem
 
          ' Si l'utilisateur clique sur Annuler...
          Else
            ' vous pouvez faire un traitement particulier (facultatif)
        End If
    End With
 
    ' libère la mémoire
    Set fdlg = Nothing
End Sub
Si vous désirez empêcher la sélection multiple des fichiers, vous pouvez recueillir le nom de fichier dans une variable de chaîne.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
    Dim strItem As String  ' le nom du fichier
        ' ...
        .AllowMultiSelect = True   ' Autorise la sélection multiple
 
        ' L'utilisateur a cliqué sur le bouton
        If .Show = -1 Then
            MsgBox "Le chemin est : " & strItem
Vous pouvez utiliser les paramètres par défaut de la boîte de dialogue. Par exemple, la boîte Ouvrir un fichier texte que nous venons de créer aurait très bien pu avoir le titre par défaut, soit : 'Ouvrir' et elle aurait pu aussi utiliser les filtres par défaut d'Excel. Il suffit d'omettre les lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
        .Title = "Ouvrir un fichier texte"  ' le titre de la boîte de dialogue
        .Filters.Clear   ' efface tous les filtres par défaut
        .Filters.Add "Fichier texte(.txt)", "*.txt"  ' crée le filtre pour les fichiers texte
Pour créer une boîte de dialogue par défaut Enregistrer sous ou Ouvrir, vous devez modifier le paramètre de la fonction FileDialog.

Pour une boîte de dialogue Ouvrir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Set fdlg = Application.FileDialog(msoFileDialogOpen)
Voici la liste des différentes valeurs que peut prendre le paramètre msoFileDialogType :
  • msoFileDialogFilePicker Permet à l'utilisateur de sélectionner un fichier.
  • msoFileDialogFolderPicker Permet à l'utilisateur de sélectionner un dossier.
  • msoFileDialogOpen Permet à l'utilisateur d'ouvrir un fichier.
  • msoFileDialogSaveAs Permet à l'utilisateur d'enregistrer un fichier.


Note :
Si vous utilisez une autre valeur que msoFileDialogPicker, il vous sera impossible de modifier la porpirété Filters de votre boîte de dialogue.