Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/01/2012, 13h19   #1
Invité régulier
 
Inscription : avril 2010
Messages : 45
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 45
Points : 8
Points : 8
Par défaut Formatage des caratères pour de la saisie code barres

Bonjour,

Lorsque je connecte un lecteur code barre à mon ordinateur, il faut que j'appuie sur la touche Capslock, pour que les chiffres soient lus correctement sur le code-barres.
Pour faire simple, si je lis le texte "22" avec mon lecteur code barre :
- Si ma touche Caps Lock est sactivée le texte lu est "éé"
- Si ma touche Caps Lock est activée le texte lu est "22"

Je souhaiterai transformer automatiquement les code "éé" en "22".
J'ai essayé via le code UCASE(userform.textboxX), ça ne fonctionne pas, car ça remonte d'autres caractères que "2". En fait la Majuscule de "é" ne donne pas "2", ce qui est normal)

Avez vous une idée, autre que de revérifier via une boucle tous les caractères ? Le but est de ne pas ralentir les saisies.

Merci,

@+

Olivier
mcog2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 13h47   #2
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
bonjour
je suppose que ton ordi n'a pas le clavier numérique sur la droite? c'est donc un portable sans çà je ne vois pas pourquoi si ce n'est que le lecteur de ton code barre est codé différemment
il va donc te falloir jouer d'astuce et te servir d'un ou plusieurs array

ou de constantes déclarée en haut de module

au plaisir

re
sinon une fonction toute simple

Code :
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
 
Dim tableau As Variant
Sub conversion_letre_en_chiffre()
'un exemple
'toute la chaine des touche d'en haut séparée par deux point a chaque caractere
nombreconverti = "&:é:" & Chr(34) & ":):':(:-:è:_:ç:à"
 
tableau = Split(nombreconverti, ":")
For i = 0 To 10 ' puisqu'il y a 10 touche de 1 a 0
moncode = moncode & lettre_symbole_en_chiffre(tableau(i)) 'on envoie le caractere a la fonction en parametre
Next
MsgBox moncode
 
End Sub
Function lettre_symbole_en_chiffre(signe)
Select Case signe
Case "&"
lettre_symbole_en_chiffre = 1
Case "é"
lettre_symbole_en_chiffre = 2
Case Chr(34)
lettre_symbole_en_chiffre = 3
Case "'"
lettre_symbole_en_chiffre = 4
Case "("
lettre_symbole_en_chiffre = 5
Case "-"
lettre_symbole_en_chiffre = 6
Case "è"
lettre_symbole_en_chiffre = 7
Case "_"
lettre_symbole_en_chiffre = 8
Case "ç"
lettre_symbole_en_chiffre = 9
Case "à"
lettre_symbole_en_chiffre = 0
 
End Select
 
End Function
il faudrai que tu m'envoie une chaine de caractere que te sort ton lecteur pour adapter la fonction


au plaisir

et voila la sub qui corespondrait plus a ce que tu cherche

il te reste qu'a attribuer a la variable "chaine_à_convertir" ce que te sort ton lecteur

Code :
1
2
3
4
5
6
7
8
 
Sub conversion_letre_en_chiffre2()
chaine_à_convertir = "&é" & Chr(34) & "'()-è_çà" 'ici comme exemple j'ai mis toute les touches
For i = 1 To Len(chaine_à_convertir)
moncode = moncode & lettre_symbole_en_chiffre(Mid(chaine_à_convertir, i, 1))  'on envoie le caractere a la fonction en parametre
Next
MsgBox moncode
End Sub
dis moi si tu ne comprend pas
au plaisir

et voila tout dans la fonction

Code :
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
 
Sub conversion_letre_en_chiffre2()
chaine_à_convertir = "&é """ & "'" & "(-è_çà" 'ici comme exemple j'ai mis toute les touches
'on affiche le résultat dans un message en evoyant la chaine a la fonction
MsgBox lettre_symbole_en_chiffre2(chaine_à_convertir)  'on envoie la chaine directement a la  fonction en parametre
End Sub
 
Function lettre_symbole_en_chiffre2(chaine)
For i = 1 To Len(chaine)
signe = Mid(chaine, i, 1)
Select Case signe
Case Chr(38)
lettre_symbole_en_chiffre2 = lettre_symbole_en_chiffre2 & 1
Case Chr(233)
lettre_symbole_en_chiffre2 = lettre_symbole_en_chiffre2 & 2
Case Chr(34)
lettre_symbole_en_chiffre2 = lettre_symbole_en_chiffre2 & 3
Case "'"
lettre_symbole_en_chiffre2 = lettre_symbole_en_chiffre2 & 4
Case Chr(40)
lettre_symbole_en_chiffre2 = lettre_symbole_en_chiffre2 & 5
Case Chr(45)
lettre_symbole_en_chiffre2 = lettre_symbole_en_chiffre2 & 6
Case Chr(232)
lettre_symbole_en_chiffre2 = lettre_symbole_en_chiffre2 & 7
Case Chr(95)
lettre_symbole_en_chiffre2 = lettre_symbole_en_chiffre2 & 8
Case Chr(231)
lettre_symbole_en_chiffre2 = lettre_symbole_en_chiffre2 & 9
Case Chr(224)
lettre_symbole_en_chiffre2 = lettre_symbole_en_chiffre2 & 0
 
End Select
Next
End Function
au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 16h24   #3
Invité régulier
 
Inscription : avril 2010
Messages : 45
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 45
Points : 8
Points : 8
Je regarde cela demain matin.
Mais je tiens tout d'abord à te remercier, je vais analyser cela.
Dans tous les cas, j'informerai sur le forum.
Merci,
@+
Olivier
mcog2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 16h49   #4
Candidat au titre de Membre du Club
 
Inscription : décembre 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 12
Points : 14
Points : 14
Par défaut Plus simple peut-être

La plus part des lecteurs codes barres peuvent être paramétré grâce à une série de codes barres réuni dans un livret. Souvent seul les principaux sont fournis avec le lecteur mais la collection complète peut en général être téléchargée sur Internet.
Si vous avez la collection complète, il est possible de paramétré le lecteur codes barres pour qu'il envoi toujours des chiffres vers le PC même si le clavier est en minuscule.
J'espère vous avoir aidé.

Serge
SergeKSL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 23h33   #5
Invité régulier
 
Inscription : avril 2010
Messages : 45
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 45
Points : 8
Points : 8
Merci de votre aide,
@+
Olivier
mcog2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 00h01   #6
Membre expérimenté
 
Inscription : décembre 2006
Messages : 645
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 645
Points : 595
Points : 595
Envoyer un message via Skype™ à ESVBA
Bonsoir MCOG2 et Paricktoulon,

et en utilisant un code pour forcer l'état du bouton ? (à boucler pour garantir l'état)

Code VB6 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Private Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
 
Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type
 
Dim kbArray As KeyboardBytes
 
Sub SetCapsLock(c As boolean)
    GetKeyboardState kbArray
    kbArray.kbByte(&H14) = c
    SetKeyboardState kbArray
End Sub
'Mettre dans le code :
'Majuscule : SetCapsLock True
'Minuscule : SetCapsLock False
ESVBA
ESVBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 14h25   #7
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour esvba

je ne sais pas si ton code concerne les touche du clavier et le sujet parle de lecture de codebarre avec un lecteur infrarouge je suppose
cela dit il est interressant pour d'autre application

pour mcog2
tu nous remercie mais tu nous dis pas comment ton probleme
a été résolu ,il peut peut etre interressant pour quelqu'un d'autre
il serait utile de déposer un bout de code


au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 10h42   #8
Invité régulier
 
Inscription : avril 2010
Messages : 45
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 45
Points : 8
Points : 8
ESVBA,
Ton idée me parait bien,
J'ai ouvert un classeur vierge, j'ai inséré le code proposé :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Private Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
 
Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type
 
Dim kbArray As KeyboardBytes
 
Sub SetCapsLock(c As Boolean)
    GetKeyboardState kbArray
    kbArray.kbByte(&H14) = c
    SetKeyboardState kbArray
End Sub
Sub test()
SetCapsLock True
End Sub
'Majuscule : SetCapsLock True
'Minuscule : SetCapsLock False
J'ai lancer "test", mais je ne vois pas l'tat de ma touche capslock s'allumer, j'ai du zapper un truc.
En toute honnêteté, je ne capte pas tout le code proposé.
Merci,
@+
Olivier

PatrickToulon,
J'ai intégré ta remarque, je proposerai la solution choisie,
@+
Olivier
mcog2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 11h01   #9
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 715
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 715
Points : 3 655
Points : 3 655
Salut, pour CapsLock dans un module de classe baptisé mKeyBoard
Code :
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
Option Explicit
 
Private Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As _
                                                                 Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetKeyState Lib "User32" (ByVal nVirtKey As Long) As _
                                     Integer
Private Declare Function MapVirtualKey Lib "User32" Alias "MapVirtualKeyA" _
                                       (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Const VK_CAPITAL = &H14
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
 
Public Sub SetKeyState(ByVal Key As Long, ByVal State As Boolean)
    keybd_event Key, MapVirtualKey(Key, 0), KEYEVENTF_EXTENDEDKEY Or 0, 0
    keybd_event Key, MapVirtualKey(Key, 0), KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
    If Key = 20 And State = False Then
        keybd_event 16, 0, 0, 0
        keybd_event 16, 0, 2, 0
    End If
End Sub
 
Public Property Get CapsLock() As Boolean
    CapsLock = GetKeyState(VK_CAPITAL) = 1
End Property
 
Public Property Let CapsLock(ByVal Value As Boolean)
    SetKeyState VK_CAPITAL, Value
End Property
Dans un module standard
Code :
1
2
3
4
5
6
7
Option Explicit
 
Dim cls As New mKeyBoard
 
Sub Tst()
    If cls.CapsLock = False Then cls.CapsLock = True
End Sub
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h12.


 
 
 
 
Partenaires

Hébergement Web