Textbox en écriture scientifique
Hellodie45
-
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
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
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:
- Textbox en écriture scientifique
- Écriture facebook - Guide
- Ecriture en gras - Guide
- Ecriture insta - Guide
- Écriture à l'envers miroir - Guide
- Ecriture predictive - Guide
1 réponse
Salut,
Comment va?
Je pense que ce code satisfait à tous tes critères :
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
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? --