VBA - saisie d'une zone de texte via un scan (douchette) [Résolu]

damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 20 avril 2012 à 19:04 - Dernière réponse : damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention
- 22 avril 2012 à 20:37
Bonjour,
Je fais sur Access en VBA une sorte de "caisse enregistreuse" pour une épicerie solidaire.
Ils veulent scanner les codes barre en caisse.
Mon formulaire de saisie fonctionne parfaitement si j'utilise une liste déroulante avec Click (pour test existence fichiers etc)
Lorsque je scanne le produit (ou que je fais un copier coller) la zone s'affiche, mais je n'arrive pas à passer à l'enregistrement suivant de façon automatique (sans toucher au clavier ni à la souris). Ca marche si je fais un clic, ou un tab, mais je voudrais qu'ils puissent scanner les produits "à la suite" sans intervention. Peut-on envoyer un code qui simulerait le "click" et renverrait à la procédure évènementielle du OnClick, ou du LostFocus ?

Faut-il que j'abandonne l'idée de liste déroulante (mais pour l'instant j'ai le même problème avec les zones de texte) ?

Ca fait deux jours que je cherche, ils sont pressés de pouvoir utiliser leur logiciel, et je ne trouve pas!!!!!!!!!!!!!!!!


Damedom Sologne
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 avril 2012 à 19:33
3
Merci
Bonjour,

Je n'y connais pas vraiment grand-chose dans ce domaine, mais je crois savoir que les douchettes agissent comme un clavier et que leur lecture se termine par un retour-charriot.
Il me semble alors que le plus judicieux est de passer par une textbox et son évènement change ===>> lorsque signal retour-charriot reçu ===>> alimentation de la listbox (additem) et effacement du contenu de la textbox (en vue de la prochaine saisie par lecture de la douchette).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de ucfoutu
Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 avril 2012 à 19:40
3
Merci
Simulation à partir d'un commanbutton pour simuler comme la douchette
le static n n'est là que pour "créer" différentes lectures et s'y repérer dans la listbox (rien d'autre). La douchette, elle, envoie SA lecture différente seule.
Private Sub CommandButton1_Click()
  Static n As Integer
  n = n + 1
  TextBox1.Text = "lecture " & n
End Sub


Private Sub TextBox1_Change()
 If TextBox1.Text <> "" Then
   ListBox1.AddItem TextBox1.Text
 End If
 TextBox1.Text = ""
End Sub

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de ucfoutu
NHenry 14209 Messages postés vendredi 14 mars 2003Date d'inscription 23 juin 2018 Dernière intervention - 20 avril 2012 à 19:15
0
Merci
Bonjour,

As-tu essayé de voir si la touche Entrée est appuyée ?
Événement KeyPress ou approchant.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Commenter la réponse de NHenry
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 avril 2012 à 19:49
0
Merci
Et (je viens de tester) :
Si le message de la douchette se termine par un retour chariot ===>>
Private Sub CommandButton1_Click()
  Static n As Integer
  n = n + 1
  TextBox1.Text = "lecture " & n & vbCr
End Sub

Private Sub TextBox1_Change()
 If TextBox1.Text <> "" Then
   ListBox1.AddItem Left(TextBox1.Text, InStr(TextBox1.Text, vbCr) - 1)
 End If
 TextBox1.Text = ""
End Sub


Marche bien.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 22 avril 2012 à 16:04
0
Merci
Merci à vous. Contrairement au copier-coller (avec lequel je faisais mes essais pensant que ça fonctionnait pareil) la douchette envoie un "enter". Comme je saisis le scan dans une liste déroulante, j'ai ajouté un sendkeys ("{tab}") et, si mon produit est testé ok, je passe maintenant directement à l'enregistrement suivant. Ouf. Et merci encore.

Damedom Sologne
Commenter la réponse de damedom41
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 22 avril 2012 à 18:04
0
Merci
Bien
Mais toutefois le SendKeys te jouera des tours si tu installes ton produit sur Win 7 !
Vaut mieux donner le focus à une textbox et utiliser le code que je t'ai montré.
(car alors pas de sendkeys nécessaire).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 22 avril 2012 à 19:14
0
Merci
Merci, je ne savais pas.
Je suis bien ennuyée car je ne veux pas alimenter une list box, mais une zone de formulaire en mode feuille de données, et je veux qu'il aille (si tout va bien) à l'enregistrement suivant, et je ne veux pas que le code aille alimenter ma liste déroulante, mais directement le fichier sous-jacent.
Je vais essayer ta solution dans ma configuration. Elle fonctionne dans ton exemple (j'ai essayé, bien sûr, pour m'en souvenir ensuite) mais là, c'est dimanche d'élections, et je me sens plus citoyenne qu'informaticienne. Mais dès demain, j'essaie d'adapter ta solution à mon problème, et reviens vers toi pour te dire si ça marche, ou si j'ai besoin d'une aide supplémentaire.
Je croyais que sendkeys était une idée géniale ... j'avais tort ! Heureusement que vous êtes là !


Damedom Sologne
Commenter la réponse de damedom41
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 22 avril 2012 à 20:05
0
Merci
Mais rien ne t'empêche d'alimenter directement une feuille Excel au lieu de la listbox !
Il te suffit de faire l'ajout systématiquement au-dessous de la dernière ligne remplie. Appelons-la derlig.
La N° de la dernière ligne remplie de la colonne A est, par exemple :
derlig = Range("A" & rows.count).End(xlup).row
en conséquence, tu dois faire l'ajout en :
Range("A" & derlig + 1)
au lieu d'écrire dans la listbox par AddItem.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 22 avril 2012 à 20:37
0
Merci
Non je suis sous Access en VBA. J'ai deux tables sur ce formulaire :
une table VENTES qui contient l'entête de la "facture", gérée via un formulaire avec des contrôles indépendants
une table VNTDET qui contient n lignes de produits, gérée via un sous-formulaire qui se branche directement sur la table VNTDET, via un affichage "feuille de données".
Le formulaire VENTES possède les champs pères qui renseignent certaines zones du sous-formulaires (champs fils).
Ce sous-formulaire était alimenté, au niveau du produit, par une liste déroulante qui pointe vers un fichier PRODUI ; mais il existe aussi des "produits de remplacement" non commandés mais parfois livrés, qui ne doivent pas être gérés en stock (c'est une épicerie solidaire).
Sur choix du produit : si le produit n'existe pas dans la table produit, alors voir s'il n'existe pas dans la table "remplacement" (si oui aller chercher la référence 'normale" du code de remplacement) ; on force la quantité à 1, on va chercher le prix de vente unitaire dans le fichier PRODUI, on calcule le montant de la ligne et le montant total au fur et à mesure, car les "acheteurs" ne peuvent dépasser un plafond lié au produit.
Ca marchait très bien avec une liste déroulante et l'évènement sur clic.
Maintenant je dois remplacer ce clic sur une liste déroulante par un scan, et faire la même chose, et je n'arrive pas à passer automatiquement à la ligne suivante si les tests le permettent.
Je pense que, ayant l'habitude de fonctionner directement en VBA où je décide, ou non, de faire un addnew, un update ou un delete, je patauge un peu entre les différents évènements on change, before update, etc ... des contrôles et ceux des formulaires.
Dès demain je reprends mes bouquins, et ne vous sollicite que si je n'y arrive pas.

Merci

Damedom Sologne
Commenter la réponse de damedom41

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.