Probleme de if then else ..... (incompréhensible enfin pour moi)

Nkubi Messages postés 43 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 3 juin 2004 - 27 avril 2004 à 13:57
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 - 27 avril 2004 à 21:49
Bonjour

J'ai un problème vraiment incompréhensible, je fais un select (d'un parametre qui peut etre g1,g2,g3,g4) et dans chaque cas je teste si le deuxieme parametre est a vrai ou faux.
Donc voici mon code:

Select Case groupe
Case "G1":
If passe Then
debx = der_ligne_G1
x = der_ligne_G1
MsgBox "argpresent"
Else
debx = der_ligne_kembs_G1
x = der_ligne_kembs_G1
End If
Case "G2":
If passe Then
debx = der_ligne_G2
x = der_ligne_G2
MsgBox "argpresent"
Else
debx = der_ligne_kembs_G2
x = der_ligne_kembs_G2
End If
Case "G3":
If passe Then
debx = der_ligne_G3
x = der_ligne_G3
MsgBox "argpresent"
Else
debx = der_ligne_kembs_G3
x = der_ligne_kembs_G3
End If
Case "G4":
If Not passe Then
MsgBox "c bon" & der_ligne_kembs_G4
debx = der_ligne_kembs_G4
x = der_ligne_kembs_G4
Else
debx = der_ligne_G4
x = der_ligne_G4
MsgBox " pas de kembs du g4"
End If
End Select
ancienx = x
MsgBox x

Et donc j'ai testé pour le g4 mais le problème serait le même pour les autres, si passe est à vrai x vaut bien der_ligne_g4 mais si jamais passe est a faux x vaut 0 (alors que j'ai testé mon der_ligne_kembs_g4 vaut toujours 1) ce qui est du je crois au fait qu'il ne passe pas dans le THEN à ce moment là.

Si quelqu'un pouvait m'aider ce serait sympa (me dire où est mon erreur ou me donner une solution équivalente) parce que là ca fait kan meme un bout de temps que je suis la dessus.

Merci.

PS: J'ai testé aussi si par hasard mon paramètre booléen n'était pas bon mais sur un autre IF qui n'est pas dans le select ça fonctionne correctement.
A voir également:

6 réponses

cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
27 avril 2004 à 14:28
essais de les mettre comme cela :

if Passe = false then
...
elseif Passe = true then
...
end if
ca pourrait peut etre t'aiguiller
si ca plante ou que rien n'est verifié c'est qu'il y a un pb dans les boolean je pense, mais ca reste a vérifier.

puis d'un coté tu mets if passe pour tous, sauf pour le dernier, tu mets if not passe. ce qui ne change pas grand chose mais c'est étonnant.
liquide
0
Nkubi Messages postés 43 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 3 juin 2004
27 avril 2004 à 14:54
Le dernier est en Not passe parce que vu que je ne voyait pas l'erreur j'ai testé toute sorte de chose mais au départ il était comme les autres.

Mais booléen doivent être bon vu que je m'en sers dans d'autre test hors de mon select, c'est ça qui me semble bizarre.

merci quand même liquid.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
27 avril 2004 à 15:55
Ta structure de controle est bonne !! ET chez moi, elle réagit correctement ! Tu n'aurais pas un Pb de déclaration de nom de variable ?
Pour en etre sur, décalre bien toute tes variables et assure toi d'avoir "Option Explicit" tout en haut du module
Aute chose, en mode pas à pas, il passe bien la ou il faut ou pas ?

Christophe R.
0
Nkubi Messages postés 43 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 3 juin 2004
27 avril 2004 à 16:14
Effectivement je n'avais pas "Option Explicit" en haut du module.
Cela sert à quoi exactement????
Parce que j'ai remarqué que je l'avais en haut de très peu de module.

merci cranaud.
0

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

Posez votre question
Arwenali Messages postés 6 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 28 avril 2004
27 avril 2004 à 16:34
L'option Explicit sert a forcer la déclaration des variables avec un type enfin moi c'est comme ca que je m'en sert...
Parce que VB accepte les certaines variables non déclarées...
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
27 avril 2004 à 21:49
Effectivement ou plus exactement : "Option Explicit" interdit l'utilisation d'une variable non déclarée (quelle soit typée ou "variante").
Par défaut - sans le "Option Explicit", des que VB rencontre un identificateur qui ne fait pas parti du langage, il considère que tu fais appel à une variable. Le souci c'est que tu n'es pas à l'abri d'une faute de frappe et si en voulant utiliser une seule et meme variable nommée "Var", tu tapes un coup "Var" et un aute coup "Vra", VB ne gueulera pas et pensera qu'il s'agit d'une autre variable !!!!!! Big pb pour déboguer ca !
Alors la solution est de mettre "Option Explicit" en haut de tout tes modules, comme cela, tu es obligé de déclarer toutes tes variables avant de les utiliser et alors Si tu fais un "Dim Var as String", et bien qd tu taperas "Vra" au lieu de "Var", VB va te jeter comme un mal propre : Chiant ? Sûrement pas et suepr pratique pour prévenir les faute de frappe.
Tu peux ajouter cette option toi-même en haut de tous tes modules (standard, de form ou de classe) sinon VB peut le faire automatiquement mais uniquement pour les nouveaux modules si tu actives l'option "Déclaration des variables obligatoire" dans l'onglet "Editeur" des options de VB6 (menu Outils|Options).
Un dernier p'tit truc, une ruse de sioux : VB ne fait pas la différence entre les majuscule et les minuscules, mais qd tu tapes ton code, si une var est déclarer comme ceci "Dim Var As String" et que tu tapes "var = "Bonjour"", VB va tout seule mettre le 'v' en majuscule (pour etre conforme à la déclaration). Alors moi, ce que je fait, c'est que je met toujours le 1ere lettre des var en majuscule dans mes déclaration, mais plus loin dans le code, je tape toujours tout en minuscule. Si un identificateur reste sans majuscule, c'est que j'ai ait une faute de frappe. Ca frappe l'oeil et tu intercepte 80% des fautes de frappe avant même que VB ne te ponde une erreur au moment de l'execution !
Voila, j'espère ne pas avoir ete trop long !
A+

Christophe R.
0
Rejoignez-nous