Les conditions en VBA : If Then, Else, ElseIf et Select Case
Une macro doit souvent choisir : appliquer une remise si le montant dépasse un seuil, afficher « certifié » ou « attestation », attribuer un niveau selon un score. VBA dispose pour cela de deux structures. If … Then … End If, avec ses variantes Else et ElseIf, teste une ou plusieurs conditions ; Select Case compare une même valeur à une liste de cas. Les exemples utilisent les scores de la certification TOSA (1 à 1 000). Voir aussi les procédures et fonctions et MsgBox et InputBox.
If … Then … End If
La condition est une expression qui vaut Vrai ou Faux, construite avec les opérateurs =, <> (différent), <, <=, >, >=. Si elle est vraie, les instructions entre Then et End If s’exécutent ; sinon VBA passe directement à la ligne qui suit End If. Plusieurs conditions se combinent avec And (toutes vraies), Or (au moins une vraie) et Not (inverse). Pour une seule instruction, la forme sur une ligne se passe de End If.
And ou d’un Or. If n <> 0 And total / n > 10 provoque une division par zéro quand n vaut 0 : imbriquez deux If.If (a Or b) And c Then. Sans elles, And est évalué avant Or, et la lecture devient ambiguë.If … Then … Else … End If
Else ajoute le chemin « sinon » : quand la condition est fausse, ce sont les instructions entre Else et End If qui s’exécutent. Exactement un des deux blocs s’exécute, jamais les deux, jamais aucun. C’est la structure d’une alternative : certifié ou non, payé ou impayé, stock suffisant ou à commander.
resultat = IIf(score >= 351, "Certifié", "Attestation") choisit une valeur en une ligne. Attention : comme And, IIf évalue toujours ses deux branches.If … Then … ElseIf … Then … Else … End If
Pour plus de deux cas, on enchaîne les ElseIf. VBA teste les conditions de haut en bas et exécute le bloc de la première condition vraie ; les suivantes ne sont pas évaluées. Le Else final, facultatif, traite tous les autres cas. L’ordre des tests est donc essentiel : pour des seuils, on part du plus exigeant. Barème TOSA : Initial (1 à 350), Basique (351 à 550), Opérationnel (551 à 725), Avancé (726 à 875), Expert (876 à 1 000).
ElseIf s’écrit attaché. Else If en deux mots ouvre un nouveau If imbriqué qui réclame son propre End If : erreur « Block If sans End If ».> et >=.Select Case
Quand on compare une même valeur à plusieurs possibilités, Select Case est plus lisible qu’une série d’ElseIf. Chaque Case accepte une valeur, une liste (Case "Excel", "Word"), une plage (Case 351 To 550) ou une comparaison (Case Is >= 5000). Comme pour ElseIf, seul le premier Case qui correspond s’exécute ; Case Else traite le reste. La structure se termine par End Select.
Select Case True puis Case montant >= 1000 And nb >= 3. Le premier Case qui vaut Vrai s’exécute.Exercice : classer les résultats TOSA d’un groupe
Classeur d’exercice (Énoncé et Corrigé)
- Enregistrez le classeur en .xlsm et collez le code de la feuille « Code VBA » dans un module standard.
- Exécutez
Classer: pour chaque stagiaire, la macro écrit le niveau (If … ElseIf), la certification (If … Else) et la catégorie de la formation (Select Case). - Vérifiez les cas limites : Petit (351 points), Richard (550) et Moreau (726).
- Dans la fenêtre d’exécution, testez la fonction
Remise:? Remise(1400, 4)et? Remise(1750, 2). - Répondez aux questions de la feuille Contrôle.