Saisie intuitive dans liste déroulante (excel/VBA) Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
Kant1
Membre fidèle
Membre fidèle
Messages : 158
Inscrit le : 28 janvier 2013
Version d'Excel : 2010 Fr

Message par Kant1 » 18 mars 2013, 11:51

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.
essai.ods
(3.07 Kio) Téléchargé 242 fois
Avatar du membre
lermite
Membre impliqué
Membre impliqué
Messages : 1'583
Appréciation reçue : 1
Inscrit le : 5 février 2012
Version d'Excel : 2000/2007FR

Message par lermite » 21 mars 2013, 22:00

Bonjour,
Un essais simple
A+
liste multi.xls
(42.5 Kio) Téléchargé 958 fois
Tout problème a une solution, le vrai problème... c'est de la trouver.
B
Benead
Membre fidèle
Membre fidèle
Messages : 478
Appréciations reçues : 2
Inscrit le : 15 octobre 2011
Version d'Excel : 2007 FR 32bits- 2013 FR 64bits

Message par Benead » 22 mars 2013, 01:46

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.
essai.xls
(59.5 Kio) Téléchargé 861 fois
Pour utiliser la ListBox efficacement, il faut remplacer le ComboBox par un TextBox
A+
Benoît Marchand
[Benead]
Avatar du membre
Kant1
Membre fidèle
Membre fidèle
Messages : 158
Inscrit le : 28 janvier 2013
Version d'Excel : 2010 Fr

Message par Kant1 » 22 mars 2013, 13:09

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 ?
B
Benead
Membre fidèle
Membre fidèle
Messages : 478
Appréciations reçues : 2
Inscrit le : 15 octobre 2011
Version d'Excel : 2007 FR 32bits- 2013 FR 64bits

Message par Benead » 22 mars 2013, 22:15

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 :
essai.xls
(54.5 Kio) Téléchargé 929 fois
A+
Benoît Marchand
[Benead]
Avatar du membre
Kant1
Membre fidèle
Membre fidèle
Messages : 158
Inscrit le : 28 janvier 2013
Version d'Excel : 2010 Fr

Message par Kant1 » 23 mars 2013, 12:39

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.
B
Benead
Membre fidèle
Membre fidèle
Messages : 478
Appréciations reçues : 2
Inscrit le : 15 octobre 2011
Version d'Excel : 2007 FR 32bits- 2013 FR 64bits

Message par Benead » 23 mars 2013, 15:27

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.
Modifié en dernier par Benead le 17 avril 2013, 21:17, modifié 2 fois.
A+
Benoît Marchand
[Benead]
Avatar du membre
Kant1
Membre fidèle
Membre fidèle
Messages : 158
Inscrit le : 28 janvier 2013
Version d'Excel : 2010 Fr

Message par Kant1 » 23 mars 2013, 17:19

Oui en effet merci beaucoup.
Avatar du membre
Psycho
Membre habitué
Membre habitué
Messages : 76
Inscrit le : 24 novembre 2011
Version d'Excel : 2007 FR

Message par Psycho » 17 avril 2013, 17:29

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.
ventilation_type.xlsm
(23.96 Kio) Téléchargé 477 fois
B
Benead
Membre fidèle
Membre fidèle
Messages : 478
Appréciations reçues : 2
Inscrit le : 15 octobre 2011
Version d'Excel : 2007 FR 32bits- 2013 FR 64bits

Message par Benead » 17 avril 2013, 22:07

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.
Ventilation_type.xlsm
(37.89 Kio) Téléchargé 122 fois
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.
A+
Benoît Marchand
[Benead]
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message