Filtre VBA un combo par le correspondant de la chaîne de n'importe où dans un élément
Dans ma feuille excel, j'ai une liste déroulante avec beaucoup de valeurs. Actuellement, vous pouvez accéder à un élément dans la liste déroulante, simplement en tapant les premières lettres de la chaîne. E. g. disons que j'ai ces éléments dans mon combobox.
- John Smith
- Ted James
- Phillip Prix
- Tom Hardy
- James Dean
- Chris Keaking
Donc, si j'ai commencé à taper Te
il serait filtre à Ted James
.
Mais dire que je ne connais que le nom et de type I dans Dean
, rien ne pourrait correspondre qu'il cherche seulement à partir du début de la chaîne, et non en son sein. Même si j'ai tapé Jam
il serait filtre à James Dean
mais pas Ted James
.
Est-il un moyen de reproduire le comportement avec VBA de quelque chose comme le Select2 plugin qui cherche n'importe où dans la chaîne et les filtres en conséquence?
- Est la zone de liste déroulante dans un userform ou est-ce directement sur une feuille? La raison pour laquelle je demande, c'est que vous avez accès à plus d'événements, si c'est sur un userform.
- Il est directement sur la feuille, mais vous pouvez toujours accéder à des événements via le module de feuille de calcul
- Mon erreur, j'ai confondu les contrôles de Formulaire avec les contrôles ActiveX.
Vous devez vous connecter pour publier un commentaire.
Essayer cette solution, à mesure que vous tapez, la liste déroulante affiche et met à jour pour afficher seulement le choix qui a été partiellement correspondre à ce qui est tapé dans la zone de liste déroulante. Elle peut exiger un peu plus de travail, car lorsque vous avez sélectionné un choix valide, la liste est encore filtré à partir de ce seul élément jusqu'à ce que vous désactivez la zone de liste déroulante, mais il peut vous donner ce dont vous avez besoin.
Créer un module appelé
mdlComboBox
avec le code suivantDans le
ThisWorkbook
module, ajoutez le code suivant pour s'assurer que la zone de liste déroulante est remplie lorsque le Classeur s'ouvre:Enfin, ajoutez une zone de liste déroulante (nommé
ComboBox1
) àSheet1
et ajoutez le code suivant à laSheet1
module:La ligne
Activesheet.Select
forces de la zone de liste déroulante pour redessiner la liste déroulante à partir de zéro, montrant que le choix filtrée par la fonction. Dans cette solution, vous devez garder une trace de l'ensemble des choix que j'ai fait dans une Collection de variable globale, mais il existe des situations dans lesquelles il peut perdre de sa valeur, de sorte qu'il peut être préférable de coder en dur ou de tirer à partir d'une feuille à la place.J'ai essayé exactement le même code et a obtenu de nombreux plantages.
J'ai fait quelques modifications mineures et il fonctionne très bien pour moi.
Mon premier problème a été de mettre quelque chose sur la zone de liste déroulante à droite dès le début.
Je préfère pour initialiser la zone de liste déroulante et le remplir avec les worksheet_activate() appliquée dans la Feuil1 code.
Je ne sais pas pour vous les gars, mais la réponse précédente code n'a pas accepté lorsque je choisis (ou type) de tout ce qui se conformer à la liste.
Pour le résoudre, j'ai fait un SI la vérification de l'INDEX de mon entrée.
Si l'élément sélectionné est dans la liste déjà, ne pas effacer la dropdownlist.
Mais il y a encore quelque chose à résoudre. Je suis l'aide de la saisie semi-automatique, et cela évite la recherche lorsqu'Excel essayer de deviner le point je suis à la rechercher.
Pour l'instant, je l'ai résolu en appuyant sur DEL. Cela fait-il tourner le dos à la recherche.