Site:  Cours VB.net  
1.11 Les Structures de contrôle

              

Elles permettent de gérer le déroulement du code.

On étudiera:

    If Then

    Select Case

    For Next

    Do Loop

    While End While

    For Each

    Switch

    IIF

     Choose

 

If then

Permet de créer une structure décisionnelle :

If Condition Then

End if

Si la Condition est vraie alors……

Une instruction (ou un bloc d’instructions) peut être exécutée si une condition est vraie.

 Exemple:

If A=B then

    MsgBox("A=B")

End If

 Si A = B alors on exécute le bloc de code entre Then  et End If, il affiche dans une fenêtre MessageBox « A=B »

 

Noter que, si on le désire, on peut écrire sur la même ligne après Then (Pas besoin de End If).

If A=B Then MsgBox("A=B")

 C'est équivalent

 

On peut tester une condition fausse et dans ce cas utiliser Not.

If Not A=B Then MsgBox("A différent de B")

 Si A et B sont différent (Not A=B signifie NON égaux) afficher "A différent de B".

(On aurait pu écrire If A<>B Then...)

 

Il peut y avoir des opérateurs logiques dans la condition:

If A=B And C=D then..    'Si A égal B et si C égal D 

 

Autre exemple :

Dim n As String ="33"  on crée une String , on y met les caractères "33"

If Not IsNumeric(n) then

            MsgBox ("n n’est pas un nombre")

            Exit Sub

End if

Si n n’est pas numérique alors afficher dans une boite de dialogue: « n n’est pas un nombre » puis quitter la procédure (Exit Sub)

Noter bien que comme il y a plusieurs instructions après Then on crée un bloc d’instruction de plusieurs lignes entre Then et End If.

 

Simplification d'écriture:

Au lieu de

If Condition = True Then

End if

On peut écrire:

If Condition Then   

End if

Condition étant de toute manière évaluée pour voir si elle est égale à True.

 

On peut aussi utiliser la structure :

Si..Alors..Sinon

 

 

If condition then

.. ‘effectué si condition vraie

..

Else

      ..’effectué si condition fausse

      ..

End if

 

Exemple:

If A=B then

    MsgBox("A=B")

Else

    MsgBox("A différend de B")

End If

 

 

Des structures If Then peuvent être imbriquées :

 

If..

      If..

      ..

      Else

            If..

     ..

End if

      End if

End If

 

Pour bien repérer les différents niveaux, utiliser les tabulations et décaler le ‘If then’ et son code au même niveau.

 

Pour vérifier s’il n’y a pas d’erreur, compter les ‘If’, il doit y en avoir autant que des ‘End If’. VB souligne le ‘If’ si il n’y a pas de ‘End if’.

 Dernière syntaxe:

If Condition1 Then

    ..

ElseIf condition2 Then

    ..

ElseIf condition3 Then

    ..

end if

 

Si condition1...

Sinon si condition2

Sinon si condition3

Fin Si

 

Select Case

Créer une structure décisionnelle  permettant  d’exécuter un grand nombre de blocs de code différents en fonction de la valeur d’une expression :

 

Select Case expression

Case valeur1

      ‘code effectué si expression=valeur1

      ……

Case valeur2

      ‘code effectué si expression=valeur2

      ……

Case valeur3

      ‘code effectué si expression=valeur3

      ……

..

Case Else

      ‘code effectué dans tous les autres cas

 

End Select

 

Attention si expression=valeur1 le code entre Case Valeur1 et Case valeur2 (et uniquement celui là) est effectué, puis l’exécution saute après End Select.

 

Exemple d’un code affichant le jour de la semaine :

 

J est un entier contenant le numéro d’ordre du jour

N=J Mod 7     ‘ contient le reste de la division entière de J par 7 

Select Case N

Case 1                        'Si N=1

      MsgBox "Lundi"          'Afficher 'Lundi' 

 

Case 2

      MsgBox "Mardi"

 

Case 3

      MsgBox "Mercredi"

..

..

Case Else

      MsgBox "Nombre pas entre 1 et 7"

End select

 

 

Nous venons d’utiliser une expression simple après chaque Case mais on peut utiliser des expressions plus complexes :

 

Plusieurs clauses d'expression peuvent être séparées par des virgules.

Select Case N

Case 8,9,10

      ‘Effectuer le code  si N=8 ou N=9 ou N=10

 

Le mot clé To permet de définir les limites d'une plage de valeurs correspondantes pour N.

Select Case N

Case 8 To 20

      ‘Effectuer le code  si N est dans la plage 8 à 20

 

Le mot clé Is associé à un opérateur de comparaison (=, <>, <, <=, > ou >=) permet de spécifier une restriction sur les valeurs correspondantes de l’expression. Si le mot clé Is n'est pas indiqué, il est automatiquement inséré.

Select Case N

Case Is >= 5

      ‘Effectuer le code  si N supérieur ou égal à 5.

 

Vous pouvez utiliser plusieurs expressions ou plages dans chaque clause Case (séparées par des virgules). Par exemple, la ligne suivante est valide :

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

 

Vous pouvez aussi indiquer des plages et des expressions multiples pour des chaînes de caractères. Dans l'exemple suivant, Case correspond aux chaînes qui sont absolument identiques à « aaa », aux chaînes comprises entre «ccc» et «ddd» dans l'ordre alphabétique, ainsi qu'à la valeur de Var :

Case "aaa", "ccc" To "ddd", Var

 

Pour les 'Pro':

Les "Case" peuvent contenir n'importe quelle expression. Aussi il est possible de tester dans les conditions, non pas les valeurs d'une même variable, mais divers fonctions totalement indépendantes ou comme ici des fonctions travaillant toutes sur une même variable. C'est un usage méconnu du Select Case qui clarifie l'écriture et qui évite de multiples If Then ou Goto.

Ici une routine reçoit une String contenant un nom de fichier, elle teste si le nom n'est pas vide  puis si le fichier existe..

Sub TestFichier (File As String)

Select Case true

        Case len(File) = 0 

            msgbox "Pas de nom de fichier"   

        Case Not Exit(File)

            errorState=File.NotExist

        Case Not Open(File)

            errorState=File.NotOpen

        Case Not Overwrite(File)

            errorState=File.NotOverwrite

        Case else

        'placer les exceptions ici

End Select

End Sub
 

 

 

For Next

Permet de faire des boucles.

 

Les boucles sont très utilisées pour parcourir une plage de valeur qui permet par exemple de parcourir tous les éléments d’un tableau ou pour effectuer de manière itérative un calcul.

 

Le nombre de boucle va être déterminé par une variable qui sert de compteur.

 

Le nombre d’exécution est déterminé au départ de la boucle car le compteur a une valeur de départ, une valeur d’arrêt.

Pour variable allant de 'début' à 'fin' 

Boucler

donne en VB

For variable=début To fin

..

Next variable

 

Dim i as Integer

For i=1 to 10

MsgBox i.toString

Next i

  

En langage courant : Pour i allant de 1 à 10, afficher la valeur de i dans une MessageBox.

 

La variable compteur va prendre successivement les valeurs 1  puis 2 puis 3…… jusqu'à 10 et effectuer à chaque fois le code qui est entre For et Next.

Si on décompose :

i=1  Affiche « 1 », arrivé à Next, remonte à For, i =2 , affiche « 2 »……

…… i=10 , affiche « 10 » poursuit après Next.

 

En effet i augmente d'une unité à chaque 'tour'.

 

Il peut y avoir un pas (Step), le compteur s'incrémente de la valeur du pas à chaque boucle. 

Dim i as Integer

For i=1 to 10 Step 2

MsgBox i.toString

 Next i

Affiche 1 puis 3 puis 5 puis 7 puis 9

Attention si la valeur de sortie de boucle est inférieure à celle d’entrée il faut indiquer un pas négatif

Dim i as integer

For i=10 to 1 Step -2

MsgBox i.toString

 Next i

Affiche 10 puis 8 puis 6 puis 4 puis 2

 

Bien sur on peut utiliser des expressions calculées :

 

For i=A to B*10 Step X-2

MsgBox i.toString

Next i 

 

La variable boucle peut être déclarée après For, dans ce cas cette variable n'existe que dans la boucle:

For K As Integer = 1 To 10
    ...
Next K

 

On peut quitter prématurément la boucle avec Exit For

For K As Integer = 1 To 10
    ...
    If A=2 Then Exit For

Next K

Dans ce cas la boucle s'arrête de tourner, on poursuit après Next.

 

Remarque:

Le nom de la variable de boucle est facultatif après Next:

For K As Integer = 1 To 10
    ...
Next

 

Est correct.

 

Dans la version 2005 il existe aussi Continue For qui permet de sauter au prochain Next et de poursuivre la boucle.

 

 

Do Loop

Permet aussi de faire des boucles mais sans que le nombre de boucle (d’itération) soit déterminé au départ.

Do 

..

Loop

La boucle précédente tournera sans fin. Aussi il faut ajouter une condition d'arrêt contenant:

Until (jusqu’à ce que). 

ou 

While (tant que).

 

C’est la condition d’arrêt qui détermine la sortie de la boucle.

La condition d'arrêt peut être en début, après Do ou en fin après Loop.

En début après Do:

 

Exemple avec Until:

Do Until condition   

   Code

Loop

'Boucler jusqu'à ce que : condition est une condition de sortie.

Si condition est fausse, effectuer le code, boucler et recommencer le code jusqu’à ce que condition soit égale à True.

A chaque boucle la condition est évaluée.

Attention, avant de débuter la boucle, la condition doit être fausse sinon la boucle ne sera jamais exécutée..

 

ou en fin après Loop.

Exemple avec While.

Do    

  Code

Loop While condition

            'Boucler tant que que : condition est une condition de sortie.

            La condition étant en fin, le contenue de la boucle sera exécuté au moins une fois.

 

En résumé: Loop veut dire boucle. Après Loop ou Do (faire) on doit mettre Until (jusqu’à ce que) ou While (tant que).

 

Exemple:

Créer une boucle affichant successivement dans une MessageBox les chiffres de 1 à 10.

Dim i As Integer = 0   

Do  

    i = i + 1          'incrémente i de 1   

   MsgBox(i.ToString)  'affiche la valeur de i dans une messageBox  

Loop Until i = 10      'sort de la boucle quand i=10   

 

Exemple pour chercher un mot dans une liste :

Lire Premier Mot

Do Until MotCherché=MotPointé

      Pointer Mot suivant

Loop

 

On peut aussi utiliser While (Tant que)

Lire Premier mot

Do While MotCherché<>MotPointé

      Pointer Mot suivant

Loop

 

Tant que le mot cherché est différent du mot pointé, boucler.

 

La condition peut être mise en fin de boucle, cela permet d’effectuer au moins une fois le code. Cela évite aussi d’avoir à démarrer le processus avant la boucle : dans notre exemple cela permet d’éviter de lire le premier mot :

Les mots sont dans un tableau Mot(); premier élément Mot(0)

IndexMot=-1 

Do

     IndexMot=IndexMot+1

Loop While MotCherché<>Mot(IndexMot)

Il faudrait en plus boucler jusqu'à la fin du tableau et pas plus. 

 

Exemple complet : Imposer la saisie d’un nombre négatif à l’utilisateur :

On utilise InPutBox qui ouvre une fenêtre, et attend une réponse, InputBox retourne une String contenant le texte tapé.

Dim Reponse as String

Dim nombre As Single

Do

      Reponse=InPutBox(« Entrer un nombre négatif. »)

            nombre= Csng( Reponse)

Loop  While nombre >=0

 

Si le nombre n'est pas négatif, la boucle fonctionne et la boite InPutBox s’ouvre de nouveau.

 

Comment créer une boucle qui tourne sans fin?

Do

   ...  

Loop  While True

 

 

While, End While

Permet une boucle qui tourne tant qu'une condition est vraie.

While =Tant que.

 

While Condition

...

End While

Exemple: on incrémente un compteur, on sort quand il est égal à 20.

Dim Counter As Integer = 0
While Counter < 10
' Test la valeur du compteur.
   Counter += 1
' Incrémente le compteur.

    MsgBox(Counter.ToString)
End While

 

Affichera les nombre de 1 à 10.

 

For Each

C’est une variante de la boucle For mais elle permet de parcourir les objets d’une collection.

Prenons un contrôle ListBox il a une collection Items qui contient tous les éléments de la ListBox 

ListBox.item(0) contient la première ligne

ListBox.item(1)  contient la seconde ligne

ListBox.item(2)…contient la troisième.

Parcourir tous les éléments de la ListBox et les mettre dans une variable V s’écrirait :

Dim V as string

Dim item as objet

For Each item in ListBox.items

      V=V+item

Next

 La variable de boucle peut être déclarée après For:

Dim V as string

For Each item As Objet in ListBox.items

      V=V+item

Next

Au lieu de déclarer Item comme un objet, on aurait pu le déclarer comme un ListBox.Item

 

Cette notion de collection  est beaucoup plus large que je le pensais:

Dim chaine As String = "aeiou"

Dim c As String

For Each car As String In chaine

    c = car....

Next

Ici pour tester chaque caractère dans une String, on peut utiliser For Each.

 

 

Switch.

Switch est utilisé avec des couples d'arguments, si le premier est vrai, le second est retourné.

Réponse=Switch( Expression1, Reponse1, Expression2, Reponse2)

Si Expression2 est vrai Reponse2 est retourné.

Monnaie= Microsoft.VisualBasic.Switch(Pays = "USA", "Dollar", _
Pays = "FRANCE", "Euro", Pays = "Angleterre", "Livre")

 

Si Pays="FRANCE", cette expression est vrai, le second objet du couple est retourné.

Retourne  Euro
 

IIf

IIf est utilisé avec 3 arguments.

Si le premier argument est vrai , le second est retourné.

Si le premier argument est faux c'est le troisième qui est retourné.

Reponse = IIf( Nombre > 0, "Positif", "Négatif ou 0")
 

Comme dans Switch on peut utiliser des procédures comme argument.

 

Choose

La fonction Choose retourne un membre de la liste passée dans Chooce(), selon la valeur de Index.

ElementRetourné =Choose (Index, Par1, Par2, Par3, Par4)

Dim nom As String =Choose(2, "Speedy", "United", "Federal")

Retourne "United".