Question de base sur les types de variables...

anecaca Messages postés 30 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 24 avril 2011 - 7 mars 2011 à 17:37
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 9 mars 2011 à 22:53
[b]Bjr à tous,

Je ne comprends pas pourquoi quand je rentre un nombre naturel, comme 3 ou 9, dans l'objet texte "txt.node", le message "Please enter a positive integer" apparaît.../b


Private Sub cmd_node_Click()
If VarType(txt_node.Text) = vbInteger Then
MsgBox ("Ok")
Else
MsgBox ("Please enter a positive integer.")
txt_node.Text = ""
End If
End Sub

D'avance, merci pour votre réponse

21 réponses

ricky84 Messages postés 44 Date d'inscription dimanche 8 septembre 2002 Statut Membre Dernière intervention 13 janvier 2014
7 mars 2011 à 18:03
[b]if Clng(txt_node.Text)>=0 then msgbox.....
ou Cint(txt_node.Text)....../b
Devrait marcher
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 mars 2011 à 18:17
Salut
txt_node.Text est du type string
donc ce n'est pas un vbinteger

mais si tu veux verifier le contenu du textbox
en net
Dim val As Integer
        Try
            val = Integer.Parse(TextBox4.Text)
        Catch ex As Exception
            MessageBox.Show("Please enter a positive integer")
            TextBox4.Text = String.Empty
        End Try
0
anecaca Messages postés 30 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 24 avril 2011
7 mars 2011 à 18:46
re,

ricky84, j'ai essayé mais ca ne fonctionne pas mieux....

shayw, je dois travailler qur vb 2005, c'est pour les cours donc je ne peux pas utiliser ce que je veux....

merci
0
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
7 mars 2011 à 19:03
Bonjour,

@ShayW: perso j'aurais utilisé Integer.TryParse, mais c'est juste pour chipoter

@anecaca: Le code de Shayw est parfaitement valide en vb2005 et si ton prof te suggère d'utiliser VarType ou MsgBox (qui je le rappelle sont des méthodes VB6 présentes UNIQUEMENT pour la compatibilité des anciens programmes) tu devrais changer de prof ou si c'est impossible lui faire remarquer que vous faire apprendre avec des méthodes obsolètes risque de vous donner des mauvaises habitudes et que ce n'est pas dans votre intérêt.

Cordialement !
0

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

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 mars 2011 à 19:12
ou dit au prof de s'inscrire au forum

c'est quoi la différence avec Integer.TryParse ?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
7 mars 2011 à 19:41
Bonjour,

Parse, traduit l'information, et si une erreur survient, une exception est levée
TryParse, essaye de traduire, en cas d'échec, elle retourne False, sinon True (pas d'exception).

Mon site
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 mars 2011 à 19:49
merci Henry
donc il n'y a pas vraiment de règle quand
utiliser l'un ou l'autre
0
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
7 mars 2011 à 22:12
Personnellement je recommenderais l'utilisation de TryParse, en effet la gestion des exceptions est un mécanisme lourd (aussi bien en terme de lisibilité/maintenabilité qu'en terme de performance) et donc si on peut l'éviter c'est mieux.

TryParse ne déclenche pas d'erreur, mais récupère le résultat de la conversion dans une variable ByRef en plus d'indiquer si la conversion a réussie ou échouée.
Dim result As Integer = 42
If Integer.TryParse(valueToParse, result) Then
    ' result contient mon nombre
Else
    ' traiter le problème (au besoin)
    ' result vaut 0 (il a perdu sa valeur 42)
End If


Sinon d'un point de vue fonctionnement, les deux méthodes utilisent quasiment le même code sauf que Parse déclenche des Exception là où TryParse se contente de renvoyer False.

Pour résumer, si l'on est absolument sûr que la valeur passée est valide, alors on peut utiliser Parse (pour la simplicité de la syntaxe sans Try/Catch) sinon TryParse.
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 à 17:19
hey!
perso je suis vraiment naze...
donc je ne comprends pas pourquoi mon code ne fonctionne pas

Private Sub cmd_node_Click() 
'If VarType(txt_node.Text) = vbInteger Then remplacé par
If VarType(val(txt_node.Text)) = vbInteger Then
MsgBox ("Ok") 
Else 
MsgBox ("Please enter a positive integer.") 
txt_node.Text = "" 
End If 
End Sub


J'ai quand meme essayé ces deux codes mais il m'indique une "compile error expected: expression"
Integer.Parse
Integer.TryParse


Enfin j'ai entré le code de Shayw et Sehnsucht en remplaçant ce qu'il fallait et ça ne fonctionne pas.

Ce que je veux c'est bien obliger mon utilisateur à entrer un nombre entier et pas vérifier ce qu'il a mis dedans...

Il se peut que je vous paraisse stupide, mes questions ne sont surement pas très évoluées, mais je n'ai pas poster le message sur le forum débutant pour rien... .

Merci pour vos réponses déjà postées
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 à 18:00
envoie le code que tu as écris
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 à 18:08
Option Explicit
Global nodenbr As Single
Global barrenbr As Single
Global appuinbr As Single
Global forcenbr As Single


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


En fait ça marchait a la base et puis je ne sais pas ce qui s'est passé et ça ne fonctionne plus.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
9 mars 2011 à 19:16
Bonjour,

TU ES EN VB6, pas en .NET, tu t'es trompé de catégorie.
ReDim xnode(1 To nodenbr)
n'existe pas en .NET, tous les tableaux partent de 0

Du coup, pas de Integer.Parse & co.

A la place de copier partout :
Val(txt_node.Text)
Mets la valeur dans une variable temporaire.

ElseIf VarType(val(txt_node.Text)) = vbInteger Then
Si je ne me trompe pas, Val retourne un Variant/Double, essayes plutôt un CInt ou CLng.

De base, préfère utiliser des Long à la place des Integer, c''est plus adapté sur les processeurs récents (32 bits).

Mon site
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 à 19:26
Est tu sure que c'est du vb.net?
c'est du vb6 !!
As tu besoin de pogrammer en vb6 ou vb.net ?
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 à 19:51
ben le forum s'appelle VB 2005 et vb.net et oui je code en vb 2OO5 c'est ce que j'avais écris à shayw.... désolée
le truc de cInt ou Clng je dois le mettre ou?

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
                If n > 100 Then
                    If MsgBox("That's a lot of nodes! Are you sure?", vbYesNo) = vbYes Then
                        nodenbr = n
                        lbl_nodecoor.Enabled = True
                        Txt_node_x.Enabled = True
                        txt_node_y.Enabled = True
                        ReDim xnode(1 To nodenbr)
                        ReDim ynode(1 To nodenbr)
                    Else
                        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 nodenbr)
                    ReDim ynode(1 To nodenbr)
                End If
            End If
    'ElseIf VarType(n) vbcint Then et ElseIf VarType(n) cint Then ne fonctionne pas... ni avec clng
        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
                nodenbr = n
                lbl_nodecoor.Enabled = True
                Txt_node_x.Enabled = True
                txt_node_y.Enabled = True
                ReDim xnode(1 To nodenbr)
                ReDim ynode(1 To nodenbr)
                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 nodenbr)
            ReDim ynode(1 To nodenbr)
        End If
    Else
        MsgBox ("Please enter a positive integer.")
            txt_node.Text = ""
    End If
End Sub



Sur quel furum dois je me mettre alors?
merci
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 à 19:58
tu marques je code en vb2005
ce n'est pas du vb6
mais ton code est en vb6
Donc choisi vb6 ou vb.net ne mélange pas les deux
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 à 20:00
il y a t'il beaucoup de différence entre visual basic 2005 et visual basic 2006? et vb2005 et visual basic 2005 c'est pas la meme chose? lol quel débutante de la première heure!!
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
9 mars 2011 à 20:00
Bonjour,

Je vais le refaire :
ReDim xnode(1 To nodenbr)
Le fait d'avoir un "To" dans cette ligne signale que tu n'es pas sur .NET !!!
Les tableaux en, .NET commencent tous à 0.

Pour le forum, il faudra faire attention lors de tes prochains messages à bien les mettre dans la bonne catégorie (la pertinence de l'aide est bien plus grande dans ce cas).

CLng et Cint, je les ais proposé pour remplacer Val.

Mon site
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
9 mars 2011 à 20:01
Bonjour,

Ce n'est pas VB 2006, mais VB6, il date d'avant VB.NET 2002.
Il est périmé et plus maintenu depuis plusieurs années.

Mon site
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 à 20:10
ok j'ai remplacer val par cint ou par clng il ne me dit pas qu'il y a des erreurs dans le code mais il ne reconnais tjs pas 9 comme un code par contre si je mets un négatif la procédure fonctionne...
a part qu'il ne veut pas redimensionner mes vecteurs...
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 à 20:14
lol merci pour l'info... je pensais que vb2005 et vb5 c'était la même chose...
donc je code sur VB5 et pas sur 2005....
0
Rejoignez-nous