Icône de la ressource

VBA - Validation par ComboBox dynamique simulant une liste de validation avec saisie filtrée V4

Le fichier à télécharger contient:
  1. Le Module_SaisieFiltéeComboBox à importer dans le projet VBA.
  2. Le Module_ComboBoxValidation à importer dans le projet VBA.
  3. Le UserForm_ComboBoxValidation à importer dans le projet VBA.
  4. La feuille Feuil1 comme exemple de mise en œuvre.
Les principales caractéristiques:
  • Permet de faire la saisie d'une cellule en simulant une liste de validation tout en filtrant la saisie, c'est à dire en ajustant la liste des valeurs proposées en fonction des caractères saisis.

  • Le filtrage est paramétrable:
    - Soit aucun filtrage,
    - Soit un filtrage par les lettres saisies commençant les mots de la liste de validation,
    - Soit un filtrage par les lettres saisies contenues dans les mots de la liste de validation.

  • La position de la ComboBox est paramétrable:
    - Soit à gauche de la cellule de saisie,
    - Soit sur la cellule de saisie,
    - Soit à droite de la cellule de saisie.
Remarques:
  • Cette ressource est un sur-ensemble de la ressource VBA - Saisie Filtrée (alias saisie intelligente) en ComboBox qui utilise le même Module_SaisieFiltréeComboBox.

  • Il a "juste" fallu ajouter:
    - l'appel au UserForm (Module_ComboBoxValidation),
    - le UserForm et la gestion de ses évènements (UserForm_ComboBoxValidation).

  • La ComboBox en UserForm a été préférée à la ComboBox ActiveX car le caractère Modal du UserForm limite les actions utilisateur hors du UserForm et donc simplifie le traitement, mais surtout parce qu'un grave Bug VBA lié à la création dynamique d'un Control ActiveX en interdit l'usage en Office 32 bits.
Mise en œuvre très simple:
  • Placer les Modules:
    - Module_SaisieFiltréeComboBox,
    - Module_ComboBoxValidation,
    - UserForm_ComboBoxValidation
    dans le Projet VBA.

  • Sur l'évènement Worksheet_SelectionChange(), utiliser la fonction ComboBoxValidationCréation() avec les paramètres ad hoc.
    VB:
    'Constantes de la liste de validation
    Private Const AdresseCelluleSaisie = "D3"
    Private Const FeuilleListeValidation = "Feuil1"
    Private Const AdresseListeValidation = "A2:A10"
    
    '----------------------------------------------------------------------
    'Sur sélection de la cellule sujette à liste de validation par ComboBox
    '----------------------------------------------------------------------
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Target.Cells.Count > 1 Then Exit Sub
        If Intersect(Target, Me.Range(AdresseCelluleSaisie)) Is Nothing Then Exit Sub
    
        '=============================================================
        'Appel de la validation par ComboBox dynamique
        'Code à Copier dans la feuille concernée par la saisie Filtrée
        '=============================================================
        'Arguments:
        '---------
        ' ListFillRangeOrTable:     Range ou une Table des valeurs à 1 ou 2 dimensions
        ' Position:                 Position de la ComboBox par rapport à la cellule
        '                           fmTextAlignLeft, fmTextAlignRight, fmTextAlignCenter (Optionnel, fmTextAlignCenter par défaut)
        ' TypeFiltrage:             0 aucun, 1 premières lettres, 2 contenu partiel (Optionnel, 2 par défaut)
        ' EmptyValueAllowed:        Saisie valeur vide autorisée (Optionnel, True par défaut)
        ' ListRows:                 Propriété ListRows de la ComboBox (Optionnel, 8 par défaut)
        ' OffsetRowsAfterInput:     Décalage lignes après saisie (Optionnel, 1 par défaut)
        ' OffsetColumnsAfterInput:  Décalage colonnes après saisie (Optionnel, 0 par défaut)
    
        'Saisie Liste de Validation avec liste de validation en Range
        Call ComboBoxValidationCréation(Me.Parent.Worksheets(FeuilleListeValidation).Range(AdresseListeValidation), _
                                        EmptyValueAllowed:=False, _
                                        ListRows:=10)
    End Sub
Versions:

Validation.gif
  • J'aime
  • J'adore
Réactions: TooFatBoy et ChTi160