Récupérer un nombre [VBA-E] - VB/VBA/VBS - Programmation
Marsh Posté le 21-07-2006 à 11:19:18
surikat14 a écrit : Bonjour à tous ! |
tu cherches à récupérer la valeur de textbox ? vartype te retournera une constante.
Marsh Posté le 21-07-2006 à 11:23:00
jpcheck a écrit : tu cherches à récupérer la valeur de textbox ? vartype te retournera une constante. |
En fait, avec Vartype, je veux tester ce que l'utilisateur me rentre. Moi je veux un entier positif mais si l'utilisateur me rentre une lettre ou un nombre décimal par exemple, j'aimerai pouvoir lui dire qu'il y a erreur.
Je viens de trouver la fonction InputBox. Mais si je spécifie que je veux un integer et que l'utilisateur me rentre une lettre ça buggue...
Impasse pour moi là...
Marsh Posté le 21-07-2006 à 11:26:46
en version bourrin tu peux tester en passant par le code ASCII peut être. Sinon quel est ton code qui te bugge lorsque tu mets une lettre ?
Marsh Posté le 21-07-2006 à 11:37:52
jpcheck a écrit : en version bourrin tu peux tester en passant par le code ASCII peut être. Sinon quel est ton code qui te bugge lorsque tu mets une lettre ? |
Private Sub Button_Ouvrir_Plus_Click()
NbPV = InputBox("Combien de PV contient votre fichier", "Nombre de PV à ouvrir", "", 1)
End Sub
En mettant ça, si je rentre une lettre et que je fais OK, alors j'ai une erreur d'exécution "13"...
Marsh Posté le 24-07-2006 à 08:43:20
Pour être sur que la valeur entrée est un entier :
Private Sub TextBox1_Change()
If TextBox1.Text <> "" Then
If Asc(Mid(TextBox1.Text, Len(TextBox1.Text))) >= Asc("1" ) And Asc(Mid(TextBox1.Text, Len(TextBox1.Text))) <= Asc("9" ) Then
'la valeur est un chiffre
Else
' la valeur n'est pas un chiffre je la retire
TextBox1.Text = Mid(TextBox1.Text, 1, Len(TextBox1.Text) - 1)
End If
End If
End Sub
Pour l'utiliser en tant que integer :
Dans la procedure qui appelle ton textbox1, définie une variable en Integer
Dim MaValeur as Integer
MaValeur=Textbox1.text
Ca devrait fonctionner
Marsh Posté le 24-07-2006 à 10:42:25
Je te remercie Paul Hood !! ça m'a bien aidé. Par contre j'ai du un peu modifier ton code puor que ça marche bien. Au final ça donne :
If TextBox1.Text <> "" Then
If Asc(TextBox1.Text) >= Asc("1" ) And Asc(TextBox1.Text) <= Asc("9" ) Then ' La valeur est un chiffre
blablabla
Else
' La valeur n'est pas un chiffre je la retire
Reponse = MsgBox("La valeur entrée n'est pas un entier supérieur à 0", vbOKOnly, "Erreur !!" )
TextBox1.Text = ""
UserForm_Ouverture.TextBox1.SetFocus
End If
End If
Voilà !! Merci bien !! Bonne journée
Marsh Posté le 24-07-2006 à 10:44:44
attention, tu blindes ici pour une saisie entre 1 et 9, l'utilisateur ne pourra-t-il pas choisir au delà de 10 ?
Marsh Posté le 24-07-2006 à 10:48:10
jpcheck a écrit : attention, tu blindes ici pour une saisie entre 1 et 9, l'utilisateur ne pourra-t-il pas choisir au delà de 10 ? |
Si je rentre 10, dans ce cas, je n'ai pas de message d'erreur et lorsque je fais un msgbox avec textbox1.value ou textbox1.text dedans, j'ai bien 10 qui s'affiche. Donc j'en déduis que je récupère bien la bonne valeur, non ?
Marsh Posté le 24-07-2006 à 10:51:46
Si tu as mis le code dans le change de ton textbox tu ne testes que la première position et donc tu dois pouvoir saisir 5ggg
Marsh Posté le 24-07-2006 à 10:55:51
Paul Hood a écrit : Si tu as mis le code dans le change de ton textbox tu ne testes que la première position et donc tu dois pouvoir saisir 5ggg |
Exact !! Mais avec ton code si je rentre -4, alors ça passe. Or moi je veux que des entiers supérieurs ou égaux à 1...
Marsh Posté le 24-07-2006 à 10:58:17
surikat14 a écrit : Exact !! Mais avec ton code si je rentre -4, alors ça passe. Or moi je veux que des entiers supérieurs ou égaux à 1... |
Avec mon code tu ne peux pas saisir le caractère "-" les seuls carateres possibles sont 1,2,3,4,5,6,7,8,9 et 0 les autres ils ne les conservent pas
Marsh Posté le 24-07-2006 à 11:02:48
surikat14 a écrit : Exact !! Mais avec ton code si je rentre -4, alors ça passe. Or moi je veux que des entiers supérieurs ou égaux à 1... |
tu gardes ton code, mais tu ajoutes la condition sur la longueur du texte tapé... tu testes chaque caractere avec les 1 à 9, et si tous les tests sont OK alors tu as bien un nombre, et tu le récupère en tant qu'integer...
Marsh Posté le 24-07-2006 à 11:02:51
Paul Hood a écrit : Avec mon code tu ne peux pas saisir le caractère "-" les seuls carateres possibles sont 1,2,3,4,5,6,7,8,9 et 0 les autres ils ne les conservent pas |
Ce qui me chiffonne c'est que si je mets ça :
If Asc(Mid(TextBox1.Text, Len(TextBox1.Text))) >= Asc("1" ) And Asc(Mid(TextBox1.Text, Len(TextBox1.Text))) <= Asc("9" ) Then
Reponse = MsgBox(TextBox1.Text, vbOKOnly)
Alors il s'affiche -4...
Marsh Posté le 24-07-2006 à 11:05:27
parce que tu ne l'as pa encore retiré...il faut faire
TextBox1.Text = Mid(TextBox1.Text, 1, Len(TextBox1.Text) - 1)
avant de faire le msgbox
en fait la procédure lit la valeur et si elle correspond pas elle la retire...
Marsh Posté le 24-07-2006 à 11:14:11
Paul Hood a écrit : parce que tu ne l'as pa encore retiré...il faut faire |
Pffiou, ça y est !! ça marche !!
J'aurai jamais trouvé ça mais maintenant j'ai compris le fonctionnement
Merci bien pour l'aide Paul Hood et jpcheck
Marsh Posté le 25-07-2006 à 14:11:49
Bonjour,
Voici comment filtrer un entier directement à la saisie (interdire les autres caractères)
Créer une boite de dialogue avec une textbox ici textbox1
Spoiler : Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) |
Marsh Posté le 25-07-2006 à 14:57:31
pyrof a écrit : Bonjour,
|
C'est quand même plus propre
Marsh Posté le 21-07-2006 à 11:08:09
Bonjour à tous !
Voilà mon souci : J'ai fait un userform dans lequel j'ai un textbox. Dans celui-ci j'invite un utilisateur à entrer un entier positif. Or lorsque que je fais VarType(TextBox1.Value), j'obtiens une chaîne de caractère hors moi il me faut un chiffre...
Ma question est donc : Comment puis-je faire !!??