Leçons de niveau 14

Macros-commandes VBA/Conditionnelles et boucles

Une page de Wikiversité.
Sauter à la navigation Sauter à la recherche
Début de la boite de navigation du chapitre
Conditionnelles et boucles
Icône de la faculté
Chapitre no 6
Leçon : Macros-commandes VBA
Chap. préc. :Manipulation des variables
Chap. suiv. :Enregistreur
fin de la boite de navigation du chapitre
Icon falscher Titel.svg
En raison de limitations techniques, la typographie souhaitable du titre, « Macros-commandes VBA : Conditionnelles et boucles
Macros-commandes VBA/Conditionnelles et boucles
 », n'a pu être restituée correctement ci-dessus.

Structures de test[modifier | modifier le wikicode]

Test conditionnel simple : le bloc If[modifier | modifier le wikicode]

Exemple :

if (testCondition) then
   instruction1
else
   instruction2
end if

Distinction de cas : Select Case[modifier | modifier le wikicode]

'Exemple d'instruction SELECT

 Select Case foo
    Case "valeur":
    Instructions_1
 [...]
    Case "Valeur_bis":
    Instructions_2
 End Select

'Fin de l'exemple

Fonctionnement : selon la valeur de la variable foo, il sera exécuté une série d'instruction définie comme suit.

Si foo = "valeur" alors on fera les Instructions_1 Si foo = "Valeur_bis" alors on exécutera les Instructions_2

C'est une fonction très pratique et plus propre que les if elseif else à répétitions.

Structures de boucle[modifier | modifier le wikicode]

Une boucle, c’est quoi ?

C'est comme son nom l'indique, le fait de faire quelque chose qui tourne en rond, de le répéter un certain nombre de fois.

Par exemple, on souhaite calculer la moyenne d'une classe de CM1, on connait toutes les moyennes des élèves et donc on va faire la boucle suivante :

Pour chaque élève de la classe, additionner la moyenne. Une fois tous les élèves y sont passés, on divise le total par le nombre d'élève.

Boucles à compteur : For[modifier | modifier le wikicode]

En anglais, "for" = "pour".

Syntaxe :

 For ''var'' = ''start'' to ''end''
   ''Instructions''
 Next ''var''

Traduction littérale : Pour la variable var égale à start, exécuter les Instructions et incrémenter var de 1 jusqu'à end


L'instruction Step Step = Pas. En définissant un pas, on choisi de modifier l'incrémentation de la variable a chaque passage de la boucle

 For ''var'' = ''start'' to ''end'' Step ''pas''
   ''Instructions''
 Next ''var''

Traduction littérale : Pour la variable var égale à start, exécuter les Instructions et incrémenter var de pas jusqu'à end

Cela sert quand le pas d'incrémentation est supérieur à 1, et/ou quand on connait le nombre d'itération.

For Each[modifier | modifier le wikicode]

Pour parcourir toutes les lignes d'un tableau :

 Dim MonTableau(1) As String
 Dim Ligne As Variant
 MonTableau(0) = "Ligne 1"
 MonTableau(1) = "Ligne 2"
 For Each Ligne In MonTableau
   MsgBox Ligne
 Next

Boucles conditionnelles : While[modifier | modifier le wikicode]

En anglais, "while" = "tant que".

Syntaxe :

 While ''condition''
   ''Instructions''
 Wend

Traduction littérale : tant que condition est vrai alors on exécute les instructions. Le contenu d'un while peut donc en théorie se produire zéro fois, si sa condition n’est pas remplie au départ.

Une variante permet donc de passer au moins une fois dans la boucle avant de tester sa condition de sortie :

 Do while ''condition''
   ''Instructions''
 Loop

Pour sortir du Do while il existe la commande Exit Do.

Calculer la moyenne de la classe de CM1[modifier | modifier le wikicode]

Code commun :

 Option Explicit
 Dim notes(5) as integer
 Dim noteTotale as integer
 Dim moyenne as long
 
 notes(0) = 10
 notes(1) = 12
 notes(2) = 18
 notes(3) = 5
 notes(4) = 15
 notes(5) = 11
Avec For :
 For i=0 to 5
  noteTotale = noteTotale + notes(i)
 Next i
Avec While
i=0
 While(i<6)
  noteTotale = noteTotale + notes(i)
  i = i+1
 Wend

Calcul de la moyenne

 moyenne = noteTotal/6

Étiquettes[modifier | modifier le wikicode]

À tout moment il est possible de sortir d'une boucle par une étiquette.

 i=0
 While(i<5)
  if i = x then
   goto sortie1
  end if
  i = i+1
 Wend
sortie1:
 msgbox ("x - i est nul")

De plus, afin de ne pas déranger l'utilisateur à chaque erreur d'exécution, de nombreux programmes débutent par :

on Error Resume Next

Pour annuler cette levée d'exception :

On Error GoTo 0

Il est également possible de spécifier où le programme doit poursuivre son exécution, avec goto + étiquette :

On Error GoTo ÉtiquetteErreur
Panneau d’avertissement Il est fortement déconseillé d’utiliser de goto quand on peut faire autrement, car cela rend le code moins compréhensible et peut être considéré comme de la programmation spaghetti.