Médiaforma

All posts in VBAExcel

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 :


Vous utiliserez des TextBox pour permettre à l’utilisateur de saisir des informations alphanumériques.

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

Tout comme pour un Label, vous pouvez utiliser la fenêtre des propriétés pour modifier les caractéristiques de l’objet TextBox que vous venez d’insérer :

Vous pouvez également utiliser des instructions VBA pour accéder en lecture ou en écriture aux propriétés de l’objet TextBox. Par exemple, pour recopier dans la cellule A1 de la feuille courante la valeur saisie dans la zone de texte TextBox1 à chaque frappe au clavier, vous définirez la procédure évènementielle Textbox1_KeyUp() suivante :

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

  Cells(1, 1).Value = TextBox1.Text

End Sub

Vous utiliserez des labels pour afficher des informations textuelles, comme par exemple des étiquettes devant des zones de texte, des cases à cocher ou des boutons radio.

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

Au relâchement du bouton gauche de la souris, le Label est inséré dans la boîte de dialogue personnalisée et ses propriétés sont accessibles dans la fenêtre Propriétés. Si nécessaire, utilisez cette fenêtre pour modifier l’allure du Label. Vous utiliserez certainement les propriétés Caption, Font et ForeColor :

Si nécessaire, vous pouvez lire ou modifier les propriétés de l’objet Label une fois la boîte de dialogue personnalisée affichée. Par exemple, pour modifier le texte du label, vous pourriez écrire :

Label1.Caption = "Nouveau texte dans le Label"

Vous pouvez également mettre en place des fonctions événementielles sur un Label. Si vous êtes en affichage Objet, appuyez sur F7 ou lancez la commande Code dans le menu Affichage pour passer en affichage Code. Sélectionnez Label1 dans la première liste déroulante et un évènement dans la seconde. La procédure événementielle est immédiatement créée. A titre d’exemple, le code suivant modifie la couleur du premier label lorsque l’utilisateur clique dessus. Si le texte est noir, il devient rouge. Dans le cas contraire, il devient noir :

Private Sub Label1_Click()

  If Label1.ForeColor = RGB(0, 0, 0) Then

    Label1.ForeColor = RGB(255, 0, 0)

  Else

    Label1.ForeColor = RGB(0, 0, 0)

  End If

End Sub

En sélectionnant Label1 dans la première liste et Activate dans la seconde, vous pouvez choisir la couleur du label à l’ouverture de la boîte de dialogue personnalisée. Ici, noir :

Private Sub UserForm_Activate()

  Label1.ForeColor = RGB(0, 0, 0)

End Sub

Les UserForms sont des boîtes de dialogue personnalisées. Elles reposent sur l’utilisation de l’objet UserForm. Cette section va vous montrer comment les utiliser pour créer des interfaces utilisateur adaptées à vos projets pour afficher mais aussi saisir des données.

Définition d’une UserForm

Pour définir une UserForm dans le projet en cours, rendez-vous dans la fenêtre Microsoft Visual Basic pour Applications et lancez la commande UserForm dans le menu Insertion. Un objet UserForm est alors ajouté dans la fenêtre Projet, sous Feuilles (1) et la boîte de dialogue personnalisée apparaît dans l’interface (2) :

Personnalisation de la boîte de dialogue personnalisée

Vous pouvez librement redimensionner votre boîte de dialogue personnalisée en agissant sur ses poignées de redimensionnement. Pour l’afficher en mode exécution, appuyez simplement sur la touche de fonction F5 ou lancez la commande Exécuter Sub/UserForm dans le menu Exécution :

Les propriétés de la boîte de dialogue personnalisée sont regroupées dans la fenêtre Propriétés, dans l’angle inférieur gauche de la fenêtre Microsoft Visual Basic pour Applications. Il suffit de les modifier pour changer l’allure de votre UserForm :

Toutes ces propriétés sont faciles à comprendre. Personnellement, j’utilise essentiellement les propriétés suivantes :

Propriété Signification
Top et Left Position de la boîte de dialogue personnalisée sur l’écran
Caption Titre de la boîte de dialogue personnalisée
Font Texte utilisé par défaut dans les contrôles
BackColor Couleur d’arrière-plan de la boîte de dialogue personnalisée
Picture Image d’arrière-plan de la boîte de dialogue personnalisée

 

Si vous insérez une image d’arrière-plan dans un UserForm et que vous changez d’avis, vous vous demandez peut-être comment la supprimer. Eh bien, il suffit de sélectionner la valeur de la propriété Picture dans la fenêtre Propriétés et d’appuyer sur la touche Suppr du clavier :

Vous pourriez également choisir de supprimer l’image d’arrière-plan à l’exécution de la boîte de dialogue personnalisée (même si la suppression de l’image dans les propriétés de votre UserForm semble plus « propre »). Pour cela, insérez la commande suivante dans la procédure UserForm_Activate() :

UserForm1.Picture = LoadPicture()

Dans les articles à venir, nous allons passer en revue les différents contrôles utilisables dans une boîte de dialogue personnalisée et montrer comment y accéder à l’aide d’instructions VBA.

Avant tout, commencez par afficher la boîte à outils avec la commande Boîte à outils dans le menu Affichage :

Remarque

Si la commande Boîte à outils est grisée dans le menu Affichage, c’est certainement parce que vous êtes en mode d’affichage Code et non Objet. Appuyez simultanément sur les touches Maj et F7 ou lancez la commande Objet dans le menu Affichage. La commande Boîte à outils devrait maintenant être accessible dans le menu Affichage.


De très nombreuses fonctions sont accessibles dans Excel. Ces fonctions peuvent parfois rendre de grands services en VBA et éviter la saisie de nombreuses instructions. Les fonctions d’Excel sont accessibles via l’objet WorksheetFunction.

Voici quelques exemples d’utilisation.

Min, Max et Average

Supposons que vous recherchiez les valeurs minimales et maximales d’une plage de cellules et que vous vouliez calculer la moyenne des valeurs de la plage. Pour cela, vous pouvez utiliser les fonctions Min(), Max() et Average() d’Excel.

Nous allons partir de cette feuille de calcul. La plage examinée sera A1:B5 :

Voici le code utilisé :

Dim minimum, maximum As Integer

Dim moyenne As Single

Set plage = Worksheets("Feuil1").Range("A1:B5")

minimum = Application.WorksheetFunction.min(plage)

maximum = Application.WorksheetFunction.max(plage)

moyenne = WorksheetFunction.Average(plage)

MsgBox "Valeur minimale : " & minimum

MsgBox "Valeur maximale : " & maximum

MsgBox "Moyenne : " & moyenne

Et voici le résultat :

 

Nombre de cellules supérieures à 20

Toujours à partir de la même feuille de calcul, calcul du nombre de cellules de la plage A1:B5 dont la valeur est supérieure à 20 :

Dim grand As Integer

grand = WorksheetFunction.CountIf(Range("A1:B5"), ">20")

MsgBox "Nombre de cellules supérieures à 20 : " & grand

Voici le résultat :