Considérons une application simple dans laquelle il est possible d’ajouter de nouveaux éléments, différents des éléments déjà dans la liste, via le champ de saisie de ComboBox. Ainsi, il n’est pas permis de saisir un élément qui correspond à l’un des éléments de la liste. C’est ainsi que la méthode de saisie des données considérée diffère de la méthode discutée dans la section précédente. De plus, vous pouvez supprimer les éléments sélectionnés de la liste et effacer toute la liste. Au départ, la liste est remplie de données provenant d’une plage de cellules. Si un nouvel élément est entré via le champ de saisie de liste, il sera également entré dans la plage sur la base de laquelle la liste a été remplie. Lorsque vous supprimez un élément de la liste, il est également supprimé de la plage. Dans les deux cas, cette plage est redimensionnée, car telle ou telle ligne est ajoutée ou supprimée. Par conséquent, vous devez constamment redéfinir la plage en fonction de laquelle la liste est remplie.
Nous allons créer un formulaire avec une zone de liste modifiable et trois boutons. Définissez les valeurs de la propriété Name du formulaire et des contrôles à l’aide de la fenêtre Propriétés, comme indiqué dans le tableau suivant.
Tableau. Valeurs de propriété définies dans la fenêtre Propriétés
Élément de contrôle | Nom de la valeur de la propriété |
Zone de liste modifiable | CboNom |
Bouton de commande | CmdAjouter |
Bouton de commande | CmdSupprimer |
Bouton de commande | CmdEffacer |
La liste sera remplie de données, par exemple les noms de famille, de la plage située dans la même colonne avec la cellule supérieure A1. Appuyez sur le bouton Ajouter pour ajouter un nouvel élément à la liste à partir du champ d’entrée de la liste, appuyez sur le bouton Supprimer pour supprimer l’élément sélectionné de la liste et appuyez sur le bouton Effacer pour effacer la liste.
Figure: Remplir la liste sans répéter
Private Sub UserForm_Initialize() Me.Caption = "Ajouter et supprimer des données" cmdAjouter.Caption = "Ajouter" cmdSupprimer.Caption = "Supprimer" cmdEffacer.Caption = "Effacer " cboNom.RowSource = Range("A1").CurrentRegion.Address cboNom.ListIndex = 0 End Sub Private Sub cmdAjouter_Click() Dim el As String Dim n As Integer el = cboNom.Text If el = Empty Then Exit Sub If Range("A1").Value = Empty Then Range("A1").Value = el ElseIf Not cboNames.MatchFound Then n = Range("A1").CurrentRegion.Rows.Count Cells(n + 1, 1).Value = el Else MsgBox cboNom.Text & "plus dans la liste" Exit Sub End If cboNom.RowSource = Range("A1").CurrentRegion.Address End Sub Private Sub cmdSupprimer_Click() Dim n As Integer n = cboNom.ListIndex If n = -1 Or (n = 0 And cboNom.Text = Empty) Then Exit Sub End If Cells(n + 1, 1).EntireRow.Delete cboNom.RowSource = Range("A1").CurrentRegion.Address End Sub Private Sub cmdNettoyer_Click() Range("A1").CurrentRegion.Clear cboNom.Text = Empty End Sub