Le fichier à télécharger contient:
Les principales caractéristiques:
- Le UserForm ComboBoxValidation à importer dans le projet VBA.
- 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.
- 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.
- Il est possible et même recommandé si la liste de valeurs est longue, d'ajouter le Module_SaisieFiltréeComboBox au projet VBA pour filtrer la saisie et réduire dynamiquement la liste aux valeurs contenant les mots saisis.
(Voir la ressource https://excel-downloads.com/resources/vba-saisie-filtree-alias-saisie-intelligente-en-combobox.1319/)
Insérer le Module et définir #Const SAISIE_FILTRÉE = True
- Il est possible d'ajouter le Module_ScrollListComboTextBoxes au projet VBA pour le Scroll vertical en ComboBox.
(Voir la ressource https://excel-downloads.com/resourc...xtbox-activex-en-feuille-et-en-userform.1385/)
Insérer le Module et définir #Const SCROLL_COMBOBOX = True
- 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.
- Insérer dans le Projet VBA:
- le UserForm ComboBoxValidation
- Insérer éventuellement dans le Projet VBA:
- le Module_SaisieFiltréeComboBox (recommandé pour les longues listes de valeurs) et définir #Const SAISIE_FILTRÉE = True
- le Module_ScrollListComboTextBoxes (moins utile si saisie filtrée) et définir #Const SCROLL_COMBOBOX = True
- Sur l'évènement Worksheet_SelectionChange(), utiliser la fonction ComboBoxValidation.Cré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: '--------- ' RangeOrArray: Range ou une Table des valeurs à 1 ou 2 dimensions ' Position: Position de la ComboBox par rapport à la cellule ' xlHAlignLeft, xlHAlignRight, xlHAlignCenter (Optionnel, xlHAlignCenter par défaut) ' TypeFiltrage: Si "Module_SaisieFiltréeComboBox" inclus: 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 ComboBoxValidation.Cré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.
- V5 - Petites améliorations.
- V6 - Restructuration pour ne pas inclure par défaut la saisie filtrée et placement de la fonction Création directement dans le UserForm.