Remplir la liste d'une combobox par une var. Dictionnaire

Bonjour à tous,

je coince dans le développement d'une petite macro Excel, alors je viens faire appel à votre aide.

J'ai une Combobox sur une Feuille (pas dans un UserForm), et je souhaiterai alimenter la liste déroulante de cette ComboBox par un Objet dictionnaire (Scripting.Dictionary).

(PS : J'ai bien la référence "Microsoft Sripting Runtime" cochée)

Je l'ai déjà fait avec une Combobox sur un Userform, et ça fonctionnait. Mais là j'ai une "erreur d'exécution 70 : Permission refusée" lors de l'éxécution de la ligne ComboBox1.List = Liste_resultats.keys

Savez-vous comment faire ?

Je vous joins le fichier exemple, le but de cette macro étant de faire une Combobox "intuitive" avec réactualisation du contenu de la liste en fonction de ce qui est entré dans la combobox.

Bonjour

Tu utilises le mot "Index" comme une variable. C'est un mot réservé par vba et tu ne dois pas. Essaie en le remplaçant par le variant "i".

Bye !

Bonjour,

Faire une recherche Google : excel recherche intuitive google

Private Sub ComboBox1_DropButtonClick()
  ComboBox1.List = Sheets("feuil1").Range("liste").Value
End Sub

Private Sub ComboBox1_Change()
  If Me.ComboBox1 <> "" Then
    Set d1 = CreateObject("Scripting.Dictionary")
    tmp = UCase(Me.ComboBox1) & "*"
    For Each c In Sheets("feuil1").[liste]
      If UCase(c) Like tmp Then d1(c.Value) = ""
    Next c
    Me.ComboBox1.List = d1.keys
    Me.ComboBox1.DropDown
    [e2] = Me.ComboBox1
  End If
End Sub

Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  ComboBox1.List = Sheets("feuil1").Range("liste").Value
  Me.ComboBox1.DropDown
End Sub

Ceuzin

gmb a écrit :

Tu utilises le mot "Index" comme une variable. C'est un mot réservé par vba et tu ne dois pas. Essaie en le remplaçant par le variant "i".

Bonjour gmb, merci pour l'info qui me semble toutefois erroné car j'utilise tout le temps "index" pour mes variables de boucle For, et ça ne m'a jamais posé de soucis. D'ailleurs, dans le cas présent, j'ai essayé et ça ne change rien au problème.

Il me semble qu'Excel interdit de nommer une variable avec un nom réservé, le code ne serait pas exécutable si c'était le cas, la ligne de déclaration concernée serait en rouge ?

Merci ceuzin pour le code qui marche. Mais même si le résultat est là, je reste sur ma faim car je ne vois pas ce qui ne va pas dans mon code original puisque celui que tu as trouvé fait la même chose : Me.ComboBox1.List = d1.keys

Vois-tu ce qui est différent ?

Petite question pour mon apprentissage, "Me" sert normalement à nommer le UserForm dans lequel on éxécute du code,

dans le cas d'une ComboBox directement sur une feuille, à quoi correspond-il ?

piratman a écrit :

car j'utilise tout le temps "index" pour mes variables de boucle For, et ça ne m'a jamais posé de soucis.

puisque tu le dis, ce doit être vrai.

Alors je fais amende honorable : je ne suis pas un grand expert en la matière.

Mais je continuerai à éviter ce genre de chose.

Le bug doit alors venir d'ailleurs, d'autant que j'ai remarqué, à y regarder de plus près, des choses bizarres et que je ne fais pas. Note que je suis désormais prudent en ne disant pas que c'est interdit...

Comme par exemple définir une variable tableau sans donner son nombre de dimension :

ReDim Tableau(Plage.Rows.Count) 

J'aurais pour ma part écrit :

ReDim Tableau(Plage.Rows.Count, 1) 

Quant à écrire qu'un tel tableau se charge en écrivant son égalité avec une plage....J'aurais bien vérifié que le résultat correspond à ce que j'attends, car je n'en suis pas sûr du tout....

Peut-être Ceuzin pourra-t-il nous donner le fin mot de la chose puisque tu lui a posé la question.

Lui, c'est un crack !

Bye !

Je relance ce sujet car nous n'avons pas eu le fin mot.

Et j'en profite pour demander si chez vous aussi la recherche intuitive ne fonctionne qu'à partir de la 2ème lettre saisie, avec les 2 fichiers proposés par Ceuzin ??

C'est un peu dommage, l'intérêt étant surtout de le saisir que la 1ère lettre ...

Bonjour

piratman a écrit :

si chez vous aussi la recherche intuitive ne fonctionne qu'à partir de la 2ème lettre saisie, avec les 2 fichiers proposés par Ceuzin ??

Oui, c'est bien pareil.

Sauf que pour le fichier avec listbox, la recherche se fait dès la saisie de la première lettre si on neutralise l'instruction surlignée ci-après :

Private Sub ComboBox1_DropButtonClick()
  ComboBox1.List = Sheets("BD").Range("liste").Value
End Sub

Bye !

gmb a écrit :

Sauf que pour le fichier avec listbox, la recherche se fait dès la saisie de la première lettre si on neutralise l'instruction surlignée ci-après :

Private Sub ComboBox1_DropButtonClick()
  ComboBox1.List = Sheets("BD").Range("liste").Value
End Sub

Bien vu

J'ai aussi remarqué une truc ennuyeux, mais la je doute que l'on puisse y faire quelque chose :

Lorsqu'on saisie une ou plusieurs lettres, on a le menu déroulant qui propose la liste "intuitive".

Si on utilise notre souris pour parcourir cette liste, on peut survoler les différentes propositions sans problème, et cliquer sur celle que l'on veut.

Par contre, si l'on utilise la flèche Bas du clavier, alors la première proposition de la liste déroulante est sélectionnée, et la liste déroulante réduite à une seule et unique entrée, cette même première proposition.

Serait-il possible de pouvoir choisir via les flèches du clavier, et de valider par la touche entrée notre choix ?

Bonjour

piratman a écrit :

Serait-il possible de pouvoir choisir via les flèches du clavier, et de valider par la touche entrée notre choix ?

Là, je ne vois pas.

Désolé.

Bye !

Bonsoir,

Private Sub ComboBox1_GotFocus()
  ComboBox1.List = Sheets("BD").Range("liste").Value
End Sub

Private Sub ComboBox1_Change()
 If Me.ComboBox1 <> "" Then
  Set d1 = CreateObject("Scripting.Dictionary")
  clé = UCase(Me.ComboBox1) & "*"
  For Each c In Sheets("BD").[Liste]
    If UCase(c) Like clé Then d1(c.Value) = ""
  Next c
  Me.ComboBox1.List = d1.keys
  Me.ComboBox1.DropDown
  [e2] = Me.ComboBox1
 End If
End Sub

Ceuzin

Bonjour,

et pour répondre à ta 1ère question, après qq tests j'ai bien l'impression que c'est le .List qui est interdit avec un combobox sur feuille.

Le dictionary n'y est pour rien.

eric

Merci Ceuzin,

le fichier "DVSaisieIntuitiveComboBox" c'est carrément parfait,

C'est le dieu de l'Excel Jacques Bois Gontier ou quoi... ? Quel que soit la problèmatique qu'on a, j'ai toujours l'impression qu'il a déjà étudié le sujet et fait des petits fichiers exemples.

Maintenant, comme je ne me limite jamais à copier-coller du code, je vais décortiquer tout ça.

Merci en tout cas


eriiic a écrit :

Bonjour,

et pour répondre à ta 1ère question, après qq tests j'ai bien l'impression que c'est le .List qui est interdit avec un combobox sur feuille.

Le dictionary n'y est pour rien.

eric

Bonjour eriiic,

mais pourtant le premier code proposé par Ceuzin utilise aussi le .List sur une combobox sur une une feuille et ça fonctionne...

Il y a au moins 2 raisons pour lesquelles la version du post 1 ne peut pas fonctionner:

  • ListFillRange est alimenté par une liste en dur (d'où le message d'erreur)
  • MatchEntry doit être positionné à 0.

Ceuzin

Merci à toi Ceuzin pour l'aide apporté sur ce sujet.

Pour ceux que ça intéresse, j'ai commenté et modifié un peu le code original de Jacques pour le rendre d'une part plus accessible à ceux comme moi qui ne sont pas des dieux du vba, qui ont besoin de lire "en clair" ce que fait chaque ligne de code, avec des noms de variables clairs.

Et d'autre part pour rendre ce code "transferrable" ulta facilement sur n'importe quelle classeur Excel.

J'espère que ça ne viole pas les règles du forum, car en aucun cas je m'approprie ce code dont je ne suis pas à l'origine.

Si tel est le cas, signalez-le moi et je supprimerai ce post.

Le but de mon action est le partage, car j'ai tellement appris en vba grâce à ce forum que si je peux amener moi aussi ma petite pierre à l'édifice, je le fais volontiers.

PS : J'ai rajouté la gestion de la touche ECHAP lorsqu'on saisie du texte qui n'est pas dans les propositions de la liste, afin de ne pas permettre d'entrer une mauvaise saisie. Cette gestion était faite pour la touche ENTER, mais pas pour ECHAP.

21ramasse.xlsx (23.90 Ko)

Bonjour,

j'ai un fichier ci joint où j'ai déjà créer 2 listes déroulante de choix (1 par secteur), je souhaiterais que ces listes soit intuitive type "boisgontier" tout en gardant la recherche v , je ne m'y connais pas du tout en VBA, quelqu'un peut m'aider, Ceuzin par exemple....

Bonsoir,

cf PJ

Ceuzin

ceuzin a écrit :

Bonsoir,

cf PJ

Ceuzin

bonsoir, Ceuzin

merci beaucoup pour ton aide, maintenant comment faire pour afficher tous les doublons, il peut nous arriver d'avoir un fournisseur avec 2 adresses différente, je pourrai mettre 1, et 2 , mais je voudrais faciliter la vie à ceux qui vont utiliser le fichier, de plus je souhaiterai protéger quelque cellules seulement ici et là dans les classeur....

Rechercher des sujets similaires à "remplir liste combobox var dictionnaire"