Remplir une liste à partir d’une plage avec une zone de liste ou ListBox dans un formulaire personnalisé ou Userform, Excel VBA

La propriété RowSource vous permet de remplir une liste à partir d’une plage. La valeur de cette propriété est une chaîne de caractère avec le nom de la plage. Démontrons le fonctionnement de cette propriété par un exemple, et considérons à la fois le cas où la plage à partir de laquelle les données sont prises est connue à l’avance, et la situation où sa seule cellule est connue.

Créons un projet simple pour suivre les déplacements des employés d’une certaine entreprise. Il existe donc un classeur avec trois feuilles de calcul: Villes, Employés et Voyages.
■ Sur la feuille Villes, dans la plage A1: A5, une liste des villes vers lesquelles les salariés doivent se rendre a été saisie.
■ Sur la feuille Employés, dans la colonne A, à partir de la cellule A1, les noms des employés sont saisis. La taille de cette liste n’est pas fixe et peut être modifiée.
■ Sur la feuille Voyages, une liste à deux colonnes des déplacements des employés par ville s’affiche. Le remplissage de la liste sur la feuille Voyages se fait à l’aide de la fenêtre Remplir la liste comme le montre la figure suivante.

Figure : Remplir une liste à partir d’une plage

Cette fenêtre contient deux listes contenant les noms des employés et les noms des villes, et un bouton de commande. Les listes sont remplies à partir des plages des feuilles de calcul correspondantes. En appuyant sur le bouton OK, les données sélectionnées sont entrées dans la ligne vide suivante de la liste située sur la feuille Voyages.
Créez un formulaire sur lequel vous placez deux zones de listes et un bouton de commande, et à l’aide de la fenêtre Propriétés, définissez leurs valeurs de propriété comme indiqué dans le tableau suivante.

Tableau: Valeurs de propriété définies dans la fenêtre Propriétés

Objet Propriété Valeur
Zone de liste Name LstNom
Zone de liste Name LstVille
Bouton de commande Name CmdOK
Caption OK

Dans le module de formulaire, saisissez le code suivant :

Private Sub UserForm_Initialize()

   lstVille.RowSource = "Villes! A1: A5"

   Dim r As Range

   Set r = Worksheets("Employés").Range("A1").CurrentRegion

   lstNom.RowSource = r.Address(RowAbsolute:=False, _

                                 ColumnAbsolute:=False, _

                                 External:=True)

End Sub

Private Sub cmdOK_Click()

   If lstNom.ListIndex < 0 Then

      MsgBox "Choisissez la ville, pointez sur le nom!"

      Exit Sub

   End If

   If lstVille.ListIndex < 0 Then

      MsgBox "Choisissez votre nom, indiquez la ville!"

      Exit Sub

   End If

   Dim r As Range

   Set r = Worksheets("Voyages").Range("A1").CurrentRegion

   Dim n As Long

   n = r.Rows.Count

   Worksheets("Voyages").Activate

   Cells(n + 1, 1).Value = lstNom.Text

   Cells(n + 1, 2).Value = lstVille.Text

End Sub

 

Commentaires

■ Lorsque le formulaire est initialisé, les zones de listes sont remplies. La liste des villes est remplie avec une indication explicite de l’adresse de la plage, et avant de remplir la liste des employés, puisque selon le scénario elle peut avoir une taille variable, la plage est d’abord identifiée, puis son adresse est déterminée, et alors seulement la liste est remplie.

■ Lorsque vous appuyez sur le bouton OK, il vérifie d’abord si les données ont été sélectionnées dans les listes, puis le numéro de la première ligne libre dans la liste de la feuille Voyages est déterminé et les données sélectionnées du formulaire y sont affichées.

■ La propriété Address renvoie une valeur String qui représente la référence de plage. Sa syntaxe est expression.Address (RowAbsoluteColumnAbsoluteReferenceStyleExternalRelativeTo) ou expression représente un objet Range.

Tableau: La syntaxe de la propriété Address

Nom Type Description
RowAbsolute Variant True pour renvoyer la portion de ligne de la référence en tant que référence absolue. La valeur par défaut est True.
ColumnAbsolute Variant True pour renvoyer la portion de colonne de la référence en tant que référence absolue. La valeur par défaut est True.
ReferenceStyle XlReferenceStyle Le style de référence. La valeur par défaut est xlA1.
Externe Variant True pour renvoyer une référence externe. False pour renvoyer une référence locale. La valeur par défaut est False.
RelativeTo Variant Si LigneAbsolue et ColonneAbsolue sont définies sur Faux, et que StyleDeRéférence est défini sur xlR1C1, vous devez inclure un point de départ pour la référence relative. Cet argument est un objet Plage qui définit le point de départ.
S’abonner
Notifier de
0 Commentaires
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x