gestion erreur de saisie dans userform

sri75

XLDnaute Occasionnel
bonjour dans un userform je demande une saisie numérique dans ma textbox2

mais je peux avoir des chiffres à virgule et seul le point (.) est accepté par le userform
pour gérer l'erreur de saisie j'utilise la commande suivante

X = Val(Replace(calcul.TextBox2.Value, ",", "."))

qui remplace la , par un point en cas d'erreur de saisie, jusqu'a là pas de pb !

j'aimerais rajouter d'autres controles comme ci-dessous en cas de saisie de ? ou de ; au lieu du .

X = Val(Replace(calcul.TextBox2.Value, "?", "."))
X = Val(Replace(calcul.TextBox2.Value, ";", "."))

Merci de votre aide
 

job75

XLDnaute Barbatruc
Re : gestion erreur de saisie dans userform

Bonjour sri75,

Si vous voulez contrôler beaucoup :

Code:
Dim t, X, i As Byte 'ou Dim t As Variant, X As Variant, i As Byte
t = Array(",", ";", "?", ":", "!", "*") 'etc...
X = calcul.TextBox2 'calcul. pas nécessaire si l'on est dans le code de l'USF calcul
For i = LBound(t) To UBound(t)
X = Replace(X, t(i), ".")
Next
X = Val(X)

Edit : hum, des erreurs, pas en forme ce matin...

A+
 
Dernière édition:

sri75

XLDnaute Occasionnel
Re : gestion erreur de saisie dans userform

effectivement ca bloque avec une erreur tableau

"Tableau attendu
Un nom de variable accompagné d'un indice indique que la variable est un tableau. Cause et solution de cette erreur :

La syntaxe que vous avez spécifiée est correcte pour un tableau, mais la portée ne comporte aucun tableau de ce nom.
Vérifiez l'orthographe du nom de la variable. Si le module ne contient pas Option Explicit, une variable est créée lors de la première utilisation. Si vous orthographiez mal le nom d'une variable tableau, la variable peut être créée, mais pas en tant que tableau. "

je continue de chercher, merci de votre aide
 

sri75

XLDnaute Occasionnel
Re : gestion erreur de saisie dans userform

Merci ca fonctionne très bien; juste une question pour bétonner la gestion d'erreur.

Actuellement si l'opérateur tape un autre caractère alphanumérique que ceux prévus dans la liste de remplacement ( ex $ * ! etc ) la macro zappe la deuxième patie du chiffre et calcule sur la première partie

ex si je tape 5£2 ma macro va calculer sur 5, comment faire pour exclure ce risque ou bien pour prévenir d'une muavaise saisie ?

merci
 

job75

XLDnaute Barbatruc
Re : gestion erreur de saisie dans userform

Re,

Vous pouvez contrôler l'entrée de valeurs numériques par cette macro :

Code:
Private Sub TextBox1_Change()
If Not IsNumeric(Replace(TextBox1, ",", ".")) And _
  Not IsNumeric(Replace(TextBox1, ".", ",")) Then TextBox1 = ""
End Sub

Elle permet d'utiliser aussi bien le point que la virgule comme séparateur décimal, que ce soit au cours de la frappe ou dans les Options régionales du Panneau de configuration.

De plus elle fonctionne aussi si l'on essaie d'entrer quelque chose par Copier/Coller dans la TextBox.

Ensuite bien sûr dans une autre macro (celle d'un bouton), vous pouvez écrire par exemple :

Code:
X = Val(Replace(TextBox1, ",", "."))
Cells(1, 1) = X

A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : gestion erreur de saisie dans userform

bonjour Sri, Job, bonjour le forum,

On peut aussi faire ça avec la procédure KeyPress qui utilise le code ascii de la touche :
Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'à la frappe sur une touche
Select Case KeyAscii 'prend en compte le code de caractère asscii de la touche frappée
    Case 44 'cas de la virgule
        KeyAscii = 46 'remplacée par un point
    Case Is < 48, Is > 57 'cas d'une valeur alphabétique
        KeyAscii = 8 'remplacé par un retour arrière
    End Select
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 354
Messages
2 087 545
Membres
103 584
dernier inscrit
Serka