IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Lecteur code à barre et TextBox


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut Lecteur code à barre et TextBox
    Bonjour,

    Je développe un petite application pour la gestion de pièces de rechange. Dans une feuille de mon clsseur sont stockées les données liées à mes pièces.

    A l'ouverture de mon classeur, j'affiche un Userform qui contient 1 Textbox et 1 ListBox pour ne pas citer le reste.

    Le principe est: Je scanne un code à barre, le résultat est affiché dans ma TextBox, une macro recherche dans mon fichier si l'article existe. Si oui, il récupère les données et me les affiches dans une ListBox.

    Jusque là tout va bien (enfin presque), mes problèmes sont:
    -Je n'arrive pas à remettre le focus dans ma textbox malgré la fonction .SeFocus puisque quand je scanne je perd le focus puisque qu'il remplit ma ListBox...
    -Que dois-je utiliser comme fonction pour ma TextBox pour laisser le temps d'affichage de l'article dans la TextBox *_AfterUpdate() ou *_Change()? Copier /coller au clavier c'est bon mais trop rapide avec une douchette

    Merci par avance pour votre aide.

    Ci-joint mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    Private Sub CommandButton1_Click()
    'Sortie de macro si aucune donnée dans la listbox
        If ListBox1.ListCount = 0 Then Exit Sub
     
        Dim Un() As String ' tableau vide
        Dim Deux() As String
        Dim Nb() As Long
        Dim sup As String
        Dim resultat As String
        Dim i As Long ' variables
        Dim j As Long
        Dim k As Long
        Dim l As Long
     
        If Main_menu.ListBox1.ListCount < 0 Then: Exit Sub ' liste vide
        ReDim Un(Main_menu.ListBox1.ListCount) ' espece(NbEnregisListe
        ReDim Deux(Main_menu.ListBox1.ListCount)
        ReDim Nb(Main_menu.ListBox1.ListCount)
     
        For i = 1 To Main_menu.ListBox1.ListCount ' charge Un<-Main_menu.ListBox1
            Un(i) = Main_menu.ListBox1.List(i - 1, 0) & " " & Main_menu.ListBox1.List(i - 1, 1) & " " & Main_menu.ListBox1.List(i - 1, 2) & " " & Main_menu.ListBox1.List(i - 1, 3)
        Next i
     
        For i = 1 To Main_menu.ListBox1.ListCount ' TEST
            k = 0
            For j = 1 To Main_menu.ListBox1.ListCount ' compte combien de chaque
                If Un(i) <> "" And Un(i) = Main_menu.ListBox1.List(j - 1, 0) & " " & Main_menu.ListBox1.List(j - 1, 1) & " " & Main_menu.ListBox1.List(j - 1, 2) & " " & Main_menu.ListBox1.List(j - 1, 3) Then k = k + 1
            Next j
     
            If Un(i) = "" Then
                Deux(i) = Un(i) & "" & k ' écrit objet + nombre
            Else
                Deux(i) = Un(i) & " quantité " & k ' écrit objet + nombre
            End If
            sup = Un(i) ' suprime objet de la recherche
            For l = 1 To Main_menu.ListBox1.ListCount
                If sup = Un(l) Then: Un(l) = ""
            Next l
        Next i
     
        resultat = ""
        k = 0
     
        For i = 1 To Main_menu.ListBox1.ListCount ' retasse le 0
            If Len(Deux(i)) > 2 Then
                resultat = resultat & Deux(i) & Chr(13) & Chr(10)
                k = k + 1
            End If
        Next i
     
        resultat = resultat & "Total des échantillons: " & Main_menu.ListBox1.ListCount '& _
     
        MsgBox resultat
     
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set a = fs.CreateTextFile("C:\temp\Sparepart.log", True)
        a.WriteLine (resultat)
     
        a.Close
     
    End Sub
     
    Private Sub Effacer_liste_Click()
        ListBox1.Clear
    End Sub
     
    Private Sub SCANBOX_AfterUpdate()
        'Si valeur inputbox vide alors...
        If SCANBOX.Value = "" Then
            'Aucune action effectuée dans notre cas
     
        'Si valeur inputbox non vide on lance la procédure de recherche Search()
        ElseIf Len(SCANBOX) >= 10 Then
            Search
        Else
        End If
    End Sub
     
    Private Sub UserForm_Initialize()
     
    'Nom de l'application
       Main_menu.Caption = "MON_APPLICATION"
     
    'Masquage des valeurs par défaut des labels retour d'information suivants
        INFORMATION.Caption = ""
        REFERENCE_MHP.Caption = ""
        DESIGNATION.Caption = ""
        CARACTERISTIQUE.Caption = ""
        EMPLACEMENT.Caption = ""
     
    'Nombre et largeur de colonne de la ListBox (10 maximum)
        ListBox1.ColumnCount = 5
        'ListBox1.ColumnWidths = "0;105;95;70;55"
     
    'Focus dans la SCANBOX
        SCANBOX.SetFocus
    End Sub
     
    Sub Search()
     
    'Delai pour essai
        'Application.Wait DateAdd("s", 1, Now)
     
    'Sélection de la feuille de travail
        Sheets("FEUIL1").Select
     
    'On détermine la dernière ligne de la colonne A
        lastrow = Range("A" & Rows.Count).End(xlUp).Row
     
    'On détermine la plage de recherche
        Dim ht As Range
        SearchValue = SCANBOX.Value
        Set ht = Sheets("FEUIL1").Range("A1:A" & lastrow).Find(SearchValue, LookIn:=xlValues, lookat:=xlWhole)
     
    'Si recherche fructueuse...
        If Not ht Is Nothing Then
            'MsgBox ht.Address
            x = ht.Row
            y = ht.Column
     
    'Incrémentation de la quantité à réapprvisionner
            INFORMATION.Caption = "Article trouvé ligne " & x
            REFERENCE_MHP.Caption = Cells(x, 1).Value
            DESIGNATION.Caption = Cells(x, 2).Value
            CARACTERISTIQUE.Caption = Cells(x, 3).Value
            EMPLACEMENT.Caption = Cells(x, 4).Value
     
    'On alimente la ListBox
            ListBox1.AddItem
            ListBox1.Column(0, ListBox1.ListCount - 1) = Cells(x, 1)
            ListBox1.Column(1, ListBox1.ListCount - 1) = Cells(x, 2)
            ListBox1.Column(2, ListBox1.ListCount - 1) = Cells(x, 3)
            ListBox1.Column(3, ListBox1.ListCount - 1) = Cells(x, 4)
            ListBox1.Column(4, ListBox1.ListCount - 1) = Cells(x, 5)
     
            Set ht = Nothing
     
    'Si recherche non fructueuse...
        Else
            INFORMATION.Caption = "Article non trouvé"
            REFERENCE_MHP.Caption = ""
            DESIGNATION.Caption = ""
            CARACTERISTIQUE.Caption = ""
            EMPLACEMENT.Caption = ""
            MsgBox "Référence " & SearchValue & " non trouvée."
        End If
     
     
    'Remise à zéro valeur contenue dans l'inputbox
        SCANBOX.Value = ""
        SCANBOX.SetFocus
     
    End Sub

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Il faut utiliser l'évènement kepressed de la texte box tester le code ascii 10 (fin de ligne)

  3. #3
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut
    La fonction keyPressed() ne correspond pas à mes besoins (ou je dois mal l'utiliser).

    J'essai avec plein de fonction mais je dois mal codé je pense...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'je teste la fin du scan!
     If KeyAscii = 10 Then MsgBox TextBox1
    End Sub

  5. #5
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut
    J'ai testé mais rien ne se passe...
    Au final, je pense que VBA ne peut pas faire ce que je veux... dommage...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Pourtant la douchette se comporte com un clavier.

  7. #7
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut
    Je suis bien d'accord, mais je ne comprend pas pouruoi cela ne fonctionne pas... Peut-être que j'ai des options non activées au niveau de ma TextBox ou au niveau des références VBA...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Positionnes toit sur l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If KeyAscii = 10 Then MsgBox TextBox1
    et appuis sur [F9] pour vérifier.

  9. #9
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut
    Je dois être très c**...

    D'une il me manque une bonne partie de l'affichage de mon code à barre et de deux la fonction que vous me demander de tester me renvoie 70 et non 10

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonsoir normal le texte arrive caractères par caractères. Il faut faire [f5] plusieurs fois.

    Mais en tous cas l'éventement keypress fonctionne.

    Le test proposé n'avait pour but que de rester le fonctionnement de kepress.

    Si non le test à faire es soit sur le retour chariot 10 soit sur la fin de ligne 13.

    70 représente la lettre F c'est pour cela qu'on attend le caractère du retour chariot ou de fin de ligne vue qu'ils nous arrivent 1 par 1.

    http://www.toutimages.com/codes_caracteres.htm

    C'est exactement comme si tu saisissais le code barre au clavier caractère par caractère.
    Dernière modification par Invité ; 04/06/2018 à 17h53.

Discussions similaires

  1. Lecteur code barre et Access 2000
    Par DMboup dans le forum Access
    Réponses: 11
    Dernier message: 17/06/2006, 14h05
  2. [Débutant][PS2] Communication avec lecteur code-barre
    Par FreeCake dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/02/2006, 15h14
  3. [Comm]Lecteur code barre
    Par nicotine002 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 31/12/2005, 18h44
  4. comment lire apartir d'un lecteur code barre
    Par saim mohamed dans le forum Langage
    Réponses: 4
    Dernier message: 12/09/2005, 10h57
  5. [HARDWARE] [Conseil] Lecteur code barre
    Par Ni(o dans le forum Périphériques
    Réponses: 4
    Dernier message: 22/06/2004, 19h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo