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 (RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo) 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. |