Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SAISIE SEMI-AUTOMATIQUE


Information sur la source

Catégorie :Base de Donnees Niveau : Débutant Date de création : 26/05/2003 Date de mise à jour : 26/05/2003 18:21:16 Vu : 7 163

Note :
9,67 / 10 - par 6 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note


Description

Ce code permet de proposer à l'utilisateur une saisie semi-automatique, un peu comme la barre d'adresse d'Internet Explorer.
Pour cela,le code va voir dans une base de données les enregistrements commençant par ce qui a été saisie par l'utilisateur et corrige ce qui est affiché au fur et à mesure de la saisie.
testez-le, je pense que ça vous plaiera :-)
On peut modifier le code et utiliser la méthode find pour avoir un code plus propre et plus rapide, je l'ai mis comme ça pour que tout le monde comprenne le principe :-)
 

Source

  • 'A mettre dans l'événement keyup d'un textbox
  • (ici lblnomclient)
  • Dim ctext As String
  • Dim start As Integer
  • On Error Resume Next
  • If KeyCode >= 65 And KeyCode <= 122 Then
  • start = LblNomClient.SelStart
  • RcClients.MoveFirst
  • Do While RcClients.EOF <> True
  • If Left((RcClients!nom), start) = LblNomClient.text Then
  • LblNomClient.text = RcClients!nom
  • LblNomClient.SelStart = start
  • LblNomClient.SelLength = Len(LblNomClient.text)
  • TxtClient.text = RcClients!codeclient
  • Exit Sub
  • Else
  • RcClients.MoveNext
  • End If
  • Loop
  • End If
'A mettre dans l'événement keyup d'un textbox
(ici lblnomclient)

Dim ctext As String
Dim start As Integer
On Error Resume Next
If KeyCode >= 65 And KeyCode <= 122 Then
    start = LblNomClient.SelStart
    RcClients.MoveFirst
    Do While RcClients.EOF <> True
    If Left((RcClients!nom), start) = LblNomClient.text Then
        LblNomClient.text = RcClients!nom
        LblNomClient.SelStart = start
        LblNomClient.SelLength = Len(LblNomClient.text)
        TxtClient.text = RcClients!codeclient
        Exit Sub
    Else
        RcClients.MoveNext

    End If

    Loop
End If

Commentaires et avis

signaler à un administrateur
Commentaire de ICIoBRa le 26/05/2003 18:55:58

Jé dja vu 1 code komme ça sur le site c'est vrément très pratique.
10/10

signaler à un administrateur
Commentaire de EBArtSoft le 26/05/2003 19:08:25 administrateur CS

Bonjour,

C'est vrai que ce genre de code est assez pratique et tu innove sur l'utilisation d'un recordset mais il aurais été tres pratique egalement
de continuer la saisie apres le premier enregistrement je veus dire par exemple tapez plusieurs adresse email a la suite separé par des virgules ....

de plus au lieu d'ouvrir tout la table tu peut n'ouvrir qu'une requete
genre :

openrecordset("SELECT * FROM MaTable WHERE NomClient Like '" & nom & "';")

et afficher une liste dans une listbox en plus de la saisie

enfin bref c'etait juste pour commenter un peu ta source ;-D

b@nne prog

signaler à un administrateur
Commentaire de sebmafate le 26/05/2003 19:36:04 administrateur CS

une remarque toute bête...
On ecrit pas : Do While RcClients.EOF &lt;&gt; True
mais : Do While Not RcClients.EOF
car RcClients.EOF est déjà un boolean, c'est comme faire if True=True !!!

Séb

signaler à un administrateur
Commentaire de jack le 27/05/2003 15:38:10 administrateur CS

Bien pensé.
Juste un truc aussi :
Au lieu de faire le "Exit Sub" après avoir trouvé le bon nom, utilise plutôt "Exit Do"

signaler à un administrateur
Commentaire de Woulouf le 29/05/2003 16:57:48

A koi correspondent "nom" et "code client" (ki suivent un ! dexclamation, dailleurs a koi sert le point dexclamation ?)
Moi je remplace Rclient par un data2.recordset (apres avoir fait un select biensur) , c bien ca ?

Merci @+ Woulouf

signaler à un administrateur
Commentaire de PatriceVB le 29/05/2003 17:11:50 administrateur CS

Woulouf&gt;oui mais fo préciser le nom du champ. Moi j'utilise jamais de contrôles DATA je fais tout à la main en ADO c pour ça qu'il y a des trucs que tu reconnais pas...

jack&gt;dans ce cas précis, cela reviendrait au même, mais dans le code, lorsque j'ai mis exit sub c que je voulais sortir de la procédure et pas de la boucle car si il y avé du code après la boucle cela l'exécuterai alors que c pas mon cas.
C'est vrai que ça peut être intéressant d'optimiser le code en remplacant par exit do (même si je suis pas du tout sur que ça optimiserait qque chose) mais il fo éviter d'optimiser à tout va. Imagine que je change le code et que je rajoute qque chose après le code, je perdrais du tps à me rendre compte qu'il fo que je remodifie en exit sub

sebmafate&gt;ta remarque est PRESQUE juste. En effet, on peut écrire do while rcclients.eof car c un booleen mais c juste une facilité d'écriture qui, il est vrai, réduit également le tps d'éxécution. Mais ton exemple est complètement boiteux. Quand tu fait une comparaison avec un entier tu fais pareil. ex : if truc=3 peut revenir à if 3=3. la propriété EOF n'est pas toujours à vraie !

@+

signaler à un administrateur
Commentaire de sebmafate le 29/05/2003 19:08:00 administrateur CS

PatruveVB &gt;&gt;&gt; Ok pour l'exemple il était mal choisi, mais pourquoi comparer un boolean à un autre ???

Woulouf &gt;&gt;&gt; le ! permet d'acceder à la propriété par défault, et le "nom" et "CodeClient" correspondent à la référence de l'objet dans la collection. on peut écrire à la place rclients.fields("nom") ou bien rclients("nom"), les 3 syntaxes sont bonnes.

Séb

signaler à un administrateur
Commentaire de Woulouf le 30/05/2003 11:53:23

cmt dois je proceder alors en utilisant un controle data ? merci @+ Woulouf

signaler à un administrateur
Commentaire de Woulouf le 30/05/2003 12:14:40

encore ds kestions , desolé ms il faut ke jarrive a integrer cette source ds mon prog......la variable ctext n'est ps utilisé , c normal ?
A koi,correspondent  "codeclient" et "nom"
, jve dire a koi servent elles pr toi ?

Merci @+ Woulouf

signaler à un administrateur
Commentaire de jack le 01/06/2003 19:15:49 administrateur CS

Salut PatriceVB
En effet, le "Exit Do" ne change rien à la fonctionnalité.
Par contre, il est possible que le programme ne "dépile" pas --&gt; risque qu bout de quelques (nombreux) tours de cycles, car je ne sais pas si la sortie d'une Sub remet à zéro la pile.
Jack &lt;-- Enculeur de mouches patenté

signaler à un administrateur
Commentaire de oricheton le 04/06/2003 16:51:35

On peut aussi écrire tout simplement Do Until RcClients.EOF

signaler à un administrateur
Commentaire de trabice le 29/09/2004 11:58:07

c pas lourd a utiliser??
sinon c pas mal kan meme :-)

signaler à un administrateur
Commentaire de momo190479 le 13/12/2005 23:51:26

Eh bien moi je dit chapeau, c simple et super efficace, surtout que j'ai cherché un peu et je n'ai trouvé nulle part la meme fonction ecrite aussi simplement.
Quand au remarques qui ont été faite je les trouve un peu déplacé , en effet il n'existe pas une seule maniére d'ecrire les boucles par exemple , chacun fait comme il le sent aprés tout, du moment que ça fonctionne !

signaler à un administrateur
Commentaire de tony0076 le 22/05/2006 10:05:31

Bonjour je suis debutant en php et j'aimerai bien avoir un exemple  avec le code intégré a la textbox car je n'arrive pas a la faire fonctionner.
merci

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,404 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.