Les listes déroulantes II
Exposé : Avoir une liste dynamique d'items
- Voyons :
- Comment faire varier notre liste de référence d'items
- Comment ajouter un item qui n'était pas compris dans la liste de référence
Nous travaillerons cette fois, sur un formulaire. Pour créer celui ci, je vous renvois à la première étape sur la page suivante. Revenez nous vite !
Au départ, nous remplissons quelques cellules dans la colonne A, nous construisons notre formulaire, en y plaçant une simple combobox et un bouton que nous intitulons "STOP". Voici le résultat...
En mode création, un double clic sur le bouton "STOP" va nous permettre d'entrer le code nécessaire pour décharger le formulaire de la mémoire...
Voici le code...
Private Sub CommandButton1_Click()
Unload UserForm1
End Sub
Pour le charger, nous travaillerons sur un événement de la Feuil1 à savoir le changement de cellule, il suffira de faire voyager notre curseur sur la page, le formulaire se chargera automatiquement. Celui-ci est modal par défaut, ce qui signifie que nous ne pourrons pas sélectionner autre chose avant son déchargement par le bouton "STOP". Code nécessaire
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
UserForm1.Show
End Sub
Voyons maintenant ce qui nous est nécessaire pour traiter la liste d'items du combobox...Nous travaillerons sur les événements "Entrée dans la combobox" pour charger la liste d'items
Private Sub ComboBox1_Enter()
Dim c As Range
'Pour nettoyer la combobox, sinon les items s'ajoutent à l'infini
ComboBox1.Clear
'on détermine la longueur de la liste existante
For Each c In Range("A1", Range("A1").End(xlDown).Address)
'on ajoute les items qui se trouvent déjà dans la liste en colonne A
ComboBox1.AddItem c
Next
End Sub
et "Sortie de la combobox" (touche Tab, par exemple) pour ajouter éventuellement un nouvel item dans la liste
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim c As Range
'on boucle sur la liste
For Each c In Range("A1", Range("A1").End(xlDown).Address)
'on vérifie si le contenu de la combobox existe déjà
If c = ComboBox1 Then
' si oui,on sort de la procédure
Exit Sub
End If
Next
'attention comme ceci ce sera du texte ou on utilisera la fonction FORMAT
Range("A1").End(xlDown).Offset(1, 0) = ComboBox1
'petit message d'avertissement
MsgBox "J'ai ajouté " & ComboBox1 & " aux valeurs"
End Sub
Petite remarque importante: Le contenu d'une combobox est en format texte. Donc, faites attention lorsque vous remplissez la colonne A avec des nombres; placez une apostrophe devant, pour lui donner le type TEXTE (donc '9 et non pas 9) car cela a une influence lorsque nous comparons le contenu de la combobox avec la liste d'items. S'il faut travailler avec d'autres types de données, nous aurons recours aux fonctions FORMAT, CNum, CDate, Val, de manière à convertir le contenu de la combobox
Télécharger le fichier exemple TravailSurComboBox