Médiaforma

All posts in VBAExcel

Le contrôle CommandButton (bouton) permet essentiellement d’exécuter du code lorsque l’utilisateur clique dessus.

Pour insérer un contrôle CommandButton, sélectionnez l’outil CommandButton dans la boîte à outils, puis cliquez dans la boîte de dialogue personnalisée :

Vous utiliserez :

  • La propriété Caption pour définir le texte qui apparait sur le bouton.
  • L’événement Click pour réagir au clic sur le bouton.

A titre d’exemple, nous allons définir une boîte de dialogue personnalisée qui contient un CommandButton. Lorsque l’utilisateur clique sur ce bouton, un message sera affiché à l’aide de la méthode MsgBox.

Voici la boîte de dialogue personnalisée :

Un CommandButton est inséré, puis sa propriété Caption est initialisée à “Cliquez ici”.

Double-cliquez sur le bouton et complétez la procédure CommandButton1_Click() comme ceci :

Private Sub CommandButton1_Click()

MsgBox "Merci d'avoir cliqué"

End Sub

Il ne reste plus qu’à lancer la boîte de dialogue personnalisée en cliquant sur le bouton Exécuter, ou en appuyant sur la touche de fonction F5 :


Le contrôle SpinButton (toupie) permet d’incrémenter ou de décrémenter une valeur d’un certain pas entre une valeur minimale et une valeur maximale.

Pour insérer un contrôle SpinButton, sélectionnez l’outil Toupie dans la boîte à outils, puis tracez le contour voulu dans la boîte de dialogue personnalisée. Selon votre tracé, le contrôle sera horizontal ou vertical :

Vous utiliserez essentiellement les propriétés suivantes dans un SpinButton :

Propriété Signification
Min Valeur minimale
Max Valeur maximale
SmallChange Pas de progression

A titre d’exemple, nous allons définir une boîte de dialogue personnalisée qui contient un contrôle MultiPage composé de deux pages : une pour définir les caractéristiques du SpinButton et une autre pour utiliser le SpinButton :

La mise en place des contrôles n’offre aucune difficulté.

Pour faire fonctionner cette boîte de dialogue personnalisée, nous allons écrire quelques lignes de code VBA.

Au clic sur le bouton de la première page :

  • Les valeurs saisies dans les trois zones de texte sont affectées aux propriétés Min, Max et SmallChange du SpinButton.
  • Le texte “Valeur actuelle : 0” est affiché dans le label de la deuxième page.
  • La boîte de dialogue bascule automatiquement sur la deuxième page.
Private Sub CommandButton1_Click()

  With SpinButton1

    .Min = TextBox1.Value

    .Max = TextBox2.Value

    .SmallChange = TextBox3.Value

  End With

  Label4.Caption = "Valeur actuelle : 0"

  MultiPage1.Value = 1 'Active la deuxième page

End Sub

Pour compléter la prise en compte du clic sur le bouton, il reste à prendre en compte le clic sur les boutons du SpinButton. La valeur du SpinButton est alors automatiquement modifiée. Il suffit de l’afficher dans le label :

Private Sub SpinButton1_Change()

  Label4.Caption = "Valeur actuelle : " & SpinButton1.Value

End Sub

Les contrôles MultiPage sont intéressants lorsque de nombreux contrôles doivent être placés dans une boîte de dialogue personnalisée. Ils donnent accès à plusieurs pages via des onglets. Par défaut deux onglets sont créés, mais il est très simple d’en ajouter en mode conception ou avec du code VBA.

Pour insérer un contrôle MultiPage, glissez-déposez un contrôle MultiPage sur la boîte de dialogue personnalisée :

Lorsque vous sélectionnez une page en sélectionnant sur son onglet, plusieurs propriétés intéressantes peuvent être utilisées :

Propriété Signification
Caption Texte dans l’onglet
Enabled Accessible (True) ou non (False)
Picture Arrière-plan de la page
Visible Onglet de la page affiché (Trie) ou caché (False)

 

La propriété Value du contrôle MultiPage détermine quelle page est affichée : 0 représente la première page, 1 représente la deuxième, ainsi de suite…

Pour ajouter une page en mode conception, cliquez du bouton droit dans la barre des onglets et sélectionnez Nouvelle page dans le menu :

Pour faire la même chose en VBA, vous utiliserez ces instructions :

Set p3 = MultiPage1.Pages.Add

P3.Caption = "Page 3"

Une fois le contrôle MultiPage en place, il ne vous reste plus qu’à insérer les contrôles voulus dans les différentes pages.


Les OptionButton (boutons radio) sont généralement utilisés lorsque l’utilisateur peut effectuer un choix et un seul parmi plusieurs. Ils sont alors placés dans un cadre (Frame) pour améliorer la présentation.

La propriété Value du OptionButton vaut :

  • True lorsque l’OptionButton est sélectionné.
  • False lorsque l’OptionButton est désélectionné.

Pour insérer un OptionButton, glissez-déposez un contrôle OptionButton sur la boîte de dialogue personnalisée :

Pour relier deux ou plusieurs OptionButton de telle sorte qu’un seul d’entre eux soit sélectionné à la fois, affectez la même valeur à la propriété GroupName de ces contrôles.

La procédure OptionButton_Change() peut être utilisée pour réagir aux changements d’état d’un OptionButton. Supposons par exemple que deux OptionButton de même GroupName aient été insérés dans un contrôle Frame.

Pour qu’un message s’affiche dans le contrôle Label2 lorsque l’utilisateur sélectionne Oui ou Non, vous utiliserez ce code :

Private Sub OptionButton1_Change()

  Label2.Caption = "Parfait !"

End Sub

Private Sub OptionButton2_Change()

  Label2.Caption = "Cela ne saurait tarder"

End Sub

Les CheckBox (cases à cocher) sont utilisées lorsque l’utilisateur peut sélectionner une ou plusieurs options dans une liste d’options.

La propriété Value du CheckBox vaut :

  • True lorsque le CheckBox est coché.
  • False lorsque le CheckBox est décoché.

Pour insérer un CheckBox, glissez-déposez un contrôle CheckBox sur la boîte de dialogue personnalisée :

La procédure CheckBox_Change() peut être utilisée pour réagir aux changements d’état d’un Checkbox. Supposons par exemple que le CheckBox CheckBox1 ait été inséré dans une boîte de dialogue personnalisée. Vous pourriez écrire la procédure CheckBox1_Change() pour modifier l’étiquette du CheckBox en fonction de son état (coché ou décoché) :

Private Sub CheckBox1_Change()

  If CheckBox1.Value = True Then

    CheckBox1.Caption = "Case cochée"

  Else

    CheckBox1.Caption = "Case décochée"

  End If

End Sub

Vous pourriez également afficher le texte Case décochée dans l’étiquette du CheckBox à l’ouverture de la boîte de dialogue personnalisée via la procédure UserForm.Activate() :

Private Sub UserForm_Activate()

  CheckBox1.Caption = "Case décochée"

End Sub

Vous utiliserez des contrôles ListBox pour insérer des zones de liste dans une boîte de dialogue personnalisée. Ces contrôles permettent de choisir un ou plusieurs éléments dans une liste de choix.

Pour insérer un ListBox, glissez-déposez un contrôle ListBox sur la boîte de dialogue personnalisée :

Le ListBox peut être rempli en faisant référence à un bloc de cellules d’une feuille de calcul ou à l’aide de code VBA.

Remplissage avec un bloc de cellules

Vous pouvez remplir un ListBox avec un bloc de cellules dans une feuille de calcul. Pour cela, renseignez la propriété RowSource du contrôle ListBox :

En supposant que les cellules A1 à A10 de la feuille Feuil1 contiennent les données suivantes :

Voici le contenu du ListBox :

Vous voulez affecter une valeur par défaut à la zone de liste ? Rien de plus simple : affectez l’index de cette valeur à la propriété ListIndex du contrôle (la valeur 0 correspond au premier élément de la liste). Cette affectation se fera par exemple dans la procédure UserForm_Activate(). Par exemple, pour choisir Abou Dabi par défaut (la cinquième valeur de la liste), vous utiliserez cette instruction dans la procédure UserForm_Activate() :

Private Sub UserForm_Activate()

  ListBox1.ListIndex = 4

End Sub

Remplissage avec du code VBA

Pour remplir un contrôle ListBox avec du code VBA, vous utiliserez la méthode AddItem. Ici par exemple, on insère les capitales Paris, Amsterdam, Londres, Washington D.C., Abou Dabi, Alger, Ankara, Brasilia, Bucarest et Varsovie dans le contrôle ListBox1 :

Private Sub UserForm_Activate()

    ListBox1.AddItem "Paris"

    ListBox1.AddItem "Amsterdam"

    ListBox1.AddItem "Londres"

    ListBox1.AddItem "Washington D.C."

    ListBox1.AddItem "Abou Dabi"

    ListBox1.AddItem "Alger"

    ListBox1.AddItem "Ankara"

    ListBox1.AddItem "Brasilia"

    ListBox1.AddItem "Bucarest"

    ListBox1.AddItem "Varsovie"

End Sub

Le résultat est le même que précédemment :


Vous utiliserez des contrôles ComboBox pour insérer des listes déroulantes dans une boîte de dialogue personnalisée.

Pour insérer un ComboBox, glissez-déposez un contrôle ComboBox sur la boîte de dialogue personnalisée :

La ComboBox peut être remplie en faisant référence à un bloc de cellules d’une feuille de calcul ou à l’aide de code VBA.

Remplissage avec un bloc de cellules

Pour référencer un bloc de cellules, renseignez la propriété RowSource du contrôle ComboBox :

En supposant que les cellules A2 à A6 de la feuille Feuil2 contiennent les données suivantes :

Voici le contenu du ComboBox :

Vous voulez affecter une valeur par défaut à la liste déroulante ? Rien de plus simple : affectez l’index de cette valeur à la propriété ListIndex du contrôle (la valeur 0 correspond au premier élément de la liste). Cette affectation se fera par exemple dans la procédure UserForm_Activate(). Par exemple, pour choisir Nathalie par défaut (la troisième valeur de la liste), vous utiliserez cette instruction dans la procédure UserForm_Activate() :

Private Sub UserForm_Activate()

  ComboBox1.ListIndex = 2

End Sub

Remplissage avec du code VBA

Pour remplir un contrôle ComboBox avec du code VBA, vous utiliserez la méthode AddItem. Ici par exemple, on insère les prénoms Bertrand, Pierre, Nathalie, Pierric et Liliane dans le contrôle ComboBox1 :

Private Sub UserForm_Initialize()

  ComboBox1.AddItem "Bertrand"

  ComboBox1.AddItem "Pierre"

  ComboBox1.AddItem "Nathalie"

  ComboBox1.AddItem "Pierric"

  ComboBox1.AddItem "Liliane"

End Sub

Le résultat est le même que précédemment :