Programmer dans le tableur (VBA) : les structures alternatives (tests simples, imbriqués et composés)
À retenir
Cadre programme : DCG, programme 2025 (arrêté du 4 août 2025, première session 2027), UE 8 « Systèmes d'information de gestion », partie 2 « Gérer des données du système d'information », sous-partie 2.2.3 « Mettre en œuvre des programmes au sein du tableur » (exécuter, modifier ou compléter le code d'une macro-commande, fonction ou procédure ; familles d'instructions : tests (structures alternatives) simples et imbriqués).
Pourquoi c'est central à l'examen : un test qui choisit entre plusieurs traitements est présent dans presque tous les programmes de gestion de l'épreuve : remise selon le montant, statut d'un client, validation d'une saisie. On demande de dérouler le code sur des valeurs données, de corriger un test (ordre, borne, opérateur) ou de compléter des lignes manquantes. Cette fiche prolonge le cours 32 (variables, affectation) et prépare le cours 34 (boucles).
À retenir
Rappel de cadrage : le programme ne demande ni pseudo-code ni algorithmique abstraite. Les programmes sont écrits directement dans le langage de macros du tableur (VBA).
01Le test If
1.1 Les trois formes
Test simple : une action n'est exécutée que si la condition est vraie.
If montant >= 5000 Then
remise = 0.05
End If
Test avec alternative : deux traitements, l'un si la condition est vraie, l'autre sinon.
If montant >= 5000 Then
remise = 0.05
Else
remise = 0
End If
Tests en cascade : plusieurs conditions testées l'une après l'autre ; le premier test vrai l'emporte et les suivants sont ignorés.
If montant < 1000 Then
remise = 0
ElseIf montant < 5000 Then
remise = 0.03
Else
remise = 0.05
End If
1.2 Règles de syntaxe
If condition Then: le motThenest obligatoire ;- un bloc
Ifse termine parEnd If; ElseIfs'écrit en un seul mot ;Elsen'a pas de condition ;- on indente les lignes de chaque bloc : c'est ce qui rend un test imbriqué lisible ;
- une forme à une seule ligne existe pour un test très court (
If x > 0 Then y = 1), mais le bloc est préférable.
1.3 Les opérateurs de comparaison
| Opérateur | Sens | Opérateur | Sens |
|---|---|---|---|
= | égal | <> | différent |
< | strictement inférieur | > | strictement supérieur |
<= | inférieur ou égal | >= | supérieur ou égal |
Dans un test, = est une comparaison et non une affectation (cours 32). Par défaut, la comparaison de textes distingue les majuscules et les minuscules : "Sud" = "sud" est faux. On neutralise la casse avec UCase (tout en majuscules) : UCase(region) = "SUD".
02Les conditions composées
| Opérateur | Vrai quand... | Exemple |
|---|---|---|
And | les deux conditions sont vraies | ca >= 20000 And retard = 0 |
Or | au moins une condition est vraie | retard > 30 Or solde < 0 |
Not | la condition est fausse | Not IsNumeric(saisie) |
Priorité : Not, puis And, puis Or. Dans a Or b And c, c'est b And c qui est évalué d'abord. En cas de doute, on ajoute des parenthèses : (a Or b) And c.
Piège important : en VBA, And et Or évaluent toujours les deux conditions, même si la première suffit à conclure. Le test suivant échoue quand retard vaut 0 (division par zéro), alors qu'on croyait s'en protéger :
If retard > 0 And ca / retard > 100 Then ' erreur d'exécution si retard = 0
On sépare alors en deux tests imbriqués :
If retard > 0 Then
If ca / retard > 100 Then
' traitement
End If
End If
03Tester la nature d'une valeur
Les valeurs saisies ou lues peuvent être inattendues : texte, cellule vide. On les teste avant de les utiliser.
| Fonction | Renvoie True quand... | Exemple |
|---|---|---|
IsNumeric(valeur) | la valeur peut être lue comme un nombre | IsNumeric("12,5") (avec la configuration française) |
IsEmpty(cellule) | la cellule est vide | IsEmpty(Range("B2")) |
IsDate(valeur) | la valeur peut être lue comme une date | IsDate("12/03/2026") |
valeur = "" | le texte est vide | If saisie = "" Then |
Avec InputBox, si l'utilisateur annule ou ne saisit rien, la variable contient un texte vide : c'est le premier test à faire.
04La variante Select Case
Quand on teste une même valeur contre plusieurs seuils ou plusieurs valeurs, Select Case est une alternative plus lisible qu'une longue cascade de ElseIf. Elle n'est pas citée par le programme : on la rencontre parfois, mais elle n'est jamais exigée.
Select Case montant
Case Is < 1000
remise = 0
Case Is < 5000
remise = 0.03
Case Else
remise = 0.05
End Select
Les cas sont évalués dans l'ordre ; le premier qui convient est exécuté. Case Else joue le rôle du Else.
05Du SI du tableur au If du code
| Tableur (cours 26) | Code |
|---|---|
=SI(B5>=5000;0,05;0) | If b5 >= 5000 Then taux = 0.05 Else taux = 0 |
SI(test1;a;SI(test2;b;c)) | If test1 Then ... ElseIf test2 Then ... Else ... End If |
ET(c1;c2), OU(c1;c2), NON(c) | c1 And c2, c1 Or c2, Not c |
On peut donc traduire une formule en programme. Le programme est préférable quand la règle comporte beaucoup de cas, des messages, des écritures dans plusieurs cellules ; la formule reste préférable pour un calcul simple.
06Écrire une fonction de gestion : bonnes pratiques
- Ordonner les tests du plus restrictif au moins restrictif : le premier test vrai l'emporte.
- Décider qui appartient à la borne :
<ou<=? L'énoncé dit « à partir de » (borne dans la tranche haute) ou « jusqu'à » (borne dans la tranche basse). - Garantir qu'un cas est toujours traité : on termine par un
Else. - Ne pas répéter les mêmes valeurs dans tout le code : on les déclare une fois, par exemple en
Consten tête du module (une seule ligne à modifier si le barème change). - Passer les paramètres en arguments lorsque la fonction est utilisée dans des cellules : une fonction qui lit directement des cellules qui ne figurent pas dans ses arguments n'est pas recalculée automatiquement quand ces cellules changent.