Skip to content

Latest commit

 

History

History
541 lines (396 loc) · 18.6 KB

s6-vba-4.md

File metadata and controls

541 lines (396 loc) · 18.6 KB

[Séance 5 - Tableaux et Enregistrements](s5-vba-3.md) [Retour au sommaire](../README.md)

Séance 6 - VBA: Eléments visuels


Les contrôles

Un objet est un type d'élément d'interface utilisateur que vous créez sur un formulaire . En fait, le formulaire lui-même est un objet. Chaque contrôle se compose de trois éléments importants :

  • Les propriétés qui décrivent l'objet,
  • les méthodes, qui permettent à l'objet de faire une action
  • Les événements sont ce qui se produit lorsqu'un objet fait une action.

Propriétés du contrôle

Tous les objets peuvent être déplacés, redimensionnés ou personnalisés en définissant leurs propriétés. Une propriété est une valeur ou une caractéristique détenue par un objet.

Pour définir une propriété, utilisez la syntaxe suivante :

Objet.Propriété = Valeur

Où:

  • Objet est le nom de l'objet que vous personnalisez.
  • Propriété est la caractéristique que vous souhaitez modifier.
  • Valeur est le nouveau paramètre de la propriété.

Par exemple, pour définir le titre du formulaire:

Form1.Caption = "Hello"

Vous pouvez définir n'importe quelle propriété du formulaire à l'aide de la fenêtre Propriétés. La plupart des propriétés peuvent être définies ou lues pendant l'exécution de l'application.

Rappel des affichages et saisies de données

Voir la section Les fenêtres prédéfinies de la séance 3.


Les contrôles de base

Les contrôles de base sont les éléments visuels les plus simples. Ils peuvent être de la forme suivante :

Zone de texte

La zone de texte (appelée TextBox en VBA) permet de saisir une information.

Propriétés

Voici les principales propriétés de la zone de texte :

  • Text : permet de récupérer ou de modifier le texte de la zone de texte.
  • Font : permet de récupérer ou de modifier la police de caractères de la zone de texte.
  • Font.Size : permet de récupérer ou de modifier la taille de la police de caractères de la zone de texte.

Pour une liste de plus de propriétés, voir la page TextBox Object.

La zone de texte peut être créée à l'aide de la méthode Add .

On peut définir la taille de la zone de texte en utilisant les paramètres Width et Height.

Sub exemple_zoneTexte()
    'Déclaration de la zone de texte'
    Dim zone As TextBox
    'Création de la zone de texte'
    Set zone = ActiveSheet.TextBoxes.Add(Width:=100, Height:=20)
    'Modification du texte de la zone de texte'
    zone.Text = "Bonjour" 
End Sub

Lors de l'exécution de la macro, la zone de texte ci-dessous apparaît dans la feuille active.

![Image zone text](screenshots/s6-zone-text.png)

Bouton

Le bouton (appelé Button en VBA) permet d'exécuter une action.

Propriétés
  • Name : permet de récupérer ou de modifier le nom du bouton.
  • Caption : permet de récupérer ou de modifier le texte du bouton.
  • Enabled : permet de récupérer ou de modifier l'état du bouton. Si la valeur est True, le bouton est actif. Si la valeur est False, le bouton est désactivé.
Sub exemple_bouton()
    'Déclaration du bouton'
    Dim bouton As Button
    'Création du bouton' 
    Set bouton = ActiveSheet.Buttons.Add(Width:=100, Height:=20) 
    'Modification du texte du bouton'
    bouton.Caption = "Cliquez ici"
End Sub

Lors de l'exécution de la macro, le bouton ci-dessous apparaît dans la feuille active.

![Image bouton](screenshots/s6-bouton.png)

Case à cocher

Les cases à cocher (CheckBox En VBA) permettent à l'utilisateur de sélectionner une ou plusieurs options dans une liste.

Les cases à cocher ne peuvent retourner que deux valeurs :

  • cochée (True)
  • non cochée (False)

À chaque clic de l’utilisateur, le contrôle passe de l’état coché à l’état non coché, et inversement.

Propriétés

Les principales propriétés du contrôle CheckBox sont :

  • Name : permet de récupérer ou de modifier le nom de la case à cocher.
  • Caption : permet de récupérer la valeur de l’intitulé dans la boîte de dialogue.
  • Value : permet de récupérer l’indication cochée (True) ou non cochée (False).
  • Visible : permet d'afficher ou non l'objet dans la boîte de dialogue.
  • Enabled : permet de rendre l'objet accessible (True) ou non (False).
Sub exemple_caseACocher()
    'Déclaration de la case à cocher'
    Dim caseACocher As CheckBox
    'Création de la case à cocher'
    Set caseACocher = ActiveSheet.CheckBoxes.Add(Width:=100, Height:=20)
    'Modification du texte de la case à cocher'
    caseACocher.Caption = "Cocher"
    'Modification de l'état de la case à cocher'
    caseACocher.Value = True
End Sub

Lors de l'exécution de la macro, la case à cocher ci-dessous apparaît dans la feuille active.

![Image case à cocher](screenshots/s6-cocher.png)

Liste à choix multiple

La liste à choix multiple (appelé ListBox en VBA ) permet à l'utilisateur de sélectionner une ou plusieurs options dans une liste.

Propriétés
  • Name : permet de récupérer ou de modifier le nom de la liste à choix multiple.
  • List : permet de récupérer ou de modifier la liste des options de la liste à choix multiple.
  • Value : permet de récupérer ou de modifier la valeur de l'option sélectionnée dans la liste à choix multiple.

Les arguments Left et Top permettent de définir la position de la liste à choix multiple.

Ils sont obligatoires lors de la création de la liste à choix multiple.

Sub exemple_listeChoixMultiple()
    'Déclaration de la liste à choix multiple'
    Dim liste As ListBox
    'Création de la liste à choix multiple'
    Set liste = ActiveSheet.ListBoxes.Add(Left:=20, Top:=20, Width:=100, Height:=70)
    'Modification de la liste des options de la liste à choix multiple'
    liste.List = Array("Option 1", "Option 2", "Option 3")
End Sub

Lors de l'exécution de la macro, la liste à choix multiple ci-dessous apparaît dans la feuille active.

![Image liste à choix multiple](screenshots/s6-liste-multiple.png)

Liste déroulante

La liste déroulante (appelé ComboBox en **VBA`) permet à l'utilisateur de sélectionner une option dans une liste.

Propriétés
  • Name : permet de récupérer ou de modifier le nom de la liste déroulante.
  • List : permet de récupérer ou de modifier la liste des options de la liste déroulante.
  • Value : permet de récupérer ou de modifier la valeur de l'option sélectionnée dans la liste déroulante.
Sub exemple_listeDeroulante()
    'Déclaration de la liste déroulante'
    Dim liste As DropDown
    'Création de la liste déroulante'
    Set liste = ActiveSheet.DropDowns.Add(Left:=20, Top:=20, Width:=50, Height:=50)
    'Modification de la liste des options de la liste déroulante'
    liste.List = Array("Option 1", "Option 2", "Option 3")
    'Modification de la valeur de l'option sélectionnée dans la liste déroulante'
    liste.Value = "Option 2"
End Sub

Si jamais l'on souhaite rajouter des options à une liste déroulante, il est possible de faire appel à la fonction AddItem

Sub exemple_listeDeroulante()
    'Déclaration de la liste déroulante'
    Dim liste As DropDown
    'Création de la liste déroulante'
    Set liste = ActiveSheet.DropDowns.Add(Left:=20, Top:=20, Width:=50, Height:=50)
    'Modification de la liste des options de la liste déroulante'
    liste.List = Array("Option 1", "Option 2", "Option 3")
    'Modification de la valeur de l'option sélectionnée dans la liste déroulante'
    liste.Value = "Option 2"
    'Ajout d'une option à la liste déroulante'
    liste.AddItem "Option 4"
End Sub

Les formulaires

Les formulaires sont des boîtes de dialogue personnalisées qui permettent à l'utilisateur de saisir des données.

Création d'un formulaire

Pour créer un formulaire, il faut utiliser la méthode Add de la collection UserForms.

Sub exemple_formulaire()
    'Déclaration du formulaire'
    Dim formulaire As UserForm
    'Création du formulaire'
    Set formulaire = Application.UserForms.Add(Left:=20, Top:=20)
    'Modification du titre du formulaire'
    formulaire.Caption = "Mon formulaire"
End Sub

Ajout de contrôles

Pour ajouter un contrôle à un formulaire, il faut utiliser la méthode Add de la collection correspondante au type de contrôle que l'on souhaite ajouter.

Sub exemple_formulaire()
    'Déclaration du formulaire'
    Dim formulaire As UserForm
    'Déclaration de la zone de texte'
    Dim zoneTexte As TextBox
    'Création du formulaire'
    Set formulaire = Application.UserForms.Add
    'Modification du titre du formulaire'
    formulaire.Caption = "Mon formulaire"
    'Création de la zone de texte'
    Set zoneTexte = formulaire.TextBoxes.Add(Width:=100, Height:=20)
    'Modification du nom de la zone de texte'
    zoneTexte.Name = "zoneTexte"
    'Modification du texte de la zone de texte'
    zoneTexte.Text = "Texte"
End Sub

Exemples

Exemple 1 : Addition

Dans cet exemple, nous allons créer un formulaire permettant de saisir deux nombres et de calculer leur somme.

Sub exemple_addition()
    'Déclaration du formulaire'
    Dim formulaire As UserForm
    'Déclaration de la première zone de texte'
    Dim zone1 As TextBox
    'Déclaration de la seconde zone de texte'
    Dim zone2 As TextBox
    'Déclaration du bouton'
    Dim bouton As Button
    'Déclaration de la zone de texte contenant le résultat'
    Dim zoneResultat As TextBox
    
    'Création du formulaire'
    Set formulaire = Application.UserForms.Add
    'Modification du titre du formulaire'
    formulaire.Caption = "Addition"
    
    'Création de la première zone de texte'
    Set zone1 = formulaire.TextBoxes.Add(Width:=100, Height:=20)
    'Modification du nom de la première zone de texte'
    zone1.Name = "zone1"
    'Modification du texte de la première zone de texte'
    zone1.Text = "0"
    
    'Création de la seconde zone de texte'
    Set zone2 = formulaire.TextBoxes.Add(Left:=100, Top:=150, Width:=100, Height:=20)
    'Modification du nom de la seconde zone de texte'
    zone2.Name = "zone2"
    'Modification du texte de la seconde zone de texte'
    zone2.Text = "0"
    
    'Création du bouton'
    Set bouton = formulaire.Buttons.Add(Left:=100, Top:=200, Width:=100, Height:=20)
    'Modification du nom du bouton'
    bouton.Name = "bouton"
    'Modification du texte du bouton'
    bouton.Caption = "Calculer"
    
    'Création de la zone de texte contenant le résultat'
    Set zoneResultat = formulaire.TextBoxes.Add(Left:=100, Top:=250, Width:=100, Height:=20)
    'Modification du nom de la zone de texte contenant le résultat' 
    zoneResultat.Name = "zoneResultat"
    'Modification du texte de la zone de texte contenant le résultat'
    zoneResultat.Text = "0"
    
    'Affichage du formulaire'
    formulaire.Show 
End Sub

Exemple 2 : Un convertisseur de devises

Dans cet exemple, nous allons créer un formulaire permettant de saisir un montant dans une devise et de le convertir dans une autre devise. Les devises proposées seront:

  • l'euro
  • le dollar américain
  • la livre sterling.
Sub exemple_convertisseurDevises()
    Dim formulaire As UserForm 'Déclaration du formulaire'
    Dim zone1 As TextBox 'Déclaration de la première zone de texte'
    Dim zone2 As TextBox 'Déclaration de la seconde zone de texte'
    Dim liste1 As DropDown 'Déclaration de la première liste déroulante'
    Dim liste2 As DropDown 'Déclaration de la seconde liste déroulante'
    Dim bouton As Button 'Déclaration du bouton'
    Dim zoneResultat As TextBox 'Déclaration de la zone de texte contenant le résultat'
    
    Set formulaire = Application.UserForms.Add 'Création du formulaire'
    formulaire.Caption = "Convertisseur de devises" 'Modification du titre du formulaire'
    
    Set zone1 = formulaire.TextBoxes.Add(Width:=100, Height:=20) 'Création de la première zone de texte'
    zone1.Name = "zone1" 'Modification du nom de la première zone de texte'
    zone1.Text = "0" 'Modification du texte de la première zone de texte'
    
    Set zone2 = formulaire.TextBoxes.Add(Left:=100, Top:=150, Width:=100, Height:=20) 'Création de la seconde zone de texte'
    zone2.Name = "zone2" 'Modification du nom de la seconde zone de texte'
    zone2.Text = "0" 'Modification du texte de la seconde zone de texte'
    
    Set liste1 = formulaire.DropDowns.Add(Left:=100, Top:=200, Width:=100, Height:=20) 'Création de la première liste déroulante'
    liste1.Name = "liste1" 'Modification du nom de la première liste déroulante'
    liste1.List = Array("Euro", "Dollar", "Livre") 'Modification de la liste des options de la première liste déroulante'
    liste1.Value = "Euro" 'Modification de la valeur de l'option sélectionnée dans la première liste déroulante'
    
    Set liste2 = formulaire.DropDowns.Add(Left:=100, Top:=250, Width:=100, Height:=20) 'Création de la seconde liste déroulante'
    liste2.Name = "liste2" 'Modification du nom de la seconde liste déroulante'
    liste2.List = Array("Euro", "Dollar", "Livre") 'Modification de la liste des options de la seconde liste déroulante'
    liste2.Value = "Euro" 'Modification de la valeur de l'option sélectionnée dans la seconde liste déroulante'

    Set bouton = formulaire.Buttons.Add(Left:=100, Top:=300, Width:=100, Height:=20) 'Création du bouton'

    Set zoneResultat = formulaire.TextBoxes.Add(Left:=100, Top:=350, Width:=100, Height:=20) 'Création de la zone de texte contenant le résultat'

    formulaire.Show 'Affichage du formulaire'

End Sub

Nous allons maintenant ajouter le code permettant de calculer le résultat de la conversion.

Sub bouton_Click()
    Dim zone1 As TextBox 'Déclaration de la première zone de texte'
    Dim zone2 As TextBox 'Déclaration de la seconde zone de texte'
    Dim liste1 As DropDown 'Déclaration de la première liste déroulante'
    Dim liste2 As DropDown 'Déclaration de la seconde liste déroulante'
    Dim zoneResultat As TextBox 'Déclaration de la zone de texte contenant le résultat'
    
    Set zone1 = UserForm1.Controls("zone1") 'Récupération de la première zone de texte'
    Set zone2 = UserForm1.Controls("zone2") 'Récupération de la seconde zone de texte'
    Set liste1 = UserForm1.Controls("liste1") 'Récupération de la première liste déroulante'
    Set liste2 = UserForm1.Controls("liste2") 'Récupération de la seconde liste déroulante'
    Set zoneResultat = UserForm1.Controls("zoneResultat") 'Récupération de la zone de texte contenant le résultat'
    
    If liste1.Value = "Euro" Then
        If liste2.Value = "Euro" Then
            zoneResultat.Text = zone1.Text
        ElseIf liste2.Value = "Dollar" Then
            zoneResultat.Text = zone1.Text * 1.1
        ElseIf liste2.Value = "Livre" Then
            zoneResultat.Text = zone1.Text * 0.9
        End If
    ElseIf liste1.Value = "Dollar" Then
        If liste2.Value = "Euro" Then
            zoneResultat.Text = zone1.Text * 0.9
        ElseIf liste2.Value = "Dollar" Then
            zoneResultat.Text = zone1.Text
        ElseIf liste2.Value = "Livre" Then
            zoneResultat.Text = zone1.Text * 0.8
        End If
    ElseIf liste1.Value = "Livre" Then
        If liste2.Value = "Euro" Then
            zoneResultat.Text = zone1.Text * 1.1
        ElseIf liste2.Value = "Dollar" Then
            zoneResultat.Text = zone1.Text * 1.2
        ElseIf liste2.Value = "Livre" Then
            zoneResultat.Text = zone1.Text * 1

        End If
    End If
End Sub
    

Une façon plus claire de faire ce code est d'utiliser un **Select Case`:

Sub bouton_Click()
    Dim zone1 As TextBox 'Déclaration de la première zone de texte'
    Dim zone2 As TextBox 'Déclaration de la seconde zone de texte'
    Dim liste1 As DropDown 'Déclaration de la première liste déroulante'
    Dim liste2 As DropDown 'Déclaration de la seconde liste déroulante'
    Dim zoneResultat As TextBox 'Déclaration de la zone de texte contenant le résultat'
    
    Set zone1 = UserForm1.Controls("zone1") 'Récupération de la première zone de texte'
    Set zone2 = UserForm1.Controls("zone2") 'Récupération de la seconde zone de texte'
    Set liste1 = UserForm1.Controls("liste1") 'Récupération de la première liste déroulante'
    Set liste2 = UserForm1.Controls("liste2") 'Récupération de la seconde liste déroulante'
    Set zoneResultat = UserForm1.Controls("zoneResultat") 'Récupération de la zone de texte contenant le résultat'
    
    Select Case liste1.Value
        Case "Euro"
            Select Case liste2.Value
                Case "Euro"
                    zoneResultat.Text = zone1.Text
                Case "Dollar"
                    zoneResultat.Text = zone1.Text * 1.1
                Case "Livre"
                    zoneResultat.Text = zone1.Text * 0.9
            End Select
        Case "Dollar"
            Select Case liste2.Value
                Case "Euro"
                    zoneResultat.Text = zone1.Text * 0.9
                Case "Dollar"
                    zoneResultat.Text = zone1.Text
                Case "Livre"
                    zoneResultat.Text = zone1.Text * 0.8
            End Select
        Case "Livre"
            Select Case liste2.Value
                Case "Euro"
                    zoneResultat.Text = zone1.Text * 1.1
                Case "Dollar"
                    zoneResultat.Text = zone1.Text * 1.2
                Case "Livre"
                    zoneResultat.Text = zone1.Text * 1
            End Select
    End Select
End Sub