Médiaforma

All posts in VBAExcel

Le contrôle Image permet d’afficher des images dans une boîte de dialogue personnalisée.

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

Vous utiliserez les propriétés suivantes :

  • AutoSize pour adapter la taille de contrôle Image à l’image.
  • Picture pour affecter une image au contrôle Image.

Pour affecter une image au contrôle Image, vous affecterez la fonction LoadPicture() à la propriété Picture du contrôle:

Image1.Picture = LoadPicture("chemin et nom de l'image")

A titre d’exemple, nous allons afficher une image dans une boîte de dialogue personnalisée. Lorsque l’utilisateur cliquera dessus, une deuxième image sera affichée. Lorsqu’il cliquera à nouveau dessus, la première image sera affichée. Ainsi de suite…

Nous utiliserons les deux images suivantes :

Créez une nouvelle boîte de dialogue personnalisée.

A l’aide de la fenêtre Propriétés, affectez le texte “Le contrôle Image” à la propriété Caption de UserForm1.

Insérez un contrôle Label. Cliquez sur ce contrôle. A l’aide de la fenêtre Propriétés, affectez le texte “Cliquez sur l’image” à sa propriété Caption.

Insérez un contrôle Image. Cliquez sur ce contrôle. A l’aide de la fenêtre Propriétés, initialisez à True sa propriété AutoSize. Cliquez sur (Image bitmap) en face de la propriété Picture et affectez-lui l’image du premier papillon :

Voici ce que vous devriez obtenir :

Basculez sur la fenêtre Code en appuyant sur la touche de fonction F7.

Pour savoir quelle image est affichée dans le contrôle Image, nous allons utiliser une variable que nous appellerons papillon :

Dim papillon

Sélectionnez UserForm dans la première liste déroulante et Initialize dans la deuxième et définissez le code suivant pour mémoriser que le premier papillon est affiché au démarrage de l’application :

Voici le code de la procédure UserForm_Initialize() :

Private Sub UserForm_Initialize()

  papillon = "papillon1"

End Sub

Sélectionnez Image1 dans la première liste déroulante et MouseUp dans la seconde, puis complétez la procédure Image1_MouseUp() comme ceci :

Private Sub Image1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

  If papillon = "papillon1" Then

    papillon = "papillon2"

    Image1.Picture = LoadPicture("C:\data\mediaforma\Images\papillon2.jpg")

  Else

    papillon = "papillon1"

    Image1.Picture = LoadPicture("C:\data\mediaforma\Images\papillon1.jpg")

  End If

End Sub

Lorsque l’utilisateur clique sur l’image, un événement MouseUp est généré. Si la variable papillon vaut papillon1, cela signifie que le premier papillon est affiché. Dans ce cas, la variable papillon est initialisée à papillon2 et le deuxième papillon est affiché à la place du premier :

  If papillon = "papillon1" Then

    papillon = "papillon2"

    Image1.Picture = LoadPicture("C:\data\mediaforma\Images\papillon2.jpg")

Si la variable papillon est différente de papillon1, cela signifie que le deuxième papillon est affiché. Dans ce cas, la variable papillon est initialisée à papillon1 et le premier papillon est affiché à la place du deuxième :

  Else

    papillon = "papillon1"

    Image1.Picture = LoadPicture("C:\data\mediaforma\Images\papillon1.jpg")

  End If

Dans cet article, je vais vous montrer comment exécuter un calcul mathématique au clic sur un bouton et afficher le résultat dans un TextBox. Voici le résultat attendu :

Créez une nouvelle boîte de dialogue personnalisée. Affectez la valeur “Calculs dans un UserForm” à sa propriété Caption.

Aoutez deux Label, deux TextBox et un CommandButton.

Affectez la valeur :

  • “Entrez un calcul” à la propriété Caption du premier Label.
  • “Résultat” à la propriété Caption du deuxième Label.
  • “Calculer” à la propriété Caption du CommandButton.

Pour obtenir le résultat du calcul entré dans le premier TextBox, nous allons utiliser une fonction très pratique : Evaluate(). Cette fonction demande un argument de type String qui contient un calcul. Elle retourne le résultat du calcul.

Double-cliquez sur le bouton. L’affichage bascule sur la fenêtre Code et la procédure CommandButton1_Click() est créée. Complétez-la comme ceci :

Private Sub CommandButton1_Click()

  TextBox2.Text = Evaluate(TextBox1.Text)

End Sub

Le résultat de la fonction Evaluate() est simplement affecté à la propriété Text du deuxième TextBox pour afficher le résultat.


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