Nombres entiers

anecaca Messages postés 30 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 24 avril 2011 - 9 mars 2011 à 20:29
anecaca Messages postés 30 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 24 avril 2011 - 10 mars 2011 à 14:40
hello,

j'ai déjà posté la même question dans la catégorie vb 2005 et vb.net pcq je pensais que vb 2005 c’était vb5... Tout ca pour dire que je ne me suis pas mise dans la catégorie débutant par modestie et que je code sur VB5 et pas VB6(je ne sais pas si ça change bcp...)

Donc j'ai écris un code que je vous mets plus bas. Ce que je voudrais c'est que quand l'utilisateur met quelque chose de différent d'un entier positif dans le textbox le programme lui signale par un massage d'erreur... mais seulement voilà même quand on met un entier positif il affiche la msgbox 'mettre un entier'. ça fonctionne quand je met un négatif.

Private Sub cmd_node_Click()
    n = Val(txt_node.Text)
    If n < 0 Then
            b = -n
            If MsgBox("did you mean" & Str(b) & "?", vbYesNo) = vbYes Then
                txt_node.Text = b
                n = b
                If n > 100 Then
                    If MsgBox("That's a lot of nodes! Are you sure?", vbYesNo) = vbYes Then
                        lbl_nodecoor.Enabled = True
                        Txt_node_x.Enabled = True
                        txt_node_y.Enabled = True
                        ReDim xnode(1 To n)
                        ReDim ynode(1 To n)
                    Else
                        txt_node.Text = ""
                    End If
                Else
                    lbl_nodecoor.Enabled = True
                    Txt_node_x.Enabled = True
                    txt_node_y.Enabled = True
                    ReDim xnode(1 To n)
                    ReDim ynode(1 To n)
                End If
            End If
    ElseIf VarType(n) = vbInteger Then
        If txt_node.Text = "" Then
            MsgBox "No node entered!"
        ElseIf n > 100 Then
            If MsgBox("That's a lot of nodes! Are you sure?", vbYesNo) = vbYes Then
                lbl_nodecoor.Enabled = True
                Txt_node_x.Enabled = True
                txt_node_y.Enabled = True
                ReDim xnode(1 To n)
                ReDim ynode(1 To n)
                txt_node.Text = ""
            End If
        Else
            nodenbr = n
            lbl_nodecoor.Enabled = True
            Txt_node_x.Enabled = True
            txt_node_y.Enabled = True
            ReDim xnode(1 To n)
            ReDim ynode(1 To n)
        End If
    Else
        MsgBox ("Please enter a positive integer.")
            txt_node.Text = ""
    End If
End Sub

9 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
9 mars 2011 à 21:10
ElseIf VarType(n) = vbInteger


plutot ElseIf VarType(n) = vbDouble
et meme tu as d'autre erreur
que veux tu faire exactement essaie d'écrire
plus simple
verifie si le texte est numérique
If Not IsNumeric(txt_node.Text) Then
    MsgBox ("enter a number")
    Exit Sub
End If
0
anecaca Messages postés 30 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 24 avril 2011
9 mars 2011 à 21:17
il ne reconnait toujours pas 9 et "double" ce ne sont pas les réels?
0
anecaca Messages postés 30 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 24 avril 2011
9 mars 2011 à 21:27
Private Sub cmd_node_Click()
    n = Val(txt_node.Text)
'si la valeur est négative je demande à l'utilisateur si il n'a pas mis le - en trop si il dit oui je remet la valeur sans le moins. jusque la ça fonctionne 
    If n < 0 Then
            b = -n
            If MsgBox("did you mean" & Str(b) & "?", vbYesNo) = vbYes Then
                txt_node.Text = b
                n = b
'la si la valeur anciennement négative est supérieur a 100 je demande a l'utilisateur si c'est normal. si l'utilisateur est sur alors je dégrise les cases nécessaires pour la suite de la procédure. jusque la ça fonctionne 
                If n > 100 Then
                    If MsgBox("That's a lot of nodes! Are you sure?", vbYesNo) = vbYes Then
                        lbl_nodecoor.Enabled = True
                        Txt_node_x.Enabled = True
                        txt_node_y.Enabled = True
                        ReDim xnode(1 To n)
                        ReDim ynode(1 To n)
                    Else
                        txt_node.Text = ""
                    End If
                Else
                    lbl_nodecoor.Enabled = True
                    Txt_node_x.Enabled = True
                    txt_node_y.Enabled = True
                    ReDim xnode(1 To n)
                    ReDim ynode(1 To n)
                End If
            Else
                txt_node.Text = ""
            End If
'c'est ça qui ne marche pas si je met 9 il ne dégrise pas les cases suivante le label et les deux zones de texte...
    ElseIf VarType(n) = vbDouble Then
        If txt_node.Text = "" Then
            MsgBox "No node entered!"
        ElseIf n > 100 Then
            If MsgBox("That's a lot of nodes! Are you sure?", vbYesNo) = vbYes Then
                lbl_nodecoor.Enabled = True
                Txt_node_x.Enabled = True
                txt_node_y.Enabled = True
                ReDim xnode(1 To n)
                ReDim ynode(1 To n)
                txt_node.Text = ""
            End If
        Else
            nodenbr = n
            lbl_nodecoor.Enabled = True
            Txt_node_x.Enabled = True
            txt_node_y.Enabled = True
            ReDim xnode(1 To n)
            ReDim ynode(1 To n)
        End If
'ça ça à l'air de fonctionner puisque quand je mets une lettre il affiche la msgbox
    ElseIf Not IsNumeric(txt_node.Text) Then
        MsgBox ("Please enter a positive integer.")
        txt_node.Text = ""
    End If
End Sub
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
9 mars 2011 à 21:41
Private Sub cmd_node_Click()
n = Val(txt_node.Text)
'verifie si le texte est numerique
If Not IsNumeric(txt_node.Text) Then
    MsgBox ("enter a positive number")
    Exit Sub
End If
'verifie si le nombre est negatif
 If MsgBox("did you mean" & str(txt_node.Text) & "?", vbYesNo) = vbYes Then
    MsgBox ("enter a positive number")
    Exit Sub
 End If
 'si j'arrive ici donc j'ai un nombre positif
If n > 100 Then
   If MsgBox("That's a lot of nodes! Are you sure?", vbYesNo) = vbYes Then
      lbl_nodecoor.Enabled = True
      Txt_node_x.Enabled = True
      txt_node_y.Enabled = True
      ReDim xnode(0 To n)
      ReDim ynode(0 To n)
      Else
        txt_node.Text = ""
      End If
 Else
    lbl_nodecoor.Enabled = True
    Txt_node_x.Enabled = True
    txt_node_y.Enabled = True
    ReDim xnode(0 To n)
    ReDim ynode(0 To n)
 End If

End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
anecaca Messages postés 30 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 24 avril 2011
9 mars 2011 à 21:46
merci beaucoup

juste une dernière chose si l'utilisateur entre 3,3 ce n'est pas un entier comment afficher un message d'erreur pour des nombres qui ne soient pas des entiers mais des réels.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
9 mars 2011 à 23:15
Ah oui
Private Sub cmd_node_Click()
n = Val(txt_node.Text)
'verifie si le texte est numerique
If Not IsNumeric(txt_node.Text) Then
    MsgBox ("enter a positive number")
    Exit Sub
End If
'verifie si le nombre est entier positif
If Abs(n - Int(n)) > 0 Then
  MsgBox ("enter a positive number")
    Exit Sub
End If
'verifie si le nombre est negatif
 If MsgBox("did you mean" & str(txt_node.Text) & "?", vbYesNo) = vbYes Then
    MsgBox ("enter a positive number")
    Exit Sub
 End If
 'si j'arrive ici donc j'ai un nombre positif
If n > 100 Then
   If MsgBox("That's a lot of nodes! Are you sure?", vbYesNo) = vbYes Then
      lbl_nodecoor.Enabled = True
      Txt_node_x.Enabled = True
      txt_node_y.Enabled = True
      ReDim xnode(1 To n)
      ReDim ynode(1 To n)
      Else
        txt_node.Text = ""
      End If
 Else
    lbl_nodecoor.Enabled = True
    Txt_node_x.Enabled = True
    txt_node_y.Enabled = True
    ReDim xnode(1 To n)
    ReDim ynode(1 To n)
 End If
           
    
End Sub
0
JPGVB Messages postés 96 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 10 mars 2011 2
10 mars 2011 à 10:37
Bonjour,
Une autre manière d'aborder le problème consiste à limiter le contenu de ton textbox à des caractères choisis avec la fonction suivante (qui n'est pas de moi, retrouvable facilement sur le net).
Tu combines cela avec une limitation de longueur (propriété MaxLengh) : ainsi ton utilisateur ne peur taper que les caractères que tu as spécifié dans Numbers$.
Ton traitement est ainsi bien simplifié par la suite.


Function LimitTextInput(ByVal source) As String
'put the next line in the Textbox_KeyPress event
'KeyAscii = LimitTextInput(KeyAscii)
'change Numbers with any other character

Const Numbers$ = "0123456789"
If source <> 8 Then 'backspace = 8
If InStr(Numbers, Chr(source)) = 0 Then
LimitTextInput = 0
Exit Function
End If
End If
LimitTextInput = source
End Function
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
10 mars 2011 à 10:59
Salut JPGVB

penses aussi que tu peux inserer un texte dans
le textbox avec le clipboard (presse papier)
donc je copie "blabla"
0
anecaca Messages postés 30 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 24 avril 2011
10 mars 2011 à 14:40
Merci beaucoup
Pour vos réponses!!!
0
Rejoignez-nous