OVH Cloud OVH Cloud

Probleme avec Select Case

5 réponses
Avatar
Jean-Michel
Bonjour,

Apres de longue recherche avec mon debbug, j'ai chercher pourquoi mon
programme ne marcha pas comme je le voulais :

C'est en fait mon Select Case

Select Case reste
Case Is >= 800
' Instruction 1
Case (reste >= 400 And reste < 800)
' Instruction 2
Case Is < 400
' Instruction 3
End Select

Dans le cas ou reste est plus grand ou egale à 800, l'instruction 1 est bien
executé
Dans le cas ou reste est plus petit que 400, l'instruction 3 est bien
executer
Mais meme si reste = 500 , l'instruction n'est pas executer !!!!

Comment je pourrai faire pour que ca marche !

Merci d'avance !

5 réponses

Avatar
François Picalausa
"Jean-Michel" a écrit dans le
message de news:e7tVs%
C'est en fait mon Select Case

Select Case reste
Case Is >= 800
' Instruction 1
Case (reste >= 400 And reste < 800)
' Instruction 2
Case Is < 400
' Instruction 3
End Select

Dans le cas ou reste est plus grand ou egale à 800, l'instruction 1
est bien executé
Dans le cas ou reste est plus petit que 400, l'instruction 3 est bien
executer
Mais meme si reste = 500 , l'instruction n'est pas executer !!!!



Bonjour/soir,

Dans tu select case, tu demande à VB "Est-ce que reste = True?"
En effet (reste >= 400 And reste < 800) sera vrai (True) pour 500 et
l'opérateur par défaut est C'est donc la même chose que d'écrire:
Select Case reste
Case Is >= 800
' Instruction 1
Case Is = (reste >= 400 And reste < 800)
' Instruction 2
Case Is < 400
' Instruction 3
End Select

Dans ce cas ci, ce que je te conseille de faire est d'employer le case Else.

Select Case reste
Case Is >= 800
' Instruction 1
Case Is < 400
' Instruction 3
Case Else
' Instruction 2
End Select

Ou pour rester sur des test True/False, on pourrait faire:
Select Case True
Case reste > 800
Debug.Print "reste > 800"
Case reste >= 400 And reste <= 800
Debug.Print "reste >= 400 and reste <= 800"
Case reste < 400
Debug.Print "reste < 400"
End Select
--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
scraper
Dans son post news:e7tVs%,

Jean-Michel a absolument tenu à nous dire :

Bonjour,

Apres de longue recherche avec mon debbug, j'ai chercher pourquoi mon
programme ne marcha pas comme je le voulais :

C'est en fait mon Select Case

Select Case reste
Case Is >= 800
' Instruction 1
Case (reste >= 400 And reste < 800)
' Instruction 2
Case Is < 400
' Instruction 3
End Select

Dans le cas ou reste est plus grand ou egale à 800, l'instruction 1
est bien executé
Dans le cas ou reste est plus petit que 400, l'instruction 3 est bien
executer
Mais meme si reste = 500 , l'instruction n'est pas executer !!!!

Comment je pourrai faire pour que ca marche !



salut !

peut être (?) :

case else
if ls <400 then instruction 3 : else instruction 2
end select

??


--

scraper
Avatar
+The_Taco+
Pour ce genre de cas, moi j'irais avec l'opérateur IF. SELECT CASE s'utilise
mieux quand le cas ne possède par d'opération logique. C'est mon opinion
bien sûr!

if reste >= 800 then
opérations
elseif (reste >= 400 and reste < 800) then
opérations
else
opérations
end if

cheers

"Jean-Michel" a écrit dans le
message de news:e7tVs%
Bonjour,

Apres de longue recherche avec mon debbug, j'ai chercher pourquoi mon
programme ne marcha pas comme je le voulais :

C'est en fait mon Select Case

Select Case reste
Case Is >= 800
' Instruction 1
Case (reste >= 400 And reste < 800)
' Instruction 2
Case Is < 400
' Instruction 3
End Select

Dans le cas ou reste est plus grand ou egale à 800, l'instruction 1 est


bien
executé
Dans le cas ou reste est plus petit que 400, l'instruction 3 est bien
executer
Mais meme si reste = 500 , l'instruction n'est pas executer !!!!

Comment je pourrai faire pour que ca marche !

Merci d'avance !




Avatar
Jean-Michel
Merci !


"François Picalausa" a écrit dans le message news:

"Jean-Michel" a écrit dans le
message de news:e7tVs%
> C'est en fait mon Select Case
>
> Select Case reste
> Case Is >= 800
> ' Instruction 1
> Case (reste >= 400 And reste < 800)
> ' Instruction 2
> Case Is < 400
> ' Instruction 3
> End Select
>
> Dans le cas ou reste est plus grand ou egale à 800, l'instruction 1
> est bien executé
> Dans le cas ou reste est plus petit que 400, l'instruction 3 est bien
> executer
> Mais meme si reste = 500 , l'instruction n'est pas executer !!!!

Bonjour/soir,

Dans tu select case, tu demande à VB "Est-ce que reste = True?"
En effet (reste >= 400 And reste < 800) sera vrai (True) pour 500 et
l'opérateur par défaut est > C'est donc la même chose que d'écrire:
Select Case reste
Case Is >= 800
' Instruction 1
Case Is = (reste >= 400 And reste < 800)
' Instruction 2
Case Is < 400
' Instruction 3
End Select

Dans ce cas ci, ce que je te conseille de faire est d'employer le case


Else.

Select Case reste
Case Is >= 800
' Instruction 1
Case Is < 400
' Instruction 3
Case Else
' Instruction 2
End Select

Ou pour rester sur des test True/False, on pourrait faire:
Select Case True
Case reste > 800
Debug.Print "reste > 800"
Case reste >= 400 And reste <= 800
Debug.Print "reste >= 400 and reste <= 800"
Case reste < 400
Debug.Print "reste < 400"
End Select
--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com




Avatar
Patrice Henrio
je ne sais pas comment VB interprète les comparaisons de variable booléenne.
A priori et à mon avis (400 et x<800) vaut toujours Faux

En fait dans ce cas voici ce qu'il faut coder si on ne veut pas utiliser de
else

Select case reste
case is>€0
case 400 to 800
case is <400
end select
L'ordre des case est important car les deux premières conditions valent Vrai
pour reste€0 et comme il semble que dans ce cas c'est la première
condition qui doit se dérouler ...


"Jean-Michel" a écrit dans le
message de news:e7tVs%
Bonjour,

Apres de longue recherche avec mon debbug, j'ai chercher pourquoi mon
programme ne marcha pas comme je le voulais :

C'est en fait mon Select Case

Select Case reste
Case Is >= 800
' Instruction 1
Case (reste >= 400 And reste < 800)
' Instruction 2
Case Is < 400
' Instruction 3
End Select

Dans le cas ou reste est plus grand ou egale à 800, l'instruction 1 est


bien
executé
Dans le cas ou reste est plus petit que 400, l'instruction 3 est bien
executer
Mais meme si reste = 500 , l'instruction n'est pas executer !!!!

Comment je pourrai faire pour que ca marche !

Merci d'avance !