Accueil | Ce site | CV | Excel | Livre d’or | Macros XL4 | Modèles | VBA

 L’objet UserForm

Un UserForm est une zone de dialogue. Il s’agit d’un des objets essentiels de l'interface d’une application. Un UserForm contient des contrôles de différente nature (Textbox, ListBox, CheckBox, RadioButton, ControlButton, …) qui forment la collection Controls du UserForm

À chaque UserForm est associé un module destiné au code définissant les actions à exécuter lorsque survient tel ou tel événement.

Les principaux contrôles

Le terme contrôle est employé pour désigner tous les objets que l’on peut trouver sur un UserForm

TextBox

ListBox

CheckBox

RadioButton

ControlButton

Ce qu’implique l’emploi d’un UserForm

La fonction essentielle d’un UserForm est de permettre à l’utilisateur de fournir des informations réclamées par l’application. Toutes ne sont pas nécessairement indispensables, mais en général, certaines au moins sont nécessaires à la poursuite du traitement.

Quand l’utilisateur clique sur le bouton “OK” (ou un mode de validation équivalent), il est donc impératif de vérifier qu’aucune information nécessaire ne manque. Pour ce faire, 2 méthodes, qui se complètent, peuvent être employées :

J’ai l’habitude de regrouper l’ensemble des appels à la fonction Controle dans un Sub que je nomme “ControleInfos”. En voici 2 exemples :

Le premier correspond à un UserForm très simple où la vérification ne concerne que 2 TextBox, nommés “TNom” et “TClef”. La routine “ControleInfos” consiste simplement à vérifier s’ils ont été toux deux renseignés.

Private Sub ControleInfos()
    Resultat = Controle(TNom = "", "le nom du " & Tiers & ".", TNom)
    If Resultat Then Resultat = Controle(TClef = "", "le mot-clef.", TClef)
End Sub

Le second exemple est plus complexe

Private Sub ControleInfos()
    Resultat = Controle(TDate = "", "la date.", TDate)
    If Resultat Then Resultat = Controle(Not IsDate(TDate), , TDate, "La date indiquée est incorrecte. Elle doit être au format ""jj/mm/aa"".")
    If Resultat Then Resultat = Controle(TMontant = "", "le montant.", TMontant)
    If Resultat Then Resultat = Controle(TMontant <= 0, , TMontant, "Il n'est pas possible d'effectuer un règlement dont le montant est négatif ou nul !")
    If Resultat Then Resultat = Controle(TLibelle = "", "le libellé.", TLibelle)
    ' Controle que le mode de règlement a été précisé
    If Resultat Then Resultat = Controle(ModeReglement = "", "le mode de règlement.")
    If Resultat Then Resultat = Controle(NbFacSelectionnees = 0, , , "Il est impératif d'indiquer à quelle facture correspond le règlement." _
    & Chr(10) & Chr(10) & "NB - Il existe un autre traitement, pour les règlements comptant.")
End Sub

Le code typiquement associé à un UserForm

Par convention, je nomme “BAnnuler” et “BOK” les boutons “Annuler” et “OK”, en général présents sur un UserForm (le bouton “OK” pouvant parfois être remplacé par un bouton “Suite” et un bouton “Fin”).

Private Sub BAnnuler_Click()
    Unload Me
End Sub
 
Private Sub BOK_Click()
    ControleInfos
        If Resultat Then
            ReportDonnees
            Unload Me
        End If
End Sub