XL 2019 Imposer une virgule au lieu d'un point dans textbox; procédure ne fonctionne pas

donpopo

XLDnaute Occasionnel
Bonsoir le forum;
dans mon programme, j'utilise sur plusieurs textbox de différents userform la procédure ci-dessous:
VB:
'-------------------------------------------------------------
'imposer encodage de chiffres, d'une virgule pour facture eaux
'-------------------------------------------------------------
Private Sub textbox202_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = 46 Then KeyAscii = 44
    If InStr("1234567890,", Chr(KeyAscii)) = 0 Or TextBox202.SelStart > 0 And Chr(KeyAscii) = "-" Or InStr(TextBox202.Value, ",") <> 0 And Chr(KeyAscii) = "," Then
        KeyAscii = 0: Beep
    End If
End Sub

Cela fonctionne pour tous mes textbox sauf 2 (dont celui en question dans l'exemple ci-dessus). Si je clique sur le point, celui-ci ne se convertit pas en virgule.
Je ne comprends pas très bien ce qui empêche le point d'être remplacé par une virgule.

Si quelqu'un a une idée, merci d'avance,
donpopo
 
Solution
Merci à tous trois,
je ne sais pas ce qu'il s'est passé, mais j'ai fait un copier/coller d'une procédure dans un autre userform et j'ai modifier l'index du textbox en fonction et cela fonctionne.Encore merci et
A+

cathodique

XLDnaute Barbatruc
Bonsoir,

@donpopo : Vérifie le n° de textbox s'il correspond. Car avec le genre de code on fait des copier/coller et on omet de modifier le n° (index textbox).
Private Sub textbox202_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 46 Then KeyAscii = 44
If InStr("1234567890,", Chr(KeyAscii)) = 0 Or TextBox202.SelStart > 0 And Chr(KeyAscii) = "-" Or InStr(TextBox202.Value, ",") <> 0 And Chr(KeyAscii) = "," Then
KeyAscii = 0: Beep
End If
End Sub
 

job75

XLDnaute Barbatruc
Bonsoir donpopo, cathodique, ChTi160,
En fait, ma procédure fonctionnait bien auparavant; je ne vois pas ce que j'aurais pu modifier.
Pas du tout, il suffit de tester, avec le code du post #1 on ne peut pas mettre un tiret devant un nombre.

Pour y parvenir il suffit d'ajouter un tiret au début du 2ème test :
VB:
If InStr("-1234567890,", Chr(KeyAscii)) = 0 Or
A+
 

donpopo

XLDnaute Occasionnel
Bonsoir Jean-Marie, job75,
j'ai beau tout essayer; cela ne fonctionne pas: le point reste le point.

VB:
If InStr("-1234567890,", Chr(KeyAscii)) = 0 Or TextBox202.SelStart > 0 Or InStr(TextBox202.Value, ",") <> 0 And Chr(KeyAscii) = "," Then
 

donpopo

XLDnaute Occasionnel
Merci à tous trois,
je ne sais pas ce qu'il s'est passé, mais j'ai fait un copier/coller d'une procédure dans un autre userform et j'ai modifier l'index du textbox en fonction et cela fonctionne.Encore merci et
A+
 

patricktoulon

XLDnaute Barbatruc
bonjour
sans parler de classe tu peux déjà faire une sub générique pour x textboxs

ici les deux textboxs utilisent le même pseudo keypress
VB:
Private Sub texto_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 With ActiveControl
 If KeyAscii = 46 Or KeyAscii = 44 Then KeyAscii = IIf(InStr(.Value, ",") > 0 Or Len(.Value) = 0, 0, 44)
    If InStr(1, "0123456789,", Chr(KeyAscii)) = 0 Then KeyAscii = 0
  End With
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
texto_KeyPress KeyAscii
End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
texto_KeyPress KeyAscii
End Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette