La "Saisie filtrée" sur ComboBox parfois dénommée "saisie intelligente" consiste à actualiser dynamiquement les valeurs d'une ComboBox au fur et à mesure de la saisie des caractères tout en permettant la sélection d'une valeur dans la liste affichée.
La ComboBox peut appartenir à un UserForm ou être une ComboBox Active X sur une feuille
La mise en oeuvre est très simple:
Versions:
La ComboBox peut appartenir à un UserForm ou être une ComboBox Active X sur une feuille
La mise en oeuvre est très simple:
- Insérer le Module_SaisieFiltréeComboBox du fichier joint dans le projet VBA
- Sur l'évènement _Enter() de la ComboBox d'un UserForm ou
Sur l'évènement _GotFocus() de la ComboBox Active X:
-> Appeler la fonction SaisieFiltréeComboBoxEnter() dont les arguments sont décrits dans le module.
- Sur l'évènement _Change() de la ComboBox:
-> Appeler la fonction SaisieFiltréeComboBoxChange() dont l'argument est décrit dans le module.
- 6 options de filtrage:
- Commence par (TypeFiltrage:=1)
- Ne commence pas par (TypeFiltrage:=-1)
- Contient le(s) mot(s) (TypeFiltrage:=2, valeur par défaut)
- Ne contient pas le(s) mot(s) (TypeFiltrage:=-2)
- Contient le(s) mot(s) dans l'ordre de saisie (TypeFiltrage:=3, valeur par défaut)
- Ne contient pas le(s) mot(s) dans l'ordre de saisie (TypeFiltrage:=-3)
- Ces 2 fonctions retournent l'index dans le tableau ou le Range original de la valeur affichée de la ComboBox ou -1 si cette valeur ne fait pas partie de la liste.
- Lorsque la ComboBox est multi-colonnes, c'est la colonne infiquée dans la propriété ComboBox.TextColumn qui définit la colonne qui s'affiche dans la zone texte de la ComboBox et qui fait l'objet de la saisie filtrée.
- Cette ressource peut être utilisée conjointement avec la ressource VBA - ComboBox Multi-Colonnes en UserForm - Afficher toutes les colonnes de l'item sélectionné.
- Le fichier joint donne un exemple de mise en œuvre pour les 2 cas de ComboBox (UserForm & ActiveX).
Versions:
- V1 - Initiale.
- V2 - Renomme partout "Assistée" en "Filtrée".
- V3 - Correction valeur de retour SaisieFiltréeComboBoxChange().
- V4 - Gestion des ComboBoxes multi-colonnes
V4b - Amélioration du calcul de la colonne TextColumn et ajout des options de filtrage "Ne ... pas". - V5 - Correction d'un petit bug d'un ComboBox.Clear non justifié.
- V6 - Effacement du ComboBox.RowSource au début du traitement.
- V7 - Amélioration des comparaisons en traitant les lettres accentuées et ajout de la possibilité d'un filtrage personnalisé via une fonction à passer en argument.
VB:
'--------------
'ComboBox Enter
'--------------
Private Sub ComboBoxTest_Enter()
Call SaisieFiltréeComboBoxEnter(Me.ComboBoxTest, _
ThisWorkbook.Worksheets("Liste Clients").ListObjects("TableauClients").DataBodyRange, _
TypeFiltrage:=2)
End Sub
'---------------
'ComboBox Change
'---------------
Private Sub ComboBoxTest_Change()
Call SaisieFiltréeComboBoxChange(Me.ComboBoxTest)
End Sub