ComboBox

Retour vers Excel

Les listes déroulantes II

Exposé : Avoir une liste dynamique d'items

    Voyons :

  1. Comment faire varier notre liste de référence d'items
  2. 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

FIN