Sélecteur de fichiers en vba, avec objet standard office (filedialogs)

Description

Il y a une source qui propose une méthode en programmant directement la recherche des fichiers et répertoires ainsi que la gestion de cette liste...

Ici, à titre d'information, je décris l'utilisation des boites standard (FileDialogs) qui sont disponibles en VBA...

A titre d'exemple j'ai écrit une fonction pour la mise en oeuvre (code ci-dessous), et je livre un exemple dans un classeur EXCEL qui lance une boite de dialogue permettant de mettre en oeuvre la fonction. Je ne fais pas référence au paramètre 'ButtonName', mais vous comprendrez aisément comment on s'en sert...

J'en profite pour faire part aux débutants de la méthode que j'utilise pour extraire des chaines de caractères dans une liste, avec des séparateurs quelconques (Tabulations par exemple): la fonction 'Split', à tout hasard.

L'aide en ligne VBA est indexée sur le mot-cle: FileDialog

Source / Exemple :


Public Function ListeFichiers(Chemin As String, Titre As String, Filtre As String, Multi As Boolean)
Dim tf As Variant   ' tf est la variable dans laquelle on va créer le tableau des filtres demandés
Dim nflt As Integer ' nombre de filtres
Dim res As String   ' chaine à retourner

' cette fonction ouvre un sélecteur de fichiers et retourne le résultat dans une liste
' (chaine constituée par les noms de fichiers séparés par des tabulations)

' Chemin est le chemin de départ de l'exploration (si c'est une fichier, il est positionné par défaut
' Titre est le titre de la fenêtre
' Filtre est le filtre pour les noms ou extensions (on peut en définir plusieurs)
' Multi indique si on veut une sélection MULTIPLE

' déclare un objet pour la boite de dialogue que l'on va manipuler
' Une fois créée la boite de dialogue, on la paramètre par ses différentes propriétés
' puis on l'active (avec la méthode show)
' on récupère ensuite le résultat dans la collection SelectedItems() (en cas de séections multiples)

Dim FD As FileDialog

' Création de la boite. L'argument indique qu'il s'agit d'une sélecteur de fichiers
' on pourrait aussi avoir: ouverture, SaveAs, sélecteur de répertoires
Set FD = Application.FileDialog(msoFileDialogFilePicker)

' paramètres
FD.InitialFileName = Chemin
FD.Title = Titre
FD.AllowMultiSelect = Multi

' Filtres
' La méthode normale consiste à créer une instance de DialogFilter pour chaque filtre
' Un filtre contient:
'   une description: texte affiché dans la liste
'   une ou plusieurs extensions, séparées par des point-virgules
' l'argument d'appel est une chaine contenant la liste des filtres, séparés par des CHR(13)
' chaque filtre étant composé de deux chaines (description + TAB + extensions)
' si la chaine est vide on aura les types de fichiers par défaut

nflt = 0
If Filtre <> "" Then
    tf = Split(Filtre, Chr(13))
    nflt = UBound(tf) + 1 ' split crée un tableau base 0
    ' effacement des filtres par défaut
    FD.Filters.Clear
End If

For i = 1 To nflt
    ' découpage du filtre sur TAB
    p = InStr(tf(i - 1), Chr(9))
    If p > 0 Then
        ' création du filtre
        FD.Filters.Add Description:=Left(tf(i - 1), p), Extensions:=Mid(tf(i - 1), p + 1)
    Else
        ' le filtre est mal paramétré (pas de tabulation trouvée)
    End If
Next

' ouverture du sélecteur
' *****************************
' la méthode Show retourne une valeur indiquant l'action de l'utilisateur, que l'on peut tester,
' mais nous nous contentons de voir si des résultats sont donnés
FD.Show

' on obtient les noms des fichiers sélectionnés dans la collection SelectedItems
' et on construit la chaine retournée (noms de fichiers séparés par des tabulations)
res = ""
For i = 1 To FD.SelectedItems.Count
    If res <> "" Then res = res & Chr(9)
    res = res + FD.SelectedItems(i)
Next

Set FD = Nothing
ListeFichiers = res

End Function

Conclusion :


Ce n'est donc qu'une méthode parmi d'autres... mais je pense que beaucoup, comme moi, ont recherché ce qu'il y avait en plus du simple GetOpenFileName, qui ne permet pas de filtrer ni de spécifier un fichier par défaut.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.