IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

FilePicker et FolderPicker pour UserForm


Sujet :

Contribuez

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 224
    Points : 443
    Points
    443
    Par défaut FilePicker et FolderPicker pour UserForm
    Bonjour à tous,

    Ce post sert à présenter un module de classe permettant de faciliter la manipulation des FilePickers/FolderPickers sur un formulaire.

    Ce module de classe Cls_FrmTool_FileFolderPicker sert à lier 3 contrôles :
    • Un Label contenant le Caption du FilePicker/FolderPicker
    • Un Label contenant la Value du FilePicker/FolderPicker
    • Un CommandButton permettant d’ouvrir la fenêtre de sélection du fichier/dossier

    La sélection du fichier/dossier peut se faire de deux manières :
    • Via un clic sur le CommandButton
    • Via un double-clic sur le Label contenant la Value du FilePicker/FolderPicker



    La classe Cls_FrmTool_FileFolderPicker contient :
    • 2 méthodes permettant d’initialiser le contrôle (InitFilePicker et InitFolderPicker)
    • Les propriétés suivantes en lecture/écriture permettant d’interagir avec le contrôle :
      • Value
      • Caption
      • Enabled
      • Visible
      • FilterDescr
      • FilterExt
      • Title



    L’exemple ci-joint montre comment mettre en œuvre ce module de classe pour gérer plusieurs FilePickers/FolderPickers au sein d’un même formulaire et comment interagir avec eux.

    Code du module de classe Cls_FrmTool_FileFolderPicker :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    '#######################################################################################
    '
    ' Module      : Cls_FrmTool_FileFolderPicker
    ' Auteur      : Mickaël
    ' Date        : 14/09/2020
    ' Description : Module de code dédié à gérer les FilePicker et FolderPicker d'un formulaire.
    '               Dans la conception d'un formulaire, un FilePicker ou un FolderPicker est composé
    '               d'un ensemble de 3 contrôle :
    '                   - un Label contenant la description du champ de saisie
    '                   - un Label contenant l'emplacement du path (la "valeur" du FilePicker/FolderPicker)
    '                   - un CommandButton pour afficher la boite de sélection du fichier/dossier
    '               Cette classe permet de "lier ces contrôles" et de faciliter leur manipulation.
    '               Le clic sur le bouton ou le double-clic sur le "label valeur" permet d'ouvrir la boite de
    '               sélection du fichier/dossier.
    ' Interfaces  :
    '       - Méthode InitFilePicker
    '         Méthode dédiée à initialiser un FilePicker.
    '         Paramètres:
    '           > p_o_lblText           contrôle Label contenant la description du FilePicker
    '           > p_o_lblValue          contrôle Label contenant l'emplacement du path du FilePicker
    '           > p_o_btn               contrôle CommandButton du FilePicker
    '           > (p_s_filterDescr)     OPTIONNEL - permet (avec p_s_filterExt) de définir un filtre de fichier
    '           > (p_s_filterExt)       OPTIONNEL - permet (avec p_s_filterDescr) de définir un filtre de fichier
    '           > (p_s_dialogBoxTitle)  OPTIONNEL - permet de définir le titre de la boite de sélection de fichier
    '           > (p_s_initialFilePath) OPTIONNEL - permet de définir une valeur de base au FilePicker
    '       - Méthode InitFolderPicker
    '         Méthode dédiée à initialiser un FolderPicker.
    '         Paramètres:
    '           > p_o_lblText             contrôle Label contenant la description du FolderPicker
    '           > p_o_lblValue            contrôle Label contenant l'emplacement du path du FolderPicker
    '           > p_o_btn                 contrôle CommandButton du FolderPicker
    '           > (p_s_dialogBoxTitle)    OPTIONNEL - permet de définir le titre de la boite de sélection de dossier
    '           > (p_s_initialFolderPath) OPTIONNEL - permet de définir une valeur de base au FolderPicker
    '       - Propriété Value (String) - lecture/écriture : permet de définir/surcharger la valeur (chemin) du FilePicker/FolderPicker
    '       - Propriété Caption (String) - lecture/écriture : permet de définir/surcharger la description IHM du FilePicker/FolderPicker
    '       - Propriété Enabled (Boolean) - lecture/écriture : permet de définir l'accessibilité du FilePicker/FolderPicker
    '       - Propriété Visible (Boolean) - lecture/écriture : permet de définir la visibilité du FilePicker/FolderPicker
    '       - Propriété FilterDescr (String) - lecture/écriture : permet de définir/surcharger la description du filtre du FilePicker
    '       - Propriété FilterExt (String) - lecture/écriture : permet de définir/surcharger l'extension du filtre du FilePicker
    '       - Propriété Title (String) - lecture/écriture : permet de définir/surcharger le titre de la boite de sélection de fichier/dossier
    '
    '#######################################################################################
    Option Explicit
     
     
     
    Private WithEvents m_o_lblValue As MSForms.Label
    Private m_o_lblText As MSForms.Label
    Private WithEvents m_o_btnFile As MSForms.CommandButton
    Private WithEvents m_o_btnFolder As MSForms.CommandButton
    Private m_s_filterDescr As String
    Private m_s_filterExt As String
    Private m_s_title As String
     
    Private Property Get MyFSO() As Object      'Scripting.FileSystemObject
    Static s_o_fso As Object    'Scripting.FileSystemObject
        If s_o_fso Is Nothing Then Set s_o_fso = CreateObject("Scripting.FileSystemObject")
        Set MyFSO = s_o_fso
    End Property
     
    Public Sub InitFilePicker(p_o_lblText As MSForms.Label, p_o_lblValue As MSForms.Label, p_o_btn As MSForms.CommandButton, Optional p_s_filterDescr As String = "Tous les fichiers", Optional p_s_filterExt As String = "*.*", Optional p_s_dialogBoxTitle As String = "Sélection du fichier", Optional p_s_initialFilePath As String = vbNullString)
    Dim l_o_ctrl As MSForms.Control
        Set m_o_lblText = p_o_lblText
        Set m_o_lblValue = p_o_lblValue
        Set m_o_btnFile = p_o_btn
        m_s_filterDescr = p_s_filterDescr
        m_s_filterExt = p_s_filterExt
        m_s_title = p_s_dialogBoxTitle
        SetPath p_s_initialFilePath
    End Sub
     
    Public Sub InitFolderPicker(p_o_lblText As MSForms.Label, p_o_lblValue As MSForms.Label, p_o_btn As MSForms.CommandButton, Optional p_s_dialogBoxTitle As String = "Sélection du dossier", Optional p_s_initialFolderPath As String = vbNullString)
        Set m_o_lblText = p_o_lblText
        Set m_o_lblValue = p_o_lblValue
        Set m_o_btnFolder = p_o_btn
        m_s_title = p_s_dialogBoxTitle
        SetPath p_s_initialFolderPath
    End Sub
     
    Public Property Let Value(p_s_path As String)
        SetPath p_s_path
    End Property
    Public Property Get Value() As String
        Value = Strings.Trim(m_o_lblValue.Caption)
    End Property
     
    Public Property Get Caption() As String
        Caption = m_o_lblText.Caption
    End Property
    Public Property Let Caption(p_s_value As String)
        m_o_lblText.Caption = p_s_value
    End Property
     
     
    Public Property Get Enabled() As Boolean
    Dim l_o_btn As MSForms.CommandButton
        If m_o_btnFile Is Nothing Then Set l_o_btn = m_o_btnFolder Else Set l_o_btn = m_o_btnFile
        Enabled = l_o_btn.Enabled
        Set l_o_btn = Nothing
    End Property
    Public Property Let Enabled(p_b_value As Boolean)
    Dim l_o_btn As MSForms.CommandButton
        If m_o_btnFile Is Nothing Then Set l_o_btn = m_o_btnFolder Else Set l_o_btn = m_o_btnFile
        m_o_lblValue.Enabled = p_b_value
        l_o_btn.Enabled = p_b_value
        Set l_o_btn = Nothing
    End Property
     
    Public Property Get FilterDescr() As String
        FilterDescr = m_s_filterDescr
    End Property
    Public Property Let FilterDescr(p_s_value As String)
        m_s_filterDescr = p_s_value
    End Property
     
    Public Property Get FilterExt() As String
        FilterExt = m_s_filterExt
    End Property
    Public Property Let FilterExt(p_s_value As String)
        m_s_filterExt = p_s_value
    End Property
     
    Public Property Get Title() As String
        Title = m_s_title
    End Property
    Public Property Let Title(p_s_value As String)
        m_s_title = p_s_value
    End Property
     
    Public Property Get Visible() As Boolean
    Dim l_o_btn As MSForms.CommandButton
        If m_o_btnFile Is Nothing Then Set l_o_btn = m_o_btnFolder Else Set l_o_btn = m_o_btnFile
        Visible = l_o_btn.Visible
        Set l_o_btn = Nothing
    End Property
    Public Property Let Visible(p_b_value As Boolean)
    Dim l_o_ctrl As MSForms.Control
    Dim l_o_btn As MSForms.CommandButton
        If m_o_btnFile Is Nothing Then Set l_o_btn = m_o_btnFolder Else Set l_o_btn = m_o_btnFile
        Set l_o_ctrl = m_o_lblText: l_o_ctrl.Visible = p_b_value
        Set l_o_ctrl = m_o_lblValue: l_o_ctrl.Visible = p_b_value
        Set l_o_ctrl = l_o_btn: l_o_ctrl.Visible = p_b_value
        Set l_o_ctrl = Nothing
        Set l_o_btn = Nothing
    End Property
     
    Private Function SetPath(p_s_path As String)
        If Not m_o_btnFile Is Nothing Then
            If MyFSO.FileExists(p_s_path) Then m_o_lblValue.Caption = " " & p_s_path Else m_o_lblValue.Caption = vbNullString
        ElseIf Not m_o_btnFolder Is Nothing Then
            If MyFSO.FolderExists(p_s_path) Then m_o_lblValue.Caption = " " & p_s_path Else m_o_lblValue.Caption = vbNullString
        End If
    End Function
     
    Private Sub m_o_btnFile_Click()
        SelectItem
    End Sub
     
    Private Sub m_o_btnFolder_Click()
        SelectItem
    End Sub
     
    Private Sub SelectItem()
        If Not m_o_btnFile Is Nothing Then
            With Application.FileDialog(msoFileDialogFilePicker)
                .AllowMultiSelect = False
                .Title = m_s_title
                .Filters.Clear
                .Filters.Add m_s_filterDescr, m_s_filterExt
                .Show
                If .SelectedItems.Count > 0 Then SetPath .SelectedItems(1)
            End With
        ElseIf Not m_o_btnFolder Is Nothing Then
            With Application.FileDialog(msoFileDialogFolderPicker)
                .AllowMultiSelect = False
                .Title = m_s_title
                .Show
                If .SelectedItems.Count > 0 Then SetPath .SelectedItems(1)
            End With
        End If
    End Sub
     
    Private Sub m_o_lblValue_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        SelectItem
    End Sub
    Code du formulaire de test :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Option Explicit
     
    'propriété servant à gérer l'ensemble des FilePickers/FolderPickers
    Private Property Get FileFolderPickers() As Collection
    Static s_o_coll As VBA.Collection
        If s_o_coll Is Nothing Then Set s_o_coll = New VBA.Collection
        Set FileFolderPickers = s_o_coll
    End Property
     
    'procédure dédiée à initialiser les FilePickers/FolderPickers
    Private Sub InitFileFolderPickers()
    Dim l_o_fp As Cls_FrmTool_FileFolderPicker
        Set l_o_fp = New Cls_FrmTool_FileFolderPicker: l_o_fp.InitFilePicker Me.Lbl_FileText_Excel, Me.Lbl_FilePath_Excel, Me.Btn_SelectFile_Excel, "Fichiers Excel", "*.xls*", "Sélection du fichier Excel", ThisWorkbook.FullName
        FileFolderPickers.Add l_o_fp, "ExcelFile"
        Set l_o_fp = New Cls_FrmTool_FileFolderPicker: l_o_fp.InitFilePicker Me.Lbl_FileText_Any, Me.Lbl_FilePath_Any, Me.Btn_SelectFile_Any
        FileFolderPickers.Add l_o_fp, "AnyFile"
        Set l_o_fp = New Cls_FrmTool_FileFolderPicker: l_o_fp.InitFolderPicker Me.Lbl_FolderText_Fold1, Me.Lbl_FolderPath_Fold1, Me.Btn_SelectFolder_Fold1, "Sélection du dossier de test"
        FileFolderPickers.Add l_o_fp, "Folder1"
        Set l_o_fp = New Cls_FrmTool_FileFolderPicker: l_o_fp.InitFolderPicker Me.Lbl_FolderText_Fold2, Me.Lbl_FolderPath_Fold2, Me.Btn_SelectFolder_Fold2
        FileFolderPickers.Add l_o_fp, "Folder2"
        Set l_o_fp = New Cls_FrmTool_FileFolderPicker: l_o_fp.InitFolderPicker Me.Lbl_FolderText_Fold3, Me.Lbl_FolderPath_Fold3, Me.Btn_SelectFolder_Fold3
        FileFolderPickers.Add l_o_fp, "Folder3"
    End Sub
     
     
    'initialiser les FilePickers/FolderPickers et afficher le formulaire
    Public Sub ShowForm()
        InitFileFolderPickers
        Me.Show
    End Sub
     
     
     
    Private Sub Btn_ChangeCaption_Fold3_Click()
        FileFolderPickers("Folder3").Caption = IIf(FileFolderPickers("Folder3").Caption = "Dossier important !!", "Dossier", "Dossier important !!")
    End Sub
     
    Private Sub Btn_EnableDisable_Excel_Click()
        FileFolderPickers("ExcelFile").Enabled = Not FileFolderPickers("ExcelFile").Enabled
    End Sub
     
    Private Sub Btn_ShowHide_Fold2_Click()
        FileFolderPickers("Folder2").Visible = Not FileFolderPickers("Folder2").Visible
    End Sub
     
    Private Sub Btn_ShowValues_Click()
    Dim l_s_msg As String
        l_s_msg = "Liste des valeurs :"
        l_s_msg = l_s_msg & vbNewLine & "  > Fichier Excel : " & FileFolderPickers("ExcelFile").Value
        l_s_msg = l_s_msg & vbNewLine & "  > Fichier autre : " & FileFolderPickers("AnyFile").Value
        l_s_msg = l_s_msg & vbNewLine & "  > Dossier 1 : " & FileFolderPickers("Folder1").Value
        l_s_msg = l_s_msg & vbNewLine & "  > Dossier 2 : " & FileFolderPickers("Folder2").Value
        l_s_msg = l_s_msg & vbNewLine & "  > Dossier 3 : " & FileFolderPickers("Folder3").Value
        MsgBox l_s_msg, vbInformation, "Info"
    End Sub
    A+
    Fichiers attachés Fichiers attachés

  2. #2
    Membre régulier Avatar de Gorzyne
    Profil pro
    Collégien
    Inscrit en
    Janvier 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2008
    Messages : 328
    Points : 118
    Points
    118
    Par défaut
    celà semble excellent merci j'y jetterais un oeil

Discussions similaires

  1. [XL-2007] Raccourci clavier pour UserForm
    Par franc83 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 29/09/2011, 22h04
  2. ListBox avec Colonnes pour Userform
    Par Galere05 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/07/2011, 14h36
  3. [XL-2003] Macro pour UserForm "Erreur de compilation. Objet requis."
    Par aliasjadawin dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/04/2011, 08h53
  4. function pour userform
    Par did103 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 01/07/2008, 22h09
  5. Bouton de contrôle pour USERFORM.
    Par Jeanvaljean44 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/05/2008, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo