Run time error

Signaler
Messages postés
42
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
21 juin 2010
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Salut a tous
Voici le code pour un exo que je resoud

Private Sub CmdOK_Click()
If (Text1.Text <> "" Or Text2.Text <> "") Then
Ì = Val(Text1.Text)
Æ = Val(Text2.Text)
End If

If Ì < 16 Or Ì > 150 Eqv Æ < 16 Or Æ > 150 Then
msg = "error"
Style = vbCritical
MsgBox msg, Style

ElseIf Ì > 16 Or Ì < 150 Then
Text2.Text = (Text1.Text / 2) + 7

ElseIf Æ > 16 Or Æ < 150 Then
Text1.Text = 2 * (Text2.Text) + 7

End If
End Sub
L'ennuie c'est que j'ai un run time error quand je veux realiser les conditions de Æ, ce qui veut dire que
ElseIf Ì > 16 Or Ì < 150 Then
Text2.Text = (Text1.Text / 2) + 7
empeche
ElseIf Æ > 16 Or Æ < 150 Then
Text1.Text = 2 * (Text2.Text) + 7
de se realiser.
comment faire SVP pour reparer cela .

12 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Salut

C'est pas du VB.Net , ça ?

Je ne sais pas si c'est la boite de saisie, ici, ou le nom réel de tes variables, mais je vois des Æ et des Ì
S'il s'agit de variables avec accent, change leur nom, les accents sont souvent sources de problèmes

Si tu as une erreur, elle apparait sur quelle ligne ?

Si tu utilises la structure
If maCondition1 Then
   monAction1
ElseIf maCondition2 Then
   monActon2
End If
il est normal que la condition 2 ne soit pas testée si la condition 1 est vraie. --> Revoir le ElseIf

La prochaine fois, utilise la coloration syntaxique (3ème icone à droite) pour faciliter les lecture, surtout quand il y a des imbrications de If ou autre.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
42
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
21 juin 2010

pour les variable, c;est juste parceque c'est en russe.
l'erreur runtime 13 type mismatch apparait sur
Text2.Text = (Text1.Text / 2) + 7 quand je donne une valeur au textbox text2..
Messages postés
42
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
21 juin 2010

revoir le elseif en quoi faisant
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

Type incompatible (erreur 13)

tu fais des calculs avec du texte !

intéresse toi aux fonctions : val() de conversion tel que Cint ou Clng etc

interesse toi aussi à la fonction : isnumeric

A+
Messages postés
42
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
21 juin 2010

je n'ai rien compris..
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Accent ou langage local : à proscrire

Le ElseIf, comme son nom l'indique, ne se déroulera que si le premier If n'a pas été vrai.
Voir l'aide sur le If

Faire des opérations arithmétiques sur des textes n'est pas une bonne idée.
Même si ton texte renferme des chiffres, il devront être convertis par VB pour pouvoir faire une opération. Si ce texte n'en est pas un (lettre, espace mal placé, séparateur décimal différent du point ...), erreur garantie.
TextBox2 a été converti en numérique dans Æ : Pourquoi ne pas faire les opérations avec cette variable plutôt qu'avec le texte ? (idem pour TextBox1 bien sûr)

Idem, mais moins génant : Entrer des chiffres dans un texte n'est pas très propre.
Mieux vaut utiliser monTexte = CStr (monChiffre)
D'une manière générale, mieux vaut écrire les instructions de conversion que de laisser VB deviner quoi faire, ce qui t'oblige à penser aux types des variables, et donc, à leurs déclarations (pour faire un travail propre qui évitera les petits bugs sur lesquels on peut passer pas mal de temps, pour rien)

Qu'y a t-il dans Text1.Text au moment de l'erreur ?

Vala
Jack, =fr MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

une précision:

est-ce que en cours de math il te viendrait à l'idée d’écrire une opération comme ceci :

(24/deux) + 7 = 19

non !

et bien écrire (Text1.Text / 2) + 7 c'est à peu près pareil !... car comme sont nom l'indique "Text1.text" renvois du texte

en vb "2" n'est pas égale à 2 même si de temps en temps,dans un cas simple comme celui-ci le compilateur se démerde à interpréter !

donc :
val() sert à convertir du texte en valeur numeric
IsNumeric() sert à vérifier que le texte peut être interprété comme une valeur numérique
Cint, Clng etc servent à convertir des valeurs dans un type Spécifique

A+
Messages postés
42
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
21 juin 2010

Au moment de l'erreur text1.text est vide...
je donne une valeur comprise entre 16 et 150 a text2.text afin que mon programme effectue l'operation et donne le resultat pour tetx1.text


Aussi quand j'utile les variable pour lesquelle Val(text1.text) et Val(text2.text) correspendent, rien ne fonctionne.

Mon programme fonctionne quand je donne une valeur comprise entre 16 et 150 a text1.text, le programme effectue l'operation et donne la valer pour text2.text en conformite avec : ElseIf Ì > 16 Or Ì < 150 Then
Text2.Text = (Text1.Text / 2) + 7
mais mon programme ne fonctionne pas pour les valeurs de text2.text en conformite avec :ElseIf Æ > 16 Or Æ < 150 Then
Text1.Text = 2 * (Text2.Text) + 7
Messages postés
42
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
21 juin 2010

C'est en ce moment qu'apparait l'erreur Run-time error 13 type mismatch
Voila mon probleme., survenir a cette erreur
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
A propos de l'erreur 13 on t'a déjà répondu !

Comme tu le dis bien ici:

Au moment de l'erreur text1.text est vide...


ta textbox est vide!

la ligne Text2.Text = (Text1.Text / 2) + 7 est donc interprétée comme ceci:

Text2.Text = ("" / 2) + 7 tu essais donc de diviser du text vide("") par 2 d’où l'erreur 13

en ajoutant la fonction val() tu n'aurais plus ce probleme car le champ vide serait alors interprété à la valeur 0

Concernant le 2ieme problème là aussi Jack t'a déjà répondu !

Si tu avais essayé de comprendre tu aurais peut être écrit ton code comme ceci:

If Ì < 16 And Ì > 150 Eqv Æ < 16 And Æ > 150 Then
msg = "error"
Style = vbCritical
MsgBox msg, Style

ElseIf Ì > 16 And Ì < 150 Then
Text2.Text = (Text1.Text / 2) + 7

ElseIf Æ > 16 And Æ < 150 Then
Text1.Text = 2 * (Text2.Text) + 7

End If

Si on combine les 2 reponses cela donne:

If Ì < 16 And Ì > 150 Eqv Æ < 16 And Æ > 150 Then
msg = "error"
Style = vbCritical
MsgBox msg, Style

ElseIf Ì > 16 And Ì < 150 Then
Text2.Text = (val(Text1.Text) / 2) + 7

ElseIf Æ > 16 And Æ < 150 Then
Text1.Text = 2 * (val(Text2.Text)) + 7

End If

A+
Messages postés
42
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
21 juin 2010

le probleme c'est que avec cela, la text2.text est egale a 7 pour tous les nombres que je lui donne comprennant entre 16 et 150.
la formule
Text1.Text = 2 * (Val(Text2.Text))
+ 7 n'est meme pas pris en compte.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Combien de fois faut-il te répéter de ne pas utiliser directement la TextBox mais d'utiliser une conversion, avec Val par exemple ?
Mais, je te le répète aussi, pourquoi faire les calculs avec la TextBox alors que tu as rangé sa VALeur dans la variable Ì juste avant ?

Si tu ne peux pas te passer de ces valeurs, il te suffit de le tester avant usage. Ça se fait dans tout logiciel qui veut éviter ce genre d'erreur :
    If Val(Text1.Text) <> 0 Then
        Text2.Text = (Val(Text1.Text) / 2) + 7 
    End If
' ou encore
    If Ì <> 0 Then
        Text2.Text = (Ì / 2) + 7 
    End If

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)