[VBA-E] Récupérer un nombre

Récupérer un nombre [VBA-E] - VB/VBA/VBS - Programmation

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 !!??  :??:  
 

Reply

Marsh Posté le 21-07-2006 à 11:08:09   

Reply

Marsh Posté le 21-07-2006 à 11:19:18    

surikat14 a écrit :

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 !!??  :??:


tu cherches à récupérer la valeur de textbox ? vartype te retournera une constante.

Reply

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à... :pfff:

Reply

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 ?

Reply

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"...
 

Reply

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

Reply

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

Reply

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 ?

Reply

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 ?
 

Reply

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  :non:

Message cité 1 fois
Message édité par Paul Hood le 24-07-2006 à 10:52:19
Reply

Marsh Posté le 24-07-2006 à 10:51:46   

Reply

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  :non:


 
Exact !! Mais avec ton code si je rentre -4, alors ça passe. Or moi je veux que des entiers supérieurs ou égaux à 1...
 

Reply

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

Reply

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...

Reply

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...

Reply

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...

Message cité 1 fois
Message édité par Paul Hood le 24-07-2006 à 11:06:41
Reply

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
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...


 
Pffiou, ça y est !! ça marche !!
J'aurai jamais trouvé ça  :pt1cable: mais maintenant j'ai compris le fonctionnement
 
Merci bien pour l'aide Paul Hood et jpcheck  :jap:  :jap:  
 

Reply

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)
    KeyAscii = valide_num(KeyAscii)
End Sub
 
 
'--------------------------------------------------------------
'        validation de zone texte numérique
'--------------------------------------------------------------
Private Function valide_num(x)
    Select Case x
        Case 48 To 57, 44
            valide_num = x
        Case Else
            valide_num = 0
        End Select
End Function


 

Reply

Marsh Posté le 25-07-2006 à 14:57:31    

pyrof a écrit :

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)
    KeyAscii = valide_num(KeyAscii)
End Sub
 
 
'--------------------------------------------------------------
'        validation de zone texte numérique
'--------------------------------------------------------------
Private Function valide_num(x)
    Select Case x
        Case 48 To 57, 44
            valide_num = x
        Case Else
            valide_num = 0
        End Select
End Function



C'est quand même plus propre  :ouch:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed