Microsoft 365 Gestion d'un scanneur code barre dans un UserForm

ActeAmau

XLDnaute Nouveau
Bonjour à tous,

Je travailles dans un magasin de pièces de rechange et j'aimerais placer un scanneur code barre à la sortie du magasin de manière à ce que dès qu'une pièce sort, elle puisse être scannée et que sa sortie soit consignée dans un fichier Excel. Actuellement cette opération est réalisée manuellement grâce au formulaire suivant sur lequel l'utilisateur doit remplir le N° de la référence sortie et la quantité.

Formulaire_Sortie_Pieces.PNG

J'aimerais savoir d'une part s'il est possible de conditionner l'ouverture du formulaire sur l'activation du scanneur, autrement dit est ce qu'il est possible de coder le fait que dès que le scanneur s'active, le formulaire s'ouvre ?

D'autre part, lorsque je scanne la référence, le n° s'ajoute parfaitement mais la TextBox "N° de référence" reste active. Comment pourrais-je faire pour que, dès qu'un N° de référence est scanné, la TextBox suivante, soit "quantité" s'active ?

Merci d'avance pour vos réponse.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour ActeAmau,
Peu de réponse n'est ce pas.
Pour que XL puisse "comprendre" l'action sur le scanner il vous faut un driver qui fera l'interface entre le scanner et XL via Windows.
Avait vous ce driver ? Et quelle est la marque et la référence de votre scanner ?
Avec ça on peut regarder si l'information peut être reçue par XL. Dans ce cas, le reste est faisable.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @ActeAmau , @sylvanu , le Forum

Sylvanu a raison, il faut bien choisir ton scanner

Selon mon expérience, la plupart des scanners à main possède une option de transsmission à un classeur excel ouvert (émulation de clavier sur cellule A1). Pour que cette option soit disponible, si il s'agit d'un scanner douchette sans fil,, il convient aussi de désactiver les options possibles de stockage pour une transmission en masse une fois que le scanner est à portée bluetooth d'un ordi portable, mais l'inverse, il faut pour, déclencher ton Userform, que le scanner soit à portée du portable pour transmission immédiate au coup par coup (ensuite un trigger sur Worksheet_Change, captera l'évènement).

Par conséquent, si tu envisages d'acquérir un scanner rien que pour cette tâche, un simple scanner à fil USB devrait suffir en émulation de clavier Attention à le paramétrer en AZERTY si besoin (NB bien rechercher le mode d'emploi sur le site de fabriquant qui sont souvent uniquement en anglais)...

Bon dimanche
@+Thierry
 

ActeAmau

XLDnaute Nouveau
Bonjour @sylvanu,

Merci beaucoup pour votre réponse, effectivement elles sont peu nombreuses.

La ref du scanner que j'utilise est le motorolla DS9208. Je n'ai pas de driver et je ne crois pas qu'il en existe un puisqu'il fonctionne déjà, effectivement comme un clavier de saisie.

Comment pensez vous faire le reste ?

shopping.png
 

ActeAmau

XLDnaute Nouveau
Bonjour @_Thierry,

Merci pour ta réponse.

Mon scanner est un bien en USB et il fonctionne correctement, c'est à dire que lorsque je flashe une référence, le numéro de celle-ci apparait bien dans mon userform. Pas de soucis là dessus.

Ce que je cherche à faire c'est la gestion du userform, à savoir afficher le userform dès qu'une activité devant le flasheur est détectée et d'autre part activer la textbox "Quantité" dès qu'une référence à été flashée.

Je ne suis vraiment pas sûr d'être clair, désolé.

Bonne semaine.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Comment pensez vous faire le reste ?
Aucune idée. Expliquez nous comment cela fonctionne.
Q uand vous déclenchez le scanner, y a t-il une remontée d'informations dans XL ? dans quelle cellule ?
comme le dit Thierry :
le scanner soit à portée du portable pour transmission immédiate au coup par coup (ensuite un trigger sur Worksheet_Change, captera l'évènement).
Si une info est remontée dans une cellule, alors tout le reste est simple à faire.
 

ActeAmau

XLDnaute Nouveau
Voici mon formulaire avant flashage:
Formulaire_Sortie_Pieces.PNG

Et le voici après:
Formulaire_Sortie_Pieces_2.PNG

La référence a bien été ajoutée mais la textbox reste active. J'aimerais qu'une fois la référence scannée, la textbox de dessous s'active.
 

Pièces jointes

  • Formulaire_Sortie_Pieces.PNG
    Formulaire_Sortie_Pieces.PNG
    17.9 KB · Affichages: 43

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @ActeAmau , Sylvanu

Bon c'est déjà une bonne chose si ton scanner "Motorola" est capable d'envoyer dans une cellule d'un classeur actif (pas besoin que le UserForm soit ouvert, par contre).

Ensuite il suffit que dans le fameux classeur ouvert, dans le Private Module de la Feuille Active, tu aies mis ce genre de Trigger :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    If Target.Value <> "" Then
        With UserForm1
            .TextBox1.Value = Target.Value
            .TextBox2.SetFocus
            .Show
        End With
    End If
End If
End Sub

Si c'est bien A1 qui reçoit le résultat du code barres scanné. Et si bien entendu tu as un UserForm1, TextBox1 et Texbox2...
Par la suite, il faudra voir aussi sur ta Base de Données, les codes et différentes Data qui doivent être retournées suite à l'identitication du Code à Barres (Soit une boucle, soit un "Find", etc...)

Bonne semaine
@+Thierry
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Pour ton exemple, alors le Trigger serait dans le UserForm :

Code:
Private Sub TextBox1_Change()
     Me.TextBox2.SetFocus
End Sub

Mais perso je préfère fermer le Userform entre chaque scan/flash en enregistrant les données et repartir à zéro depuis la feuille ensuite...

@+Thierry
 

ActeAmau

XLDnaute Nouveau
C'est exactement ce que je veux ! Le problème c'est que, comme le scanneur se comporte comme un clavier qui écrit lettre après lettre, avec ce genre de trigger je ne récupère que le premier numéro de ma référence. Effectivement si on teste ce trigger en entrant manuellement la valeur, dès que vous aurez appuyer sur une touche (et donc que la valeur de la TextBox1 aura changée), le focus va passer à la suivante. La difficulté c'est que mes références n'ont pas toute la même taille donc je ne peux pas émettre de condition sur la longueur de la chaîne.

Code:
Private Sub TextBox1_Change()
     Me.TextBox2.SetFocus
End Sub

Merci en tous cas pour votre aide c'est vraiment généreux de votre part.
 

ActeAmau

XLDnaute Nouveau
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    If Target.Value <> "" Then
        With UserForm1
            .TextBox1.Value = Target.Value
            .TextBox2.SetFocus
            .Show
        End With
    End If
End If
End Sub

Ce code m'a l'air génial, malheureusement, malgré avoir fait bien attention de renommer le Userform et les Textbox, rien ne se passe. Pourtant lorsque je scanne une référence son numéro s'affiche bien en A1.
 

ActeAmau

XLDnaute Nouveau
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    If Target.Value <> "" Then
        With UserForm1
            .TextBox1.Value = Target.Value
            .TextBox2.SetFocus
            .Show
        End With
    End If
End If
End Sub

Autant pour moi ça fonctionne à merveille (je l'avais pas mis sur la bonne feuille ...) excepté le fait qu'il faut appuyer sur "Entrer" après avoir flashé. Existe-t-il un moyen d'avoir un "entrer" automatique dès que la valeur est saisie ?

Merci mille fois à vous deux pour le travail déjà accompli !
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re bonjour

Il faut voir si le scanneur a une option de "ENTER" ou au moins de "CRLF" (Carriage Return / Line Feed) en fin de lecture/transmission du code...
Sinon, il faudrait savoir si il y a une longueur de chaine de caractères immuable (six dans un de tes screen shots), dans ce cas il faudrait voir pour déclenchement depuis le Textbox du Userform alors...

@+Thierry
 

Discussions similaires

Réponses
36
Affichages
2 K

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib