exécuter macro apres validation listbox

JORDAN

XLDnaute Impliqué
Bonsoir,

Je suis à la recherche d'infos afin de pouvoir exécuter une macro automatiquement
apres la saisie par un scanner d'une référence dans une listbox, sachant que la fin
du scan se termine par l'exécution de la touche ENTREE.
J ai bien essayé listbox_change mais ça exécute la macro des la saisie du 1er chiffre et j ai
au minimum 11 chiffres à scanner.
déjà, est ce que c'est possible ...
Merci pour vos conseils
 
G

Guest

Guest
Re : exécuter macro apres validation listbox

bonsoir Jordan,

Tu peux éventuellement utiliser l'évènement KeyUp pour intercepter la touche Enter comme ci-dessous, par contre il faut que la listbox ait le Focus donc soit en cliquant dessus soit par un ListBox1.SetFocus placé où tu voudras.

Code:
Private Sub ListBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then  AppelMacro
End Sub

A bientôt pour éventuellement plus de précision.
 

JORDAN

XLDnaute Impliqué
Re : exécuter macro apres validation listbox

bousoir Hasco, david
Merci pour ton code Hasco, je vais le tester de suite, c pour le focus que jai peur parceque en faisant return, le focus se deplace.
on verra bien
encore merci et bonne soirée
 
G

Guest

Guest
Re : exécuter macro apres validation listbox

Re Jordan,

En supposant que ta listbox soit dans un userform (précise le éventuellement)

Pour annuler la touche Enter
Code:
Private Sub ListBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then  
       [COLOR=red]KeyCode =0[/COLOR] 'Annuler la touche
        AppelMacro
    End if
End Sub

A bientôt
 

JORDAN

XLDnaute Impliqué
Re : exécuter macro apres validation listbox

Bonjour Hasco, le Forum,

Désolé pour ma lenteur à te répondre mais un contre temps m'a empêché de continuer hier soir.

J'ai testé ton code ce matin, c est tout à fait ce que je recherchais

pour répondre à ton post :
1- je me suis trompé dans les données mais ça ne change rien
C est 1 textbox et non 1 listbox
2- le textbox est bien dans 1 unserform

En testant ton code, j ai le probleme suivant :

Le temps d'écriture dans le textbox est plus long que le temps de réaction
de ton code, donc AppelMacro s'exécute trop tôt et je n'ai pas la totalité du scan
dans le textbox (en fait je n'ai que le 1er chiffre et rarement le 2eme qui s'affiche,
serait-il possible de rajouter une temporisation avant qu'il ne reconnaisse le RETURN

Encore merci pourton aide
bonne journée et à bientôt
 
G

Guest

Guest
Re : exécuter macro apres validation listbox

Bonjour Jordan, Le forum,

L'évènement Key_Up se déclenche de deux manières:

1- l'utilisateur relâche une touche
2- une macro ou une application envoie un SendKeys (envoie d'un code de touche)

Dans ce que je t'ai donné l'évènement test si le code de touche est vbKeyEnter (valeur:13), dans ce cas il déclanche la macro. Peut-être que ton scan envoie ce code dans le textBox entre chaque chiffre.

Pour le savoir, mets un label provisoire (assez large) sur ton userform et remplace toutes les lignes de l'évènement par quelque chose du genre:

LeLabel.Caption =Label1.Caption & keyCode & "|"

Où LeLabel est le nom de ton label.

Regarde les codes de touche envoyés pendant et en fin de scan puis vois s'il y a des codes 13. Peut-être trouveras-tu un code qui signale la fin d'émission du scan. Tu pourras alors utiliser celui-ci.

Autre possibilité, tester la longueur de la chaine de caratères (si elle est constante) envoyée par le scan.

C'est difficile sans exemple concret de pouvoir t'aider. Les situations varient tellement d'un cas à l'autre.

[Edition] je crois que j'ai mal compris ton dernier post alors:

Si c'est le scan qui envoie le code 13 en fin et que cela va trop vite:
essaie ceci avec une attente d'une seconde.
Code:
    If KeyCode = vbKeyReturn Then  
       KeyCode =0 'Annuler la touche
       Application.Wait (Time + TimeSerial(0, 0, 1))
        AppelMacro
    End if

Si le code ne s'affiche pas avec la méthode précédente, essaie celle-ci

Code:
If KeyCode = vbKeyReturn Then 
     KeyCode =0 'Annuler la touche
     Dim depart
    depart = Time
    Do
      DoEvents
    Loop While Time < depart + TimeSerial(0, 0, 1) 
    AppelMacro
End if
A bientôt
.
 
Dernière modification par un modérateur:

JORDAN

XLDnaute Impliqué
Re : exécuter macro apres validation listbox

Bonjour Hasco,

J ai fait ce que tu m'a dit pour voir les codes envoyés par le scanner
en fait apres chaque chiffre il envoi le code 16 qui correspond à 
étrange ...
à quoi correspond ce symbole pour exel !!!
si tu as des infos, merci je suis preneur
bonne journée
 
G

Guest

Guest
Re : exécuter macro apres validation listbox

Jordan,

Le code ascii 16, est un des caractères non imprimables. Si mes souvenirs sont bons (c'est vieux!!!) le 16 doit être un caractère déchappement lié aux données.

Toutefois, je ne pense pas que ton problème vienne de là. tu peux toutefois supprimer tout ce qui n'est pas chiffre par :

Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
End Sub

La touche 13 devra être quant à elle intercepter dans l'évènement Key_Down et non plus Key_Up.

As-tu tester les deux fonctions d'attente de mon post précédent?

A+
 

JORDAN

XLDnaute Impliqué
Re : exécuter macro apres validation listbox

re Hasco
non désolé je n ai pas encore eu le temps, je suis au boulot toute la journée et ce matin je n ai pas eu le temps, je teste tout ça maintenant
merci pour ton aide
je te tiens au courant de la suite
bon appetit
 

JORDAN

XLDnaute Impliqué
Re : exécuter macro apres validation listbox

re,
en testant les 2 codes ci-dessous, dès que le 1er chiffre est lu, AppelMacro se lance
j'ai même essayé en tapant 1 chiffre avec le clavier et c'est pareil

Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
End Sub
[code/]

[code]
Private Sub ListBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then  
       KeyCode =0 'Annuler la touche
        AppelMacro
    End if
End Sub
[code/]

je continue de chercher
merci
 

JORDAN

XLDnaute Impliqué
Re : exécuter macro apres validation listbox

re,

C est plus clair comme ça

en testant les 2 codes ci-dessous, dès que le 1er chiffre est lu, AppelMacro se lance
j'ai même essayé en tapant 1 chiffre avec le clavier et c'est pareil

Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
End Sub

Code:
Private Sub ListBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then 
KeyCode =0 'Annuler la touche
AppelMacro
End if
End Sub

je continue de chercher
merci
 

JORDAN

XLDnaute Impliqué
Re : exécuter macro apres validation listbox

Re,
oui je suis en cours de test mais j ai un nouveau probleme
mon code qui allait bien avant,ne veut plus maintenant
j ai beau le lire dans tous les sens je ne trouve pas d erreur

Code:
Private Sub CommandButton7_Click()
RefArt = TextBox1.Value
With Sheets("RECEPTION PRESSE")
DerligRef = .Range("A65536").End(xlUp).Row + 1
Cells(DerligRef, 1) = RefArt
End With
Label11.Visible = False
Label13.Visible = True
TextBox1.Visible = False
TextBox2 = ""
TextBox2.Visible = True
TextBox2.SetFocus
CommandButton7.Visible = False
CommandButton8.Visible = True
End Sub

celui-ci est identique et fonctionne tres bien
Code:
Private Sub CommandButton8_Click()
QteArt = TextBox2.Value
With Sheets("RECEPTION PRESSE")
DerLigQte = .Range("B65536").End(xlUp).Row + 1
    Cells(DerLigQte, 2) = QteArt
End With

TextBox1 = ""
TextBox1.Visible = True
Label11.Visible = True
Label13.Visible = False
TextBox2.Visible = False
CommandButton8.Visible = False
CommandButton7.Visible = True
TextBox1.SetFocus

End Sub
En fait le 1er code renvoi la valeur du scan
et le 2eme une quantité saisie au clavier
Si jamais tu trouves quelques choses de mauvais !!!
merci
je continu de mon coté
Merci
 

Discussions similaires

S
Réponses
2
Affichages
955
sébastien
S
S
Réponses
0
Affichages
644
sébastien
S

Statistiques des forums

Discussions
312 611
Messages
2 090 226
Membres
104 452
dernier inscrit
hamzamounir