Saisie dans une liste déroulante

jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006 - 17 janv. 2006 à 14:30
jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006 - 18 janv. 2006 à 14:15
Bonjour à toutes et tous,



Voici ce que j'aimerais pouvoir réaliser: un formulaire avec deux
listes deroulantes liées à une base de données Access, l'une pour le
prenom et l'autre pour le nom, et un bouton pour valider.



En fait, imaginez une sorte de carnet d'adresse, ou l'on pourrait
choisir le nom dans une liste et le prenom puis, en validant, on
pourrait saisir les coordonnées de cette personne.



Mais j'ai de nombreux problèmes car j'essaie de gérer plusieurs cas.



1) Ce qui est assez simple, c'est quand il faut choisir à la souris
dans la liste un nom, le prenom correspondant au nom s'affiche
automatiquement dans l'autre liste.



2) Cependant, si l'on souhaite pouvoir saisir le début du nom et que la
liste affiche au fur et a mesure les noms commencant par les premieres
saisies, en temps reel! la, j'ai l'impression que VB 6 peche un peu
mais cela fonctionne, meme si c'est au ralenti!



3) Enfin, si l'on souhaite rentrer le nom de quelqu'un de nouveau ou
bien modifier un nom existant deja, il y a beaucoup d'évenements a
gerer sur la liste deroulante.



Ainsi, si je rentre "Dup", je peux avoir "Dupont" qui s'affiche.
Normal. Mais si je clique apres la lettre "u", j'aimerais pouvoir
écrire la lettre "m" et qu'il m'affiche "Dumont" mais j'ai du mal! en
fait, j'ai du mal a faire coincider la saisie automatique avec la
saisie d'un nouveau nom. J'ai essayé de mettre en place un compteur
pour savoir ou je me trouvais dans le nom mais cela n'a plus d'interet
des que je me deplace en cliquant a la souris n'importe ou dans le nom!



Bref, je ne sais pas si vous m'avez compris, mais si vous connaissez un
exemple de code tres bien fait sur la saisie automatique qui gere
pleins d'evenement, ca m'aiderait enormement que vous me l'indiquiez!



merci d'avance

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 janv. 2006 à 18:13
Salut
En VB6 donc.
La saisie semie-automatique n'étant pas native sur les composants de VB6, tu as donc de la programmation derrière.
N'étant pas devin et ne sachant pas comment tu as fait, difficile de te répondre.
La lenteur de recherche n'est pas dûe à VB6 mais à tes lignes de code.
Il y a quelques exemples de ce genre de composant émélioré sur vbfrance.
Il te suffit donc de lui fournir le recordset contenant tous les noms de ta DB et une méthode Find doit suffire.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006
17 janv. 2006 à 23:37
Je te remercie pour ta réponse et effectivement, mon code ne doit pas être optimisé car cela est tres lent. J'aurais aime le mettre ici, mais il est trop grand!

Mon principal souci, c'est de réussir à gérer une fois que la saisie semi-automatique a fait son effet, la modification de mon champ. En clair, c'est mon probleme de pouvoir mettre "Dumont" au lieu de "Dupont".

En effet, si je tape "Du", j'ai "Dupont" qui s'affiche. Je n'ai tapé que "Du", donc mon curseur est apres le "u" et si je rajoute un "m", "Dumont" s'affiche, meme avec une petite lenteur. Le probleme arrive lorsque j'ai choisi dans la liste "Dupont" et que je decide de cliquer sur le nom, juste apres le "u" pour corriger et mettre un "m".

Je ne sais pas comment récupérer la position dans le mot du curseur alors que deja, j'ai mis un compteur pour les deplacements du curseur lors d'appuis sur les touches.

J'espere avoir ete clair, mais n'hesitez pas a me demander des precisions. Je vous remercie d'avance tres sincerement
0
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
18 janv. 2006 à 00:38
Bonsoir,

Essaye ce code, tu pourras peut-être l'adapter à ton code.



Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer)

'Saisie semie-automatique



Dim Wcount As String

If KeyCode = vbKeyBack Then Exit Sub

Dim inc1 As Integer

Wcount = Len(Combo1.Text)

If Combo1.Text = "" Then Exit Sub

For inc1 = 0 To Combo1.ListCount - 1

If LCase(Combo1.Text) = LCase(Left(Combo1.List(inc1), Wcount)) Then

Combo1.Text = Combo1.Text & Mid$(Combo1.List(inc1), Combo1.SelStart + 1)

Combo1.SelStart = Wcount

Combo1.SelLength = Len(Combo1.Text)

Exit For

End If

Next inc1



End Sub



jpleroisse



Si une réponse vous convient, cliquez Réponse Acceptée.
0
jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006
18 janv. 2006 à 14:15
merci pour ce code que j'ai essayé d'etayer mais le souci, c'est quand je fais deux combo (nom et prenom) et que je tape un nom puis que je passe sur l'autre combo. Car, en revenant a la souris sur le premier combo, le nom saisi precedemment se surligne et si je clique sur une lettre au milieu du nom, pour modifier le nom, des problemes de reconnaissance ont alors lieu.
0
Rejoignez-nous