Se connecter avec
S'enregistrer | Connectez-vous
Résolu

Excel 2003 TextBox comparaison valeurs

Dernière réponse : dans Programmation
Partagez

Bonjour à tous,

J'ai un formulaire avec des textbox ou l'usager entre des valeurs avec ou sans décimales (2 maximum). Je veux faire apparaître un message lorsqu'une valeur plus grande ou égale à 1 000 000 est entrée. Mon code fonctionne bien tant qu'il n'y a pas de ",". Je peux entrer 1,50 et le message apparait.

Voici mon code:
  1. Private Sub CommandButton1_Click()
  2. If TBAjout >= 1000000 Then
  3. MsgBox ("Message")
  4. End If
  5. End Sub


Merci pour vos réponses.

Bonjour,

La variable TBAjout n'est pas déclarée, c'est le nom d'une textbox d'un formulaire... Voici tout de même le code de cette textbox, qui ne fait qu'autoriser un "-" et un point.

Merci

  1. Private Sub TBAjoutRevenu_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  2. Select Case KeyAscii
  3. Case Asc("0") To Asc("9")
  4. Case Asc("-")
  5. If InStr(1, Me.TBAjoutRevenu.Text, "-") > 0 Or Me.TBAjoutRevenu.SelStart > 0 Then
  6. KeyAscii = 0
  7. End If
  8. Case Asc(".")
  9. If InStr(1, Me.TBAjoutRevenu.Text, ".") > 0 Then
  10. KeyAscii = 0
  11. End If
  12. Case Else
  13. KeyAscii = 0
  14. End Select
  15. End Sub

Meilleure solution

Ah, voilà de l'information pertinente.

Donc si TBAjout est un TextBox, ce n'est pas une valeur.
Utilise CDbl(TBAjout.Text) qui est la conversion en réel long du texte contenu dans le champ Text de ta TextBox.

Attention à la gestion du séparateur décimal. Si ton paramétrage est en français, c'est une virgule, pas un point.

Plutôt que tes tests alambiqués pour imposer a priori la saisie à ton utilisateur, vérifie la a posteriori. C'est plus simple. D'autant que ton code ne vérifie rien si l'utilisateur fait un copier/coller par exemple.

Voici la vérification complète :
  1. If IsNumeric(TextBox1.Text) Then
  2. If CDbl(TextBox1.Text) >= 1000000# Then
  3. MsgBox "Message"
  4. End If
  5. Else
  6. TextBox1.Text = ""
  7. TextBox1.SetFocus
  8. MsgBox "Veuillez saisir un nombre", vbCritical
  9. End If
Contenus similaires

Bonjour,

Désolé pour le long délai!

La conversion fontionne très bien et a résolu mon problème. J'utilisais également les "." pour les décimals et maintenant que je n'autorise que les ",", tout fonctionne bien.

Pour mes tests alambiqués, c'est que le résultat voulu est que rien ne soit indiqué dans la textbox si ce n'est pas un chiffre. C'est pourquoi je test la touche pressée à chaque fois. Je suis ouvert à d'autre façons de faire s'il y en a des plus simples.

Je veux également autoriser qu'un seul signe "-" à l'avant du nombre, une virgule seulement, et deux décimales maximum (je travaille encore sur ce dernier!).

Merci!

Salut,

Citation :
Je suis ouvert à d'autre façons de faire s'il y en a des plus simples.

Plus simple, oui. Mais surtout, plus conforme à ce que l'utilisateur a l'habitude de pouvoir faire par ailleurs.

Comme tu ne gères pas tous les cas, et que ce serait de toutes façons trop fastidieux de le faire, je te propose de ne tester la saisie de l'utilisateur que lorsque celui-ci a terminé. Pour le code, c'est facile, reprends ce que je t'ai déjà proposé. Pour l'événement à prendre en considération, c'est LostFocus. Las, tu ne le trouveras pas sous ce nom, pour le composant "Zone de Texte" de VBA/Excel, il s'appelle Exit. Implémente donc TextBox1_Exit() et laisse l'utilisateur saisir n'importe quoi.

Les utilisateurs sont des êtres mauvais qui cherchent par tous les moyens à mettre en défaut l'interface qui nous a tant coûté à mettre à leur disposition :fou: 

Aussi, la gestion de la saisie est quelque chose de bien connue. En anglais, la langue vernaculaire des programmeurs, on dit : Never trust user input.
Posez votre question