begin process at 2012 02 16 04:41:38
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Tutoriaux

 > [VB6] TOUT SUR LE IF

[VB6] TOUT SUR LE IF


 Information sur le tutoriel

Note :
8,25 / 10 - par 4 personnes
8,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

 Description

la description n' apparait pas?

Tutorial

Kiepling avait presque tout écrit sur le "si".
 
Ce qui suit est idéal pour débuter, le lire une fois suffit. Juste pour savoir que ça existe.
 
Tous les cas de figure sont recensés ici, en 10 exemples concrets.
 
Après avoir présenté le classique if..then...else..end if, j'aborderai deux éléments
moins courants: le IIF et le #if...then...#Else...#End if.
 
Les explications entre guillemets ne sont pas de moi mais directement issus de l' aide Microsoft.
 
Souvent dans cet article, j' évoque les langages C, C++ et assembleur. C'est pas pour frimer ou casser les c...
juste pour situer VB parmi ses grands frères. En fait, VB est très puissant. Comme dit Jack l' essentiel c'est de
partager. Cottoyer du C et de l' assembleur en VB, c'est un plus parce qu' étudier un langage de programmation sans
savoir ce qui se passe au plus bas niveau c'est passer à côté deprincipes fondamentaux qui permet au programmeur de haut niveau deproduire un meilleur code.
 
 
 
Oki on y va!


*********************************************
Définition
*********************************************
If est une instruction qui effectue un test de condition sur une
expression afin d' exéctuer conditionnellement des instructions en fonction du résultat
de l' expression.
 
La condition est une expression qui prend la valeur True ou False.
Si l' argument est Null, il prend la valeur False.
 
*********************************************
IF...THEN
*********************************************
Exemple 1 - le cas le plus simple
if total > 100 then MsgBox "supérieur à 100"

Exemple 2 - l' exemple précédent se note aussi:
if total > 100 then
    MsgBox "supérieur à 100"
End if

Exemple 3 - Passer à la ligne, avec un underscore:
if total > 100 then _
    MsgBox "supérieur à 100"
 
 
Exemple 4 - plusieurs instructions à exécuter si la condition est vérifiée
if total > 100 then
    MsgBox "supérieur à 100"
    MsgBox "donc supérieur à 50"
    debug.print "supérieur!"
end if
 
Exemple 5 - plusieurs instructions sur une seule ligne.
La syntaxe à une seule ligne est employée par commodité,
pour économiser des lignes et obtenir un code compact.
(pas forcément lisible mais là n'est pas la question!)
La notation se fait avec deux points.
If A > 10 Then A = A + 1 : B = B + A : C = C + B
 
 
*********************************************
IF...THEN...ELSE...END IF
*********************************************
Exemple 6 - Else (notation sur une seule ligne)
La clause Else est facultative.
if total > 100 then MsgBox "supérieur à 100" else Msgbox "Inférieur ou égal à 100"
 
Exemple 7 - syntaxe sur plusieurs lignes:
if total > 100 then
    MsgBox "supérieur à 100"
Else
    Msgbox "Inférieur ou égal à 100"
End if
 
Exemple 8 - Notation sur plusieurs lignes avec l' underscore
If total > 100 Then _
    MsgBox "supérieur à 100" Else _
    MsgBox "Inférieur ou égal à 100"
 
*********************************************
ELSEIF
*********************************************
Exemple 9 - ElseIf
La clause ElseIf est facultative, comme le Else.
"Un bloc If peut contenir autant de clauses Elself que vous le souhaitez,
mais aucune ne peut apparaître après une clause Else. N'importe quel bloc
d'instructions peut contenir des instructions If imbriquées."
 
"Lorsque vous exécutez une instruction If d'un bloc, la condition est testée. Si la
valeur de l'argument condition est True, les instructions qui suivent
Then sont exécutées. Si la valeur de l'argument condition est False, chacune des conditions
ElseIf (s'il y en a) sont évaluées l'une après l'autre. Quand une condition de valeur True
est trouvée, les instructions qui suivent le Then correspondant sont exécutées. Si aucune
des conditions Elself n'a pour valeur True, ou s'il n'y a pas de clause ElseIf, les
instructions qui suivent Else sont exécutées. Une fois que les instructions qui suivent
Then ou Else exécutées, l'exécution du programme se poursuit à partir de l'instruction
située après End If."
 
if A > 10 then
    A = 10
Elseif A > 20 then
    C = D
Elseif B > 20 then
    C = D
End if
 
Exemple 10 - avec un Else final
Le Else permet de récupérer tout ce qui n'a pas été évalué comme True
par les ElseIf qui le précèdent:
 
if A > 10 then
    A = 10
Elseif A > 20 then
    C = D
Elseif B > 20 then
    C = D
Else
    B = B + 2
End if
 
Note: on a tendance à l' oublier mais le ElseIf se retrouve au plus bas
niveau, en assembleur. En fait l' instruction Select Case est un
if...elseif syntaxiquement déguisé, afin de rendre le code plus lisible et compréhensible par l' homme.
Quand on fait un Select Case en VB ou en C/C++, pendant la compilation le code est
transposé en assembleur et au plus bas niveau, c'est du elseif qu'on retrouve.
(Et puisqu'on aborde ce sujet, il en va de même pour l' horrible GOTO. Il est lui aussi
issu de l' assembleur. Pas zoli mais puissant).
 
Bill ajoute: "L'instruction Select Case peut s'avérer mieux adaptée à l'évaluation d'une
expression simple qui possède plusieurs actions possibles. Toutefois, la clause TypeOf
objectname Is objecttype ne peut pas être utilisée avec Select Case."
 
 
 
 
*********************************************
Consignes de compilation conditionnelle
*********************************************
Voilà tout est dit sur le if. Maintenant un mot sur une pratique peu courante en VB,
mais ultra courante en C/C++: la consigne de compilation conditionnelle de blocs
sélectionnés de code Visual Basic.
En C ça s' appelle une directive préprocesseur, cad que ce code est exécuté
pendant la compilation, son résultat est accessible par le programme compilé
mais le code ignoré n'est pas écrit dans l' exe.
Et comme en C, ça se note avec un dièse:
 
#if...then...#else...#end if
 
"La compilation conditionnelle est généralement utilisée pour compiler le même
programme sur différentes plates-formes. Elle est également utilisée pour éviter
que le code de débogage apparaisse dans un fichier exécutable. Le code exclu lors
d'une compilation conditionnelle est totalement absent du fichier exécutable final,
et n'a donc aucune incidence sur la taille de ce dernier ou sur les performances."
 
Et l' exemple de Bill:
' Si Mac prend la valeur true, exécute les instructions suivant le #If.
#If Mac Then  
    '. Placez uniquement des instructions Mac ici.
' S'il s'agit d'un programme Windows 32 bits, faites ceci:
#ElseIf Win32 Then    
    '. Placez uniquement des instructions Windows 32
    ' bits ici.
' Si votre programme n'est ni un programme Mac ni un
' programme Windows 32 bits, faites ceci:
#Else
    '. Placez les instructions de la plate-forme appropriée ici.
#End If
 
 
 
 
*********************************************
IIF
*********************************************
IIF évalue une expression et retourne l' un ou l' autre des deux arguments
passés en paramètres.
 
Synopsis:
IIf(expr, truepart, falsepart)
Si expr est vraie, retourner truepart. Sinon retourner falsepart.
 
Cet exemple (source: Microsoft) utilise la fonction IIf pour évaluer le paramètre TestMe
de la procédure CheckIt et renvoie soit le mot "Grand" si le montant est supérieur à 1000
soit le mot "Petit" s'il est inférieur à 1000.
 
Function CheckIt (TestMe As Integer)
    CheckIt = IIf(TestMe > 1000, "Grand", "Petit")
End Function
La notation équivalente avec la syntaxe classique serait:
    if TestMe > 1000 then CheckIt = "Grand" else CheckIt = "Petit"
 
Note: le IIF est très lent: 6 fois plus long à exécuter que le if classique.
Donc à éviter si les performances doivent être au rendez-vous. Amusez-vous
à mesurer et comparer les temps d' exécution, avec un Timer haute précision.
En fait le IIF a été conservé pour sa syntaxe élégante. On retrouve le paradigme
du IIF en C/C++, mais avec une autre syntaxe ( expr ? truepart : falsepart ).

 Historique

04 juin 2006 12:05:19 :
La présentation du tutorial n' apparait pas.

Commentaires

Commentaire de Malkuth le 12/06/2006 16:56:36

Salut

Tutos sympa pour les débutants mais deux petites remaques :

1- tu aurais put rappeller les mots clef ANDALSO et ORELSE, bien que n'étant pas le sujet de la tutos ils sont souvent moins connue que AND et OR.

Ex : If not Obj Is nothing AndAlso ([Test sur l'objet]) then ...
Dans ce cas [Test sur l'objet] ne sera tester que si Objet est défini je vous laisse trouver pour orelse

2- Tu devrait être plus méchant avec IIF(,,)
IIF est long et plus complex qu'il n'y parait exemple :

Dim text as string = IIF(Obj Is nothing,"Objet non définie",Obj.Nom)

ce code plantera a chaque fois que obj = nothing car dans tous les cas On évalura Obj.Nom

if faut penser a IIF comme a une function(ce qu'il est!) équivalente à

Public Function IIF(Test as boolean,Vrai as object,Faux as Object)As Object
IF Test then Return Vrai
Return Faux
End Function

Or Lors du passage des paramétre le programme va nous dire qu'il y'a une erreur sur le paramêtre FAUX (Normal Obj = Nothing)

Bon je sais pas si s'est super clair mais d'une maniére général évité IIF a tout pris, et si vous l'utilisé essayer de ne faire intervenir que des constantes dans les paramêtres Vrai ou Faux.

PS : je crois qu'en cela la construction [?:] du C/C++ réagi comme un vrai IF (disont inline!!) et pas comme une function.

Commentaire de katsankat le 14/06/2006 13:08:39

Salut :)
Correct, bonne intervention!

Le if(cond)?a:b; du C/C++ est un opérateur ternaire: un opérateur évolué qui réagit comme l' opéreateur d' incrémentation i++ ou ++n. Ce n'est donc ni une fonction, ni un if, ni une macro.

Commentaire de claudiusse le 19/06/2006 22:32:34

Je ne suis pas experimenté mais ceci ne devrai pas ce trouver dans un tuto

Commentaire de nico1610 le 22/06/2006 04:20:01

Comme le dit Malkuth le iif (à pas confondre avec l'IFF (c'est militaire comme terme)
le problème est qu'il se comporte comme une fonction et dans un fonction en VB6, TOUTES les lignes sont verifié avant l'execution de la fonction, donc dans l'exemple donné par Malkuth ca veut dire que lors de la prélecture, si l'object = Nothing (en clair qu'il n'exsiste pas ) alors la fonction iif va quand même rechercher le nom de cette object, et que dire du nom d'un object qui n'exsiste pas ?? Bas vb il vous dit ca : ERROR !!
Mais iif est un bon outil pour faire un truc du style :
Public Sub Clacul(mix as integer)
...
...
TexteSortie = "il y a "& str(mix) & "entrée" & iif(mix >1,"s","")
...
...
End Sub
Cette exemple bidon, montre juste que iif a fait économisé un temps considérable au codage et a la relecture c'est mieux qu'un
If (mix>1) then
    TexteSortie = "il y a "& str(mix) & "entrées"
Else
    TexteSortie = "il y a "& str(mix) & "entrée"
End If
ironie de la chose, vb est moin rapide dans le premier cas (comme quoi optimisation ne veut pas dire moins de ligne !)

Enfin je vais pas m'étendre sur le sujet, DarkSidouis a pondu un exelent article sur la fonction IIF, si le coeur vout en dis, cherchez donc sur vbf.

Sinon, bon tuto, plutot complet, en espérant que tout nous fasse pas toutes les fonctions de VB comme ca , ou la base de donné de VBF va surcharger !
(Je met 9/10 car tres bonne recherche approfondie sur le sujet, mais manque de claireté sur iif, qui me semble être un point important pour un tuto avec comme theme IF !)

PS : Comme quoi même des tres bon initié a vb6 regarde ce genre de tuto, qui n'apporte rien de neuf, mais quel plaisir de se replonger dans des truc "simple" quand on travail toutes ses nuit sur du ADO ou du DirectX ... enfin !

Commentaire de karimvb120576 le 03/12/2006 20:56:54

salut
et pour un if sur le nom d'un fichier enregistré comment en fait ??

Commentaire de exatex le 21/07/2007 08:33:59

salut,

il y a un probleme avec ton exemple 10:

if A > 10 then
    A = 10
Elseif A > 20 then
    C = D
Elseif B > 20 then
    C = D
Else
    B = B + 2
End if

Dans se cas la, "Elseif A > 20 then" ne sera jamais executé, car A > 20 => A > 10.

a+

Commentaire de ypelissier le 07/09/2009 17:24:42

Bonjour,
Certe, longtemps après tout le monde, je rebondi juste sur NICO1610 à propos de :
TexteSortie = "il y a "& str(mix) & "entrée" & iif(mix > 1, "s", "")

Elle est tout à fait exacte, pas de problème avec ça, néanmoins j'attire votre attention qu'il est maladroit de procéder ainsi, c'est à dire :
1 - mettre du texte dans le code,
2 - mettre la notion du pluriel par du code.

Je m'explique...
Dans le contexte international que nous vivons, il faut avoir une petite pensée pour l'évolution de l'application et sa mondialisation, donc gestion de langue, donc pas de texte en dure dans le code. Et il en va de soit que la marque du pluriel ne se fait pas de la même manière en français qu'en anglais ou en allemand.

Pensez à rassembler tout vos texte dans des variables distinctes en tant que constante par exemple.
Const cstrNbEntreSingulier as String = "il y a $1 entrée"
Const cstrNbEntrePluriel as String   = "il y a $1 entrées"

....
TexteSortie = Replace(iif(mix > 1, cstrNbEntrePluriel, cstrNbEntreSingulier), "$1", mix)
....

Et si vous avez plusieurs langues, faire une base de données
Dim cstrNbEntreSingulier as String
Dim cstrNbEntrePluriel as String

' Partie chargement des libellés
cstrNbEntreSingulier = xxx ' je ne rentre pas dans les détails d'accès aux données
cstrNbEntrePluriel   = xxx ' je ne rentre pas dans les détails d'accès aux données

....
TexteSortie = Replace(iif(mix > 1, cstrNbEntrePluriel, cstrNbEntreSingulier), "$1", mix)
....

Voilà ma modeste contribution....

Commentaire de Malkuth le 09/09/2009 12:42:07

encore un petit rebondissement sur le com' de  nico1610 :

IIF est effectivement plus long a executer que le code avec un IF classique pourquoi?

justement car IIF est un fonction et pas un opérateur, cecis implique donc toute la mécanique masquer et donc facilement oublier de l'apel d'une fonction, en gros :

Sauvegarde du context actuel,
Préparation de l'appel de fonction
Appel de la fonction
Finalisation de l'appel de fonction
Rechargement du context sauvegarder

Ce n'est pas trés grave si le code effectuant l'appel est peut utilisé, par contre c'est a proscrire de toutes boucle et d'une maniére général, toute boucle critique du code devrais être réalisé avec un minimum d'appel de fonction afin de limité les opération "masquer quel implique.

pour vous en convaicre, faite des test sur un code de se genre :

DIM c AS integer
FOR c=0TO1000000000
END FOR

ET

DIM c AS integer
FOR c=0TO1000000000
    Rien()
END FOR

avec

PUBLIC SUB Rien ()
END SUB

(Plus trop sur de la syntaxe VB, longtemps que j'ai pas pratiquè mais je pense que vous saurrez comprendre)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,218 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales