Macros-commandes VBA/Conditionnelles et boucles
Structures de test
modifierTest conditionnel simple : le bloc If
modifierExemple :
if (testCondition) then
instruction1
else
instruction2
end if
Distinction de cas : Select Case
modifier'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
modifierUne 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
modifierEn 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
modifierPour 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
modifierEn 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
modifierCode 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À 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
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. |