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.
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+
@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
Bonsoir,
merci pour la réponse, mais les textbox sont bien indexés dans la procédure. Je viens de revérifier.
En fait, ma procédure fonctionnait bien auparavant; je ne vois pas ce que j'aurais pu modifier.
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+
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