Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Forcer l'utilisation d'un lecteur code barre

Phil69400

XLDnaute Nouveau
Bonjour à tous,

Pour ma boite, j'ai besoin, depuis une le scan d'un code barre, d’attribuer des documents de production.
Par contre, pour éviter les erreurs, l'utilisation du lecteur est impérative. Ils n'ont, malheureusement pas tarder à saisir directement le code au clavier...
Format du code barre exemple : DR1111

Par une fonction OnKey, j'inhibe bien des touches, mais je ne trouve pas de solution pour faire la même chose avec les lettres "D ou R", qui me semblai une bonne idée versus le format obtenu par le lecteur, toujours le préfixe DR...

J'ai trouvé aussi un tuto sur l'utilisation d'un timer/macro lancé au début de la saisi, si on utilise un lecteur code barre = ~instantané, au clavier c'est bien plus long = effacement, mais je me suis perdu dans les explications

Merci pour vos solutions, attention, merci d'être explicite, je suis loin d'être un pro !!!
 
Solution
Bonjour,

Le pb c'est que ta chaine n'est pas de longueur constante.
Une tentative en ajoutant une tempo timerS pour laisser le temps à d'autres caractères d'arriver, et je récupère le nouveau Texbox1.Text.
Je supprime tous les espaces et la chaine doit respecter DR0000*
Si ça varie de 6 à 7 car. ça doit être jouable. Si c'est 6 à 15 ça risque d'être plus scabreux, si tu allonges trop timerS les saisies au clavier risquent de passer.
Ca dépend donc de la réactivité du scanner. Je pense que ça doit être hyper rapide mais bon...
Pour les tests au clavier j'ai du rallonger t clavier à 1s, et j'ai mis timerS à 0.5
Je pense que tu peux baisser timerS à 0.15 s, voire moins. Régler les 2 tempos avec le scanner.
Par curiosité tu pourras...

eriiic

XLDnaute Barbatruc
Bonjour à tous,

J'ai trouvé aussi un tuto sur l'utilisation d'un timer/macro lancé au début de la saisi, si on utilise un lecteur code barre = ~instantané, au clavier c'est bien plus long = effacement, mais je me suis perdu dans les explications
Ca peut être intéressant comme technique, tu pourrais mettre le lien et expliquer où tu coinces

Autre idée : donner un code barre assez long à scanner avant le vrai qui lui sera pris en compte.
La fainéantise fera qu'ils en auront marre de devoir saisir 2 codes barre ou même de devoir faire un copié-collé du 1er ;-)
(copié-collé que l'on peut éventuellement bloquer s'ils n'en ont pas besoin par ailleurs)
eric
 

Phil69400

XLDnaute Nouveau
Bonjour,

Le code barre utilisé est généré par notre système, & correspond au nom donné à nos Données de Réglages (DR), depuis bien longtemps. Aucun changement possible.
Pour la solution timer, voici le lien ► Timer. Il s'agit du message N°5 de Graffito.
Ces explications sont bien trop laconiques pour moi.
A noter, je n'utilise pas de TextBox...
J'ai ajouté une version allégée de mon fichier, si besoin...
Merci
Philippe
 

Pièces jointes

  • Code barre TdeC.xlsm
    63.2 KB · Affichages: 16
Dernière édition:

eriiic

XLDnaute Barbatruc
Bonjour,

l'idée n'était pas de modifier tes codes barres, mais leur en donner un sur plaquette style mot de passe bien compliqué à saisir, à scanner avant le vrai. S'ils ont le scanner en main peu de chance qu'ils s’embêtent à saisir le 2nd.
Tant qu'il n'ont pas scanné la plaquette tu n'enregistres pas le scan suivant.
eric
 

Phil69400

XLDnaute Nouveau
Merci Eric,

Effectivement, je n'avais pas compris cela.

Je vais proposer cette idée, mais, j'appel avec ce fichier des documents pour réaliser une production conforme, & avec un suivi qualité sur des documents dédiés au produit, laisser une faible chance à la production de saisir une information au clavier, donc avec un risque d'erreur, je pense que mon boss me demandera de gratter encore.
Philippe
 

eriiic

XLDnaute Barbatruc
Un essai basé sur timer.
Il faut saisir un code barre de 6 caractères commençant par "DR" en moins de 0.5 s entre chaque caractère.
J'ai mis 0.5 s que ce soit réalisable avec le clavier. A baisser en testant avec le scanner.
VB:
Private Sub TextBox1_Change()
    Static t As Single, noEvents As Boolean
    If noEvents Then Exit Sub
    If Len(TextBox1.Text) = 1 Then
        t = Timer
    ElseIf codeBarreOk(TextBox1.Text) Then
        'traitement du code barre ok
        MsgBox "code barre " & TextBox1.Text & " ok"
        noEvents = True
        TextBox1.Text = ""
        noEvents = False
        ' suite...
    ElseIf Len(TextBox1.Text) > 1 Then
        ' à partir du 2nd caractère
        If Timer - t < 0.5 Then
            ' temps ok
            t = Timer
        Else
        ' trop lent
        noEvents = True
        TextBox1.Text = ""
        noEvents = False
            MsgBox "Utiliser le scanner"
        End If
    End If
End Sub

Private Function codeBarreOk(cb As String) As Boolean
    ' controle (bidon) du cb
    codeBarreOk = Left(cb, 2) = "DR" And (Len(cb) = 6)
End Function
eric
 

Pièces jointes

  • Scanner Code Barre obligatoire.xlsm
    65.3 KB · Affichages: 10

Phil69400

XLDnaute Nouveau
Eric,
Ta solution fonction très bien, par contre, depuis ce code barre, je génère deux liens vers les bons documents, et :
1 - j'ai besoin qu'il reste un temps affiché, pour laisser le temps des deux clics des liens vers les fichiers, pour cela, j'ai masqué les conditions qui vont bien dans ta proposition.
2 - Si possible, recopier le texte obtenu vers ma cellule (E3 onglet "code barre")
3 - Que la zone de texte soit effacée après un temps. Pour l'instant, je laisse 45 secondes avant effacement de la cellule E3, puis, je masque toute la zone... L'outil est utilisé par plusieurs personne, forcer les opérateurs à utiliser "son bon code barre" = bonne production, pas les infos du copain !
4 - Plus simple encore, est-il envisageable d'obtenir la même gymnastique/macro, en utilisant directement la cellule E3 de mon fichier ?

Si tu ne me lis que demain, très bon weekend
 

eriiic

XLDnaute Barbatruc
Vite fait sans trop de contrôle, ma fille venant d'accoucher ;-)
Reste affiché jusqu'au prochain clic dessus ou à la sélection de E7 (à voir si ça ne gène pas l'ouverture du lien)
eric

Edit : erreur de fichier (supprimé), voir plus bas
 
Dernière édition:

Phil69400

XLDnaute Nouveau
Bonjour Eric,

As-tu passé une bon weekend ? ☺

Merci pour ton temps, la macro marche parfaitement, mais...
Sur la bonne centaine de code barre en stock, j'ai un os sur la condition "codeBarreOk", je souhaiterai la rendre plus "plastique", car j'ai une population très hétérogène de code barre, exemple : DR1234, DR 1234, DR12345, DR 12345, & parfois des espaces devant DR !!!
Es-t'il possible d’écrire simplement "codeBarreOk = plus de trois caractères quelconques" ?
Ou une autre astuce de ton cru.

Si je laisse la condition actuelle, je tronque l'écriture du code barre.
VB:
codeBarreOk = Left(cb, 2) = "DR" And (Len(cb) = 6)
J'obtiens "DR 123", pour "DR 12345"

Je ne parviendrai pas à faire bouger le responsable de cette base, de plus, je ne suis pas à l’abri d'une coquille de sa part.

Encore une fois merci !!!
Philippe
 

eriiic

XLDnaute Barbatruc
Bonjour,

Le pb c'est que ta chaine n'est pas de longueur constante.
Une tentative en ajoutant une tempo timerS pour laisser le temps à d'autres caractères d'arriver, et je récupère le nouveau Texbox1.Text.
Je supprime tous les espaces et la chaine doit respecter DR0000*
Si ça varie de 6 à 7 car. ça doit être jouable. Si c'est 6 à 15 ça risque d'être plus scabreux, si tu allonges trop timerS les saisies au clavier risquent de passer.
Ca dépend donc de la réactivité du scanner. Je pense que ça doit être hyper rapide mais bon...
Pour les tests au clavier j'ai du rallonger t clavier à 1s, et j'ai mis timerS à 0.5
Je pense que tu peux baisser timerS à 0.15 s, voire moins. Régler les 2 tempos avec le scanner.
Par curiosité tu pourras communiquer les valeurs qui vont bien ?
VB:
Private Function codeBarreOk(ByVal cb As String) As Boolean
    ' controle (bidon) du cb
    timerS 0.5 ' laisse le temps à d'autres caractères d'arriver
    cb = Replace(TextBox1.Text, " ", "")
    codeBarreOk = cb Like "DR####*"
End Function

Sub timerS(t As Double)
    Dim s As Double
    s = Timer: Do While Timer < s + t: DoEvents: Loop
End Sub
eric
 

Pièces jointes

  • Scanner Code Barre obligatoire.xlsm
    65.2 KB · Affichages: 11

Phil69400

XLDnaute Nouveau
Formidable, ça fonctionne à merveille

Pour les essais & retour :
Je ne connais pas la vitesse de rafraîchissement minimale possible pour les deux timers, je suis passé 0.05, ça fonctionne encore avec 20 caractères !
Je pense que c'est le traitement du lecteur + l'ancienne condition "codeBarreOk" qui entraînaient des problèmes, car un "copier/coller", que j'ai tenté avant la dernière version, fonctionnait parfaitement.

xUpsilon, merci pour ta proposition, mais avec le traitement mystérieux du lecteur de code barre, avec ">3", seulement quatre caractères apparaissaient...

Super forum, merci encore Super Eriiiic...
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…