Sommaire > 4. Création d'une feuille VBA

4. Création d'une feuille VBA

Les feuilles VBA sont des zones sur lesquelles on place des contrôles tels que des cases à cocher, des boutons à options, des zones de texte, des zones de liste, des boutons de commande, ... . Ces zones forment une interface qui permet une interaction simple et conviviale entre l'utilisateur final et le programme VBA.

Les actions de l'utilisateur, appelées événements, comme un clic de souris ou la modification de la valeur d'une zone de texte, sont automatiquement repérées par le programme. On associe du code à un événement donné pour que ce code s'exécute lorsque l'événement correspondant survient. On parle alors de procédure événementielle.

L'exploitation des feuilles consiste à fournir les informations (entrées par l'utilisateur sur la feuille VBA) à une procédure de code. Dès que les informations fournies ont été validées par l'utilisateur, elles sont exploitées par le programme.

4.1. Calculette en EURO

Cet exemple peut fonctionner tel quel dans Excel, Word ou PowerPoint. Moyennant quelques adaptations, on peut également l'utiliser dans un formulaire d'Access.

4.1.1. La fenêtre « UserForm »

Le développement de la feuille se fait dans la fenêtre « UserForm » de Visual Basic Editeur ou VBE. Pour créer une nouvelle feuille :

  • 1 Lancer VBE
    dans Word ou Excel : Visual Basic Editeur / Macro / Outils
  • 2 UserForm / Insertion
    La feuille intitulée « UserForm1 » et la boîte à outils sont affichées dans la fenêtre de développement.
  • 3 Dans la fenêtre « Propriétés » de la feuille, on modifie les propriétés
    Name : « frmCalculette »
    Caption : « Calculette EURO »
    La propriété « Name » est le nom utilisé dans le code pour faire référence à cette feuille.
    La propriété « Caption » correspond au libellé de la feuille VBA.

  • 4 La boîte à outils contient les contrôles qu'on peut placer sur la feuille. Pour afficher ou masquer la boîte à outils, il suffit de choisir le bouton ou la commande : Boîte à outils / Affichage.

4.1.2. Contrôles standards de la boîte à outils :

  1. Sélectionner des objets
    Cet outil est le seul élément de la boîte à outils ne traçant pas un contrôle. Une fois sélectionné, il permet de déplacer ou de redimensionner un contrôle précédemment tracé sur une feuille.
  2. Étiquette (Label)
    Permet d'insérer une chaîne de texte non modifiable par l'utilisateur.
  3. Zone de texte (TextBox)
    Contient du texte insérable ou modifiable par l'utilisateur.
  4. Liste modifiable (ComboBox)
    Contrôle réunissant les caractéristiques de la zone de liste (voir point 5) et de la zone de texte. L'utilisateur peut choisir un élément dans la liste ou entrer une chaîne dans la zone de texte.
  5. Zone de liste (ListBox)
    Permet d'afficher une liste d'éléments que l'utilisateur peut sélectionner. Il est possible de faire défiler la liste si tous les éléments ne peuvent être affichés simultanément.
  6. Case à cocher (CheckBox)
    Crée une case que l'utilisateur peut facilement sélectionner pour activer ou désactiver un élément ou pour sélectionner plusieurs options parmi des choix multiples.
  7. Case d'option (OptionButton)
    Permet d'afficher plusieurs choix, l'utilisateur ne pouvant en sélectionner qu'un seul.
  8. Bouton à bascule (ToggleButton)
    Crée un bouton basculant entre deux positions.
  9. Cadre (Frame)
    Permet de créer un groupe de contrôles graphiques. Pour grouper des contrôles, placer d'abord l'élément « Frame », puis faire glisser des contrôles à l'intérieur du cadre.
  10. Bouton de commande (CommandButton)
    Crée un bouton que l'utilisateur peut sélectionner pour exécuter une commande.
  11. Étiquette d'onglet (TabStrip)
    Permet de définir plusieurs pages pour la même zone d'une fenêtre ou d'une boîte de dialogue de l' application.
  12. Objet multipage (MultiPage)
    Présente en un même ensemble plusieurs écrans d'informations.
  13. Barre de défilement (ScrollBar)
    Outil graphique permettant de parcourir rapidement une longue liste d'éléments ou une grande quantité d'informations, d'indiquer une position sur une échelle, d'entrer des données ou d'indiquer une vitesse ou une quantité.
  14. Bouton rotatif (SpinButton)
    Contrôle de compteur utilisable avec un autre contrôle pour incrémenter ou décrémenter des nombres. Il permet également de faire défiler vers l'avant et vers l'arrière une plage de valeurs ou une liste d'éléments.
  15. Dessin (Image)
    Affiche une image sur la feuille à partir d'une image, d'une icône ou d'un métafichier. Les images affichées dans un contrôle Image ont un usage purement décoratif.

4.1.3. Placement des contrôles sur la feuille :

  • 1 Dans la boîte à outils, on clique sur le contrôle voulu.
  • 2 On déplace le curseur au-dessus de la feuille. Le pointeur se transforme en croix et une image représentant le type de contrôle lui est accolée.
  • 3 On dessine alors le contrôle sur la feuille. On peut le déplacer à volonté ou le redimensionner en utilisant les poignées de redimensionnement situées autour du cadre de sélection.
  • 4 On peut alors modifier les propriétés de ce contrôle dans la fenêtre « Propriétés ». Modifier la propriété Caption : « Montant : »

Voici les différents contrôles utilisés et leurs propriétés :

La propriété « Name » est le nom utilisé dans le code pour faire référence au contrôle et la propriété « Caption » correspond au libellé du contrôle. Les valeurs de ces propriétés sont indiquées soit dans la fenêtre « Propriétés » soit par du code, par exemple :

lblDevise1.Caption = "BEF"

La propriété « Value » détermine la valeur d'un contrôle. Elle accepte des valeurs qui varient d'un contrôle à l'autre : elle peut correspondre à un état (activé ou non) ou à un contenu (numérique ou chaîne de caractères). Dans le cas des cases à option, on détermine le bouton qui sera actif au démarrage de la feuille VBA : le bouton « en EURO » dans notre exemple.

La propriété « Default » indique si un contrôle « Bouton de commande » est ou non le bouton par défaut de la feuille. Lorsqu'un bouton de commande est le bouton par défaut, la frappe de la touche « Entrée » déclenche l'événement « click » du bouton, à condition qu'aucun autre bouton de commande n'ait le « focus ». Le contrôle qui a le focus est le contrôle réceptif aux événements utilisateurs : soit par la souris ou le clavier.

La propriété « Cancel » indique si un contrôle « Bouton de commande » est ou non le bouton « Annuler » de la feuille. Lorsqu'un bouton de commande est le bouton « Annuler », la frappe de la touche « Esc » déclenche l'événement « click » du bouton, qu'il ait ou non le focus.

La propriété « TextAlign » spécifie la façon dont un texte est aligné dans un contrôle. Dans notre exemple, les valeurs des contrôles « txtMontant » et « lblRésultat » sont alignées à droite (3 - fmTextAlignRight).

Contrôle Name Caption TextAlign Value
UserForm1 frmCalculette CalculetteEURO    
Label1   Montant :    
TextBox1 txtMontant   3 0
Label2 lblDevise1 BEF    
OptionButton1 optEuro En Euro   True
OptionButton2 optBEF En BEF   False
Label3   Résultat :    
Label4 lblRésultat   3  
Label5 lblDevise2 EUR    
Default Cancel
CommandButton1 cmdCalculer Calculer True  
CommandButton2 cmdQuitter Quitter   True

4.1.4. Les procédures événementielles

Elles peuvent être générées de différentes façons. Elles répondent toujours à la même syntaxe :

Private Sub Contrôle_Evénement()
    Instructions
End Sub

Pour générer une procédure événementielle :

  • 1 Se placer dans la fenêtre « UserForm »
  • 2 Sélectionner un contrôle, puis choisir
  • 3 Code / Affichage
    ou
    Code dans le menu contextuel


    Si la procédure événementielle existe déjà, le curseur est placé sur la première instruction de cette procédure.
    Si la procédure n'existe pas, les instructions suivantes sont générées; il suffit alors de compléter le code.
Private Sub cmdCalculer_Click()

End Sub

La zone de liste déroulante affiche l'ensemble des événements qui peuvent être détectés sur le contrôle sélectionné.

Voici le code à introduire :

Private Sub UserForm_Activate()
    txtMontant.SetFocus
End Sub

Private Sub txtMontant_Enter()
    With txtMontant
        .SelStart = 0
        .SelLength = Len(txtMontant)
    End With
End Sub

Private Sub txtMontant_AfterUpdate()
    Calcul
End Sub

Private Sub cmdCalculer_Click()
    Calcul
    txtMontant.SetFocus
End Sub

Private Sub cmdQuitter_Click()
    Unload Me
End Sub

Private Sub optEuro_Click()
    lblDevise1.Caption = "BEF"
    lblDevise2.Caption = "EUR"
    Calcul
End Sub

Private Sub optBEF_Click()
    lblDevise1.Caption = "EUR"
    lblDevise2.Caption = "BEF"
    Calcul
End Sub

Sub Calcul()
    If IsNumeric(txtMontant) Then
      If optEuro Then
        lblRésultat.Caption = Arrondi(txtMontant / 40.3399, 2)
      Else
        lblRésultat.Caption = Arrondi(txtMontant * 40.3399, 0)
      End If
    Else
      MsgBox "Le txtMontant n'est pas numérique !"
      txtMontant.SetFocus
    End If
End Sub

'   Arrondi d'Excel
'   (inutile si la calculette est dans Excel)
'       Nombre = le nombre à arrondir
'       NoChiffres = le nombre de décimales (doit être >= 0)
Function Arrondi(Nombre As Double, _
                 Optional NoChiffres As Byte) As Double
    If IsMissing(NoChiffres) Then NoChiffres = 0
    If Not IsNumeric(Nombre) Or _
       Not IsNumeric(NoChiffres) Then Exit Function
    NoChiffres = Abs(NoChiffres)
    Arrondi = Nombre * 10 ^ NoChiffres + 0.5
    Arrondi = Int(Arrondi) / 10 ^ NoChiffres
End Function

4.1.5. Appel de feuille VBA

Pour pouvoir utiliser cette calculette, il faut créer une macro dans une feuille de module.

  • 1 Module / Insertion, et introduire le code suivant :
Sub Calculette()
    frmCalculette.Show
End Sub

4.2. Utilisation du « contrôle calendrier »

4.2.1. La fenêtre « UserForm »

Créer deux nouvelles feuilles et modifier les propriétés :

Feuille Name Caption
UserForm1 FrmSaisieDate Entrer une Date
UserForm2 FrmCalendrier  



4.2.2. Ajout d'un contrôle de la boîte à outils :

Pour ajouter l'outil « Calendrier » à la boîte à outils :

  • 1 Afficher la boîte à outils (choisir le bouton ou la commande : Boîte à outils / Affichage)
  • 2 Contrôles supplémentaires / Outils, choisir : « Contrôle calendrier 8.0 » dans la liste suivante, puis valider.

4.2.3. Placement des contrôles sur la feuille :

Voici les différents contrôles utilisés et leurs propriétés :

La propriété « ControlTipText » spécifie le texte qui apparaît lorsque l'utilisateur maintient brièvement le pointeur de la souris sur un contrôle sans cliquer.

Feuille FrmSaisieDate

Contrôle Name ControlTipText
TextBox1 txtDate Double-clic pour choisir une date dans le calendrier
Default Cancel
CommandButton1 cmdOk Ok True  
CommandButton2 cmdAnnuler Annuler   True

Feuille FrmCalendrier

Contrôle Name Caption
Calendar1 Calendrier Choisir une date
Default Cancel
CommandButton1 cmdChDate Choisir une date True  
CommandButton2 cmdAnnuler Annuler   True

4.2.4. Les procédures événementielles

Voici le code à introduire dans la feuille FrmSaisieDate :

Private Sub UserForm_Initialize()
    txtDate.Value = Format(Date, "dd/mm/yyyy")
    UserForm_Activate
End Sub

Private Sub UserForm_Activate()
    With txtDate
        .SetFocus
        .SelStart = 0
        .SelLength = Len(txtDate)
    End With
End Sub

Private Sub txtDate_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    frmCalendrier.Show
End Sub

Private Sub cmdOK_Click()
    Selection = DateValue(txtDate.Value)
    Unload Me
End Sub

Private Sub cmdAnnuler_Click()
    Unload Me
End Sub

Voici le code à introduire dans la feuille FrmCalendrier :

Private Sub UserForm_Initialize()
    Calendrier.Today
End Sub

Private Sub Calendrier_DblClick()
    cmdChDate_Click
End Sub

Private Sub cmdChDate_Click()
    frmSaisieDate.txtDate.Value = Calendrier.Value
    Unload Me
End Sub

Private Sub cmdAnnuler_Click()
    Unload Me
End Sub

4.2.5. Appel de feuille VBA

Sub SaisieDate()
    frmSaisieDate.Show
End Sub

Sommaire - Début de cette page
Page suivante: 5. Les barres de commandes

Imprimer cet article