Nombres entiers

Signaler
Messages postés
30
Date d'inscription
jeudi 24 février 2011
Statut
Membre
Dernière intervention
24 avril 2011
-
Messages postés
30
Date d'inscription
jeudi 24 février 2011
Statut
Membre
Dernière intervention
24 avril 2011
-
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

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
30
Date d'inscription
jeudi 24 février 2011
Statut
Membre
Dernière intervention
24 avril 2011

il ne reconnait toujours pas 9 et "double" ce ne sont pas les réels?
Messages postés
30
Date d'inscription
jeudi 24 février 2011
Statut
Membre
Dernière intervention
24 avril 2011

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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
30
Date d'inscription
jeudi 24 février 2011
Statut
Membre
Dernière intervention
24 avril 2011

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.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
96
Date d'inscription
mardi 29 mars 2005
Statut
Membre
Dernière intervention
10 mars 2011
2
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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut JPGVB

penses aussi que tu peux inserer un texte dans
le textbox avec le clipboard (presse papier)
donc je copie "blabla"
Messages postés
30
Date d'inscription
jeudi 24 février 2011
Statut
Membre
Dernière intervention
24 avril 2011

Merci beaucoup
Pour vos réponses!!!