Cours VBA - UserForm - Les contrôles -

 

 

La boite à outils affiche les contrôles standard de VBA.

 

 

 

Sélection

Cet outil permet de sélectionner, de déplacer et de redimensionner les contrôles créés sur l'UserForm.

 

Label ou étiquette

Cet outil permet de créer une zone de texte non modifiable par l'utilisateur.

 

 

Dans cet exemple, 2 étiquettes ont été créées. Par défaut leur nom était Label1 et Label2. Pour plus de confort, elles ont été renommées Label_Classe et Label_Date. La valeur de Label_Class étant fixe, elle a été saisie dans sa propriété Caption. La valeur de Label_Date étant variable, elle peut être définie dans l'évènement Initialize de l'UserForm (renommé MaBoite).

 

Private Sub UserForm_Initialize()

    Label_Date.Caption = Date

End Sub

 

 

 

TextBox ou zone de texte

Cet outil permet de créer une zone de texte pouvant être saisie ou modifiée par l'utilisateur. Une zone de texte peut faire référence à une cellule par la propriété ControlSource.

 

 

 

Si l'utilisateur modifie la zone de texte, la valeur de la cellule A1 sera modifiée.

 

 

 

La valeur de la cellule A1 peut également prendre la valeur de la zone de texte par une procédure événementielle TextBox_Change.

 

Private Sub TextBox1_Change()

    Range("A1") = TextBox1

End Sub

 

 

 

ListBox ou zone de liste

Une zone de liste permet d'afficher une liste d'éléments sélectionnables par l'utilisateur.

Reprenons la liste d'élèves.

 

 

Les listes peuvent de remplir par la propriété RowSource de l'objet ListBox.

 

 

La méthode AddItem d'un objet ListBox permet d'ajouter un élément à la liste. La syntaxe est ListBox.AddItem "Texte", Index. Index correspond à l'emplacement du nouvel élément dans la liste. L'index du premier élément d'une liste a pour valeur 0. Si l'index n'est pas indiqué, le nouvel élément sera placé à la fin de la liste.

 

'La liste peut se remplir par la procédure suivante

Private Sub UserForm_Initialize()

    'Appel de la procédure Liste située dans un module

    Liste

End Sub

 

Sub Liste()    

    Dim i As Integer

    For i = 1 To 14

        MaBoite.ListBox1.AddItem Range("A1").Offset(i)

    Next i

End Sub

 

 

'Ajout d'un élément situé en 2ème position

    MaBoite.AddItem "FRED", 2

 

 

 

La propriété ListCount d'une zone de liste renvoie le nombre d'éléments qu'elle contient, la propriété Value sa valeur et la propriété ListIndex son index.

 

 

 

Private Sub ListBox1_Change()    

    Dim i As Integer, j As Integer

    Dim Val As String

    i = ListBox1.ListCount 'renvoie 15

    j = ListBox1.ListIndex  'renvoie 4

    Val = ListBox1.Value    'renvoie "VALERIE"

End Sub

 

Il est également possible de remplir une zone de liste en utilisant un tableau et la propriété List.

 

Sub Liste()    

    Dim i As Integer

    Dim List_Eleve(1 To 14) As String

    For i = 1 To 14

        List_Eleve(i) = Range("A1").Offset(i)

    Next i

    MaBoite.ListBox1.List = List_Eleve

End Sub

 

La suppression d'un élément d'une liste se fait par la méthode RemoveItem. La syntaxe est ListBox.RemoveItem Index. Index correspond à l'élément à supprimer.

 

 

 

    Dim i As Integer    

    i = ListBox1.ListIndex  'renvoie 4

    ListBox1.RemoveItem i

 

 

 

La suppression de tous les éléments d'une liste se fait par la méthode Clear. La syntaxe est ListBox.Clear.

 

Par défaut, l'utilisateur ne peut sélectionner qu'un seul élément de la liste. Pour permettre la sélection de plusieurs éléments, la propriété MultiSelect de la zone de texte doit être sur 1 ou sur 2.

 

 

La propriété Selected(Item) détermine si un élément est sélectionné ou non. L'exemple suivant va copier les éléments sélectionnés de la ListBox1 dans la ListBox2.

 

 

    Dim i As Integer    

    For i = 0 To ListBox1.ListCount - 1

        If ListBox1.Selected(i) = True Then

            ListBox2.AddItem ListBox1.List(i)

        End If

    Next i

 

 

 

Une zone de liste peut contenir plusieurs colonnes. Le nombre de colonnes est défini par la propriété ColumnCount.

Dans l'exemple suivant, la zone de liste va être composée de deux colonnes.

 

 

Pour remplir une zone de liste avec plusieurs colonnes, on va utiliser un tableau à plusieurs dimensions.

Dans l'exemple suivant, la zone de liste va recevoir le nom des élèves avec leurs notes.

 

Sub Liste()    

    Dim i As Integer

    Dim List_Eleve(1 To 14, 1 To 2) As String

    For i = 1 To 14

        List_Eleve(i, 1) = Range("A1").Offset(i)

        List_Eleve(i, 2) = Range("B1").Offset(i)

    Next i

    MaBoite.ListBox1.List = List_Eleve

End Sub

 

 

 

La largeur de chaque colonne d'une zone de liste se change par la propriété ColumnWidths. Les différentes largeur sont séparées par le caractère ";".

 

 

 

La propriété BoudColumn détermine dans quelle colonne la valeur est récupérée.

 

 

 

 

 

    Dim Val As String

    ListBox1.BoundColumn = 1

    Val = ListBox1.Value    'renvoie "VALERIE"

    ListBox1.BoundColumn = 2

    Val = ListBox1.Value    'renvoie "12"

 

 

Il est possible de changer l'aspect d'une zone de liste par la propriété ListStyle.

 

 

L'aspect de la zone de liste change selon la valeur de la propriété MultiSelect.

 

                    

 

 

ComboBox ou liste déroulante

Une liste déroulante se remplit de la même façon qu'une zone de liste.

Contrairement à la zone de liste, la liste déroulante peut permettre à l'utilisateur de saisir une chaîne de caractères qui ne fait pas partie de la liste.

 

 

Si la valeur saisie ne fait pas partie de la liste ou est nulle, la propriété ListIndex de l'objet ComBox prend comme valeur -1.

Il est possible d'interdire à l'utilisateur de saisir une chaîne de caractère qui ne fait pas partie de la liste en mettent la propriété Style sur 2.

 

 

 

CheckBox ou case à cocher

Cet outil crée des cases que l'utilisateur peut activer ou désactiver d'un simple click

 

 

Si la case à cocher est activée, sa propriété Value prend comme valeur True, sinon elle prend comme valeur False.

Dans l'exemple suivant, si la case à cocher est activée, les notes apparaissent, sinon elles disparaissent.

 

Private Sub UserForm_Initialize()    

    Dim i As Integer

    Dim List_Eleve(1 To 14, 1 To 2) As String

    For i = 1 To 14

        List_Eleve(i, 1) = Range("A1").Offset(i)

        List_Eleve(i, 2) = Range("B1").Offset(i)

    Next i

    MaBoite.ListBox1.List = List_Eleve

End Sub

 

Private Sub CheckBox1_Click()

    If CheckBox1.Value = True Then

        ListBox1.ColumnCount = 2

    Else

        ListBox1.ColumnCount = 1

    End If

End Sub

 

         

 

 

OptionButton ou bouton d'option

Cet outil crée des boutons de d'options. L'utilisateur ne peut sélectionner qu'un seul bouton d'un même groupe.

 

 

La propriété Value du bouton sélectionné prend la valeur True alors que la propriété Value des autres boutons du même groupe prend la valeur False.

 

 

Public Maj As Boolean

 

Private Sub OptionButton1_Click()

    Maj = True

    Ecrire

End Sub

 

Private Sub OptionButton2_Click()

    Maj = False

    Ecrire

End Sub

          

Sub Ecrire()

    Dim i As Integer

    For i = 0 To ListBox1.ListCount - 1

        If Maj = True Then

            'Majuscule

            ListBox1.List(i) = UCase(ListBox1.List(i))

        Else

            'Majuscule

            ListBox1.List(i) = LCase(ListBox1.List(i))

        End If

    Next i

End Sub

 

  

 

 

ToggleButton ou Bouton à bascule

Cet outil crée un bouton qui change d'aspect à chaque click.

 

 

Si le bouton est enfoncé, sa valeur est égale à True sinon elle est égale à False.

 

 

'Bouton Gras

Private Sub ToggleButton1_Click()

    If ToggleButton1 = True Then

        ListBox1.Font.Bold = True

    Else

        ListBox1.Font.Bold = False

    End If

End Sub

'Bouton Italic

Private Sub ToggleButton2_Click()

    If ToggleButton2 = True Then

        ListBox1.Font.Italic = True

    Else

        ListBox1.Font.Italic = False

    End If

End Sub

 

   

 

 

Frame ou cadre

Cet outil crée des cadres permettant de grouper des contrôles.

 

 

 

CommandButton ou Bouton de commande

Cet outil crée des boutons de commande tel que des boutons OK ou Annuler.

 

 

Si vous affectez la valeur True à la propriété Default d'un bouton de commande et si aucun autre contrôle n'est sélectionné, la touche Entrée équivaut à un click sur ce même bouton. De même, si vous affectez la valeur True à la propriété Cancel d'un bouton de commande, la touche Echap équivaut à un click sur le bouton.

 

 

Dans cet exemple, le fait de taper sur la touche Echap équivaut à un click sur le bouton Annuler et ferme le UserForm.

 

'Bouton Annuler

Private Sub CommandButton2_Click()

    Unload MaBoite

End Sub 

 

 

 

Dans cet exemple, le fait de taper sur la touche Entrée équivaut à un click sur le bouton OK si aucun autre contrôle n'est sélectionné et met à jour la liste dans la feuille de calcul.

 

'Bouton OK

Private Sub CommandButton1_Click()

    MAJListe

End Sub 

 

Sub MAJListe()

    Dim NreENreg as Integer

    NbreEnreg = ListBox1.ListCount

    Range("A2:B" & NbreEnreg + 1) = ListBox1.List

End Sub

 

 

TabStrip ou étiquette d'onglet

Cet outil crée des étiquettes d'onglet pour des pages identiques.

Par défaut, le nombre d'onglets d'un nouveau TabStrip est de 2 et  sont nommés Tab1 et Tab2. Un simple click avec le bouton droit de la souris permet d'en ajouter, de les renommer, de les déplacer ou de les supprimer.

 

 

Dans l'exemple suivant, ajoutons un TabStrip avec 3 onglets permettant de classer les élèves suivant leurs notes.

 

 

L'onglet sur lequel clique l'utilisateur est déterminé par la propriété Value du Tab Strip qui prend comme valeur 0 si l'utilisateur clique sur le premier onglet, 1 si il clique sur le second, 3 si il clique sur le troisième ...

 

 

 

Private Sub TabStrip1_Click()

    OptNote = TabStrip1.Value

    Liste

End Sub 

 

Public OptNote As Integer

 

Sub Liste()

    Dim Note As Integer

    Dim Eleve As String

    Dim i As Integer

    Dim NoteMini As Integer

    Dim NoteMaxi As Integer

    MaBoite.ListBox1.Clear 'Efface le contenu de la liste

    Select Case OptNote

    Case 0 'Toutes les notes(onglet 1)

        NoteMini = 0

        NoteMaxi = 20

    Case 1 'Notes de 0 à 10(onglet2)

        NoteMini = 0

        NoteMaxi = 10

    Case 2 'Notes de 11 à 20(onglet3)

        NoteMini = 11

        NoteMaxi = 20

    End Select

    For i = 1 To 14

        Note = Range("B1").Offset(i)

        If Note >= NoteMini And Note <= NoteMaxi Then

            Eleve = Range("A1").Offset(i)

            MaBoite.ListBox1.AddItem Eleve

        End If

    Next i

End Sub

 

 

 

MultiPage

Un multipage peut être comparé à plusieurs UserForm dans le même. Tout comme le TabStrip, le multipage contient des onglets mais à chaque onglet correspond une nouvelle page qui contient des contrôles différents. Sa création est identique à la création d'un TabStrip.

 

 

L'onglet sur lequel clique l'utilisateur est déterminé par la propriété Index du multipage qui prend comme valeur 0 si l'utilisateur clique sur le premier onglet, 1 si il clique sur le second, 3 si il clique sur le troisième ...

 

 

 

 

ScrollBar ou Barre de défilement

Une barre de défilement peut être horizontale ou vertical selon son redimensionnement.

L'exemple suivant se compose d'une barre de défilement et d'une étiquette qui reçoit sa valeur.

 

 

La valeur mini d'une barre de défilement se définie par sa propriété Min, sa valeur maxi par sa propriété Max et sa valeur par sa propriété Value.

La propriété LargeChange définie le changement de valeur lorsque l'utilisateur clique entre le curseur et l'une des flèches.

La propriété SmallChange définie le changement de valeur lorsque l'utilisateur clique sur l'une des deux flèches.

La propriété Delay définie le temps (en millisecondes) entre chaque changement lorsque l'utilisateur reste appuyer sur le Scrollbar.

L'étiquette prend la valeur de la barre de défilement par la procédure suivante:

 

 

Private Sub ScrollBar1_Click()

    Label1 = ScrollBar1.Value

End Sub 

 

 

 SpinButton ou Bouton rotatif

Le bouton rotatif possède presque les mêmes propriétés qu'une barre de défilement. Il ne peut cependant incrémenter ou décrémenter un nombre que de la même valeur (définie dans sa propriété Value) à chaque fois.

 

 

 

Private Sub SpinButton1_Click()

    Label1 = SpinButton1.Value

End Sub 

 

 

 Image

Cet outil permet d'ajouter une image sur un UserForm.

La sélection de l'image à placer se fait en cliquant sur de la propriété Picture.

 

 

La propriété PictureSizeMode permet de redimensionnner l'image.

 

 

La propriété BorderStyle permet de supprimer le cadre autour de l'image.

 

 

Le code VB permet également de charger ou de décharger une image par la propriété Picture.

 

 

 

    Dim Photo As String

    Image1.Picture = LoadPicture() 'Décharge l'image

    Photo = "c:\cheminphoto\photo.jpg"

    Image1.Picture = LoadPicture(Photo) 'charge l'image    

 

 

Le contrôle Image supporte les formats d'image bmp, cur, gif, ico, jpg, et wmf.

 

 

 

printing_tbg_1.gif

 

Classement de sites - Inscrivez le vôtre!