Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2866 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1410931
surikat14
Posté le 21-07-2006 à 11:08:09  profilanswer
 

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

mood
Publicité
Posté le 21-07-2006 à 11:08:09  profilanswer
 

n°1410943
jpcheck
Pioupiou
Posté le 21-07-2006 à 11:19:18  profilanswer
 

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.

n°1410947
surikat14
Posté le 21-07-2006 à 11:23:00  profilanswer
 

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:

n°1410951
jpcheck
Pioupiou
Posté le 21-07-2006 à 11:26:46  profilanswer
 

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 ?

n°1410960
surikat14
Posté le 21-07-2006 à 11:37:52  profilanswer
 

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

n°1412003
Paul Hood
Posté le 24-07-2006 à 08:43:20  profilanswer
 

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

n°1412087
surikat14
Posté le 24-07-2006 à 10:42:25  profilanswer
 

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

n°1412092
jpcheck
Pioupiou
Posté le 24-07-2006 à 10:44:44  profilanswer
 

attention, tu blindes ici pour une saisie entre 1 et 9, l'utilisateur ne pourra-t-il pas choisir au delà de 10 ?

n°1412098
surikat14
Posté le 24-07-2006 à 10:48:10  profilanswer
 

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 ?
 

n°1412103
Paul Hood
Posté le 24-07-2006 à 10:51:46  profilanswer
 

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
mood
Publicité
Posté le 24-07-2006 à 10:51:46  profilanswer
 

n°1412106
surikat14
Posté le 24-07-2006 à 10:55:51  profilanswer
 

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

n°1412110
Paul Hood
Posté le 24-07-2006 à 10:58:17  profilanswer
 

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

n°1412118
jpcheck
Pioupiou
Posté le 24-07-2006 à 11:02:48  profilanswer
 

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

n°1412119
surikat14
Posté le 24-07-2006 à 11:02:51  profilanswer
 

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

n°1412123
Paul Hood
Posté le 24-07-2006 à 11:05:27  profilanswer
 

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
n°1412133
surikat14
Posté le 24-07-2006 à 11:14:11  profilanswer
 

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:  
 

n°1413049
pyrof
Posté le 25-07-2006 à 14:11:49  profilanswer
 

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


 

n°1413099
Paul Hood
Posté le 25-07-2006 à 14:57:31  profilanswer
 

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:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
[Access] VBA récuperer données requêtenombre d'argument aléatoire dans une fonction
problème de boucle/session : envoi de doublons en nombre variable ?!Réquete sql champ date recuperer le MOIS
[Resolu] Type de control (VBA)Modifier en VBA les options d'habillage d'une image
Probleme incompatibilite données acces/VBA [résolu][Resolu]choix d'une couleur dans un userform (VBA)
VBA +coloration syntaxique 
Plus de sujets relatifs à : [VBA-E] Récupérer un nombre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR