Icône de la ressource

VBA - Saisie filtrée (alias saisie intelligente) en ComboBox V7

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:
  1. Insérer le Module_SaisieFiltréeComboBox du fichier joint dans le projet VBA

  2. 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.

  3. Sur l'évènement _Change() de la ComboBox:
    -> Appeler la fonction SaisieFiltréeComboBoxChange() dont l'argument est décrit dans le module.
Remarques:
  • 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.
Exemple:
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


Démo.gif
  • J'aime
Réactions: cp4 et Philou59000