Le fichier à télécharger contient:
- Le Module_SaisieFiltéeComboBox à importer dans le projet VBA.
- Le Module_ComboBoxValidation à importer dans le projet VBA.
- Le UserForm_ComboBoxValidation à importer dans le projet VBA.
- La feuille Feuil1 comme exemple de mise en œuvre.
- 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.
- 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.
- 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
- V1 - Initiale.
- V2 - Correction applicable lorsque le Scroll en ComboBox est installé (voir cette ressource).
- V3 - Alignement sur la V3 de la ressource VBA - Saisie Filtrée (alias saisie intelligente) en ComboBox pour le Module_SaisieFiltréeComboBox.
- V4 - Ajustement minime suite à la modification de la ressource VBA - Saisie Filtrée (alias saisie intelligente) en ComboBox.