Textbox en écriture scientifique

Hellodie45 -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je suis débutante en VBA Excel et je cherche à savoir la méthode pour "paramètrer" une textbox (dans un userform) pour qu'elle n'accepte qu'un format scientifique (par exemple : 1,23E+02).
Petites précisions :
- l'utilisateur peut entrer un "point" ou une "virgule" pour le séparateur décimal (qui sera obligatoirement transformé en virgule).
- si l'utilisateur entre par exemple : 3,58e+05, la donnée sauvegardée sera 3,58E+05 (transformation du "e" en "E")..
- le format accepté : ****X,XXE+XX ou un entier ou un nombre décimal aux centièmes près.
- les caractères acceptés sont les suivants : "0123456789.,Ee+"

voici le code que j'ai pour le moment :

- un pour n'accepter que du numérique et convertir les "." en ","

Private Sub TextBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Const entrees_decimales_permises = ".,0123456789" & vbCr & vbBack
Const Point = "."
Const Virgule = ","

If KeyAscii = Asc(Point) Then
If InStr(TextBox, Virgule) = 0 Then
KeyAscii = Asc(Virgule)
Else
KeyAscii = 0
Beep
Erreur = MsgBox("Il y a déjà une virgule.", , "Erreur")
End If
ElseIf InStr(entrees_decimales_permises, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
Beep
Erreur = MsgBox("La donnée doit être un nombre entier ou décimal positif aux centièmes près.", , "Erreur")
ElseIf InStr(TextBox, Virgule) > 0 And KeyAscii = Asc(Virgule) Then
KeyAscii = 0
Beep
Erreur = MsgBox("Il y a déjà une virgule.", , "Erreur")
End If

End Sub

- un autre qui permet de bloquer la saisie de l'utilisateur pour un décimal aux centièmes près (code donné par pijaku que je remercie beaucoup)

Private Sub TextBox_Change()

If Len(TextBox) = 0 Then TextBox.MaxLength = 255
If Right(TextBox, 1) = "." Or Right(TextBox, 1) = "," Then
TextBox.MaxLength = Len(TextBox) + 2
End If

End Sub

Merci d'avance.

Hellodie45

A voir également:

1 réponse

pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
Salut,
Comment va?
Je pense que ce code satisfait à tous tes critères :
Private Sub TextBox1_Change() 
Dim valeur As Byte 
If Right(TextBox1.Value, 1) = "." Then 
    TextBox1.Value = Replace(TextBox1.Value, ".", ",") 
End If 
If Right(TextBox1, 1) = "," Then 
    TextBox1.MaxLength = Len(TextBox1) + 5 
End If 
valeur = Len(TextBox1) 
If valeur = TextBox1.MaxLength - 3 Then 
    TextBox1 = TextBox1 & "E" 
End If 
End Sub

Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
0