Saisie intuitive dans liste déroulante (excel/VBA)

Bonjour le forum,

On me demande de trouver une manière de naviguer facilement dans une liste déroulante en tapant une ou plusieurs lettres des mots recherches.

Dans l'idéal j'aimerai que ma liste se simplifie et que ne soit plus afficher que les mots comportant ces lettres.

Par exemples si j'ai une liste d'aliments et que je cherche chocolat je voudrais avoir chocolat blanc, chocolat noir, chocolat au lait et gâteau au chocolat.

Je sais pas si c'est possible en passant par VBA.

Sinon j'ai trouvé un mais ça marche pas avec ma liste test il me sort que le premier choix peut importe ce que je choisie.

Merci d'avance.

284essai.ods (3.07 Ko)

Bonjour,

Un essais simple

A+

1'151liste-multi.zip (13.39 Ko)

Bonsoir,

Dans une liste déroulante sur feuille ou userform, ce n'est pas simple de faire ce que tu demandes, car l'affichage des éléments ne se réactualise pas, si tu cliques sur le bouton pour voir les éléments et que tu commences à saisir ton mot, la liste ne se réaffiche pas avec les éléments filtrés.

Attention, le combobox doit avoir la valeur MatchEntry à 2 pour que cela puisse fonctionner (hormis le problème de réaffichage), et il faut d'abord saisir le mot qui filtrera les items et ensuite cliquer sur le bouton pour voir les différents éléments.

Le plus simple serait d'associer un TextBox avec une ListBox.

Je t'ai fait deux exemples (feuille et uf) : quand tu saisis un texte dans le ComboBox, il filtre le ComboBox (avec pb affichage) et le ListBox.

1'001essai.zip (22.19 Ko)

Pour utiliser la ListBox efficacement, il faut remplacer le ComboBox par un TextBox

Tout d'abords merci ça s'approche beaucoup de ce que je voudrais faire.

Serai-ce possible que la useform s'active lorsque l'on clique sur une cellule et ensuite on fait un choix on le valide et notre choix apparaît dans la case ou on à cliqué précédemment ?

Bonsoir,

Plutôt qu'un userform, je te propose un textbox et un listbox qui suivent la cellule active. A tester et à adapter en fonction de tes besoins :

1'129essai.zip (20.49 Ko)

Merci c'est presque parfait (la perfection n'ai pas de ce monde ). Est il possible de réduire la zone des cases ou la texte box apparaît?

Genre que la ligne 12 (exemple au choix) ? (Au pire je pense pouvoir me débrouiller)

Et surtout est il possible de mettre ailleurs la textbox pcq a gauche ça masque la case de gauche qui est justement celle sur laquelle je veux cliquer après.

Bonjour,

Il faut essayer de comprendre le code pour l'adapter, et si problème revenir sur le forum :

Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' Sélection d'une cellule

If Target.Count = 1 Then ' Si une seule cellule de sélectionnée

' déplacement du TextBox

TextBox1.Left = Target.Offset(0, 1).Left + Target.Width ' Décale le TextBox d'une cellule vers la droite

TextBox1.Top = Target.Top

TextBox1.Width = Target.Offset(0, 1).Width ' La largeur du TextBox s'adapte à la largeur de la colonne dans laquelle il se trouve

' Déplacement du ListBox

ListBox1.Left = TextBox1.Left

ListBox1.Top = TextBox1.Top + TextBox1.Height

ListBox1.Width = TextBox1.Width ' La largeur de la ListBox=largeur du TextBox

' Chargement de la ListBox

Call ChargeListbox("")

End If

End Sub

Si j'ai bien compris, cela répond à ta demande.

Oui en effet merci beaucoup.

Bonsoir Kant et Benead,

Je viens squatter ce fil car j'ai trouvé (par hasard) le fichier de Benead qui convient parfaitement à une application que je suis en train de développer.

Ma question est donc pour Benead, concernant le 1er fichier (essai.xls) que tu à posté dans ce fil.

Je souhaite ré-utiliser uniquement l'USF et je ne comprend pas ce qu'est le (sFiltre).

Private Sub ChargeCombobox(sFiltre)
    ComboBox1.Clear
    For l = 1 To ActiveSheet.UsedRange.Rows.Count
        If Cells(l, 1).Text Like "*" & sFiltre & "*" Then
            ComboBox1.AddItem Cells(l, 1).Text
        End If
    Next l
End Sub

Je souhaite remplir la ComboBox et la ListBox avec la liste présente dans l'onglet "bdd" de mon fichier (colonne A), et je cherche donc à comprendre le fonctionnement de la macro pour l'adapter.

508ventilation-type.xlsm (23.96 Ko)

Bonsoir Psycho,

La variable sFiltre permet de charger le combobox ou la listbox en fonction d'une information, on filtre les enregistrements qui comprennent l'expression défini dans la variable sFiltre.

Je t'ai créé deux exemples dans ton fichier.

Le premier, filtre ton listbox et ton combobox quand on clique sur le listbox "Ville", l'autre quand tu tapes des caractères dans le textbox "Filtre", par exemple si tu saisi dans le filtre "le", la listbox1 se chargera avec 2 enregistrements de Marseille et 1 de Lille.

217ventilation-type.xlsm (37.89 Ko)

Par exemple le bon coin utilise un filtre similaire, quand on crée une anonce, on choisi une région dans un combo, et cela charge le second combo "Départements" en fonction de la région. On fait la même chose ici.

Merci pour ta réponse et tes exemples

Benead a écrit :

on filtre les enregistrements qui comprennent l'expression défini dans la variable sFiltre.

C'est donc bien ce qui me semblais, mais je ne trouve pas la déclaration de la variable, ni sa définition

Quand j'ai appris le VBA, on m'a enseigné à toujours déclarer une variable (en général en début de procédure), et à la définir, dans ton fichier je ne retrouve pas ces éléments, c'est ce qui me perturbe ...

Bonsoir Psycho,

Bien vu et autant pour moi, la variable se déclare au moment de l'appel de la procédure :

Private Sub ChargeCombobox(sFiltre As String)
    ComboBox1.Clear
    For l = 1 To ActiveSheet.UsedRange.Rows.Count
        If Cells(l, 1).Text Like "*" & sFiltre & "*" Then
            ComboBox1.AddItem Cells(l, 1).Text
        End If
    Next l
End Sub

C'est parce que j'ai pris certaines habitudes avec l'expérience en programmation pour la déclaration de variables. Je déclare quasiment systématiquement mes variables en début de module via l'instruction Deftype de cette manière :

Option Explicit

DefStr S ' String
DefLng C, L ' Long
DefDate D ' Date
DefBool B ' Boolean
DefDbl O ' Double

Du coup, quand je rentre mes lignes de codes, je saisi Dim sFiltre sans redéfinir le type de variable, cela se fait implicitement, sauf quand on force par exemple sTotal as Long, la déclaration explicite l'emporte.

Quand je ne le fait pas, je le fait au niveau du module ou de la procédure. De toute façon, j'utilises toujours Option Explicit.

J'essaie toujours d'être le plus précis possible, mais cela m'arrive de faire des erreurs ou des oublis... Surtout quand je fais cela tard le soir... Vous avez le droit de me le dire et/ou de corriger.

Pas de pb, on peut tous faire des erreurs

Les arguments des procédures sont des éléments que je n'ai jamais utilisé donc j'ai un peu de mal à comprendre, mais je vais essayer d'adapter ça pour mon fichier (grâce à tes exemples et au débogage pas à pas :p ).

Merci des précisions.

Bonjour à tous,

j'arrive un peux en retard mais je viens pour proposer une solution qui est à priori susceptible de réponde à la demande initial:

trouver une manière de naviguer facilement dans une liste déroulante en tapant une ou plusieurs lettres des mots recherches.

Dans l'idéal j'aimerai que ma liste se simplifie et que ne soit plus afficher que les mots comportant ces lettres

Je me suis également penché sur ce problème il y a déjà plusieurs mois de cela et je m'en suis sorti non pas avec du VBA mais avec une "simple" formule dans la liste de choix.

Heu, j'ai bien mis le mot simple entre guillemets

Plutôt qu'un long discours, je vous joint un fichier contenant la solution que je vous propose.

256essai.xlsx (10.62 Ko)

Si cela peux aider,

Fabrice

Bon jour

voici un fichier

357saisie-intuitive.zip (24.47 Ko)

Bonjour Benead,

En faisant des recherches sur une liste intuitive, je suis tombé sur votre message en date du 22 Mars 2013, 23:15 et sur le fichier essai.xls.

Comment dans votre fichier, peut-on :

  • Aller chercher la liste dans une feuille nommée « Feuil2 » et qui commence en B2 sur cette même feuille ?
  • Paramétrer la largueur des TextBox / ListBox ? Je ne trouve pas où vous avez configuré ces paramètres dans l’outil visual basic
  • Paramétrer le nombre de ligne affichée dans la ListBox ? Je ne trouve pas où vous avez configuré ces paramètres dans l’outil visual basic.

Je pense que c’est assez simple pour vous mais là je sèche 

Merci par avance.

Jonathan

Rechercher des sujets similaires à "saisie intuitive liste deroulante vba"