🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Select Case dans Excel — comment ça marche & quand l'utiliser (vs ElseIf)

|

VBA Select Case dans Excel — comment ça marche & quand l'utiliser (vs ElseIf)

Testé sur : Excel 365 v2509 · Excel 2021 · Excel 2019 · dernière vérification le 05/06/2026

En brefSelect Case prend une valeur et l'aiguille vers une issue. Copiez et adaptez :

Sub CalculerNote()
    Dim points As Long
    points = Range("A1").Value

    Select Case points
        Case Is >= 90:  Range("B1").Value = "Excellent"
        Case 75 To 89:  Range("B1").Value = "Bien"
        Case 60 To 74:  Range("B1").Value = "Passable"
        Case Else:      Range("B1").Value = "Échoué"
    End Select
End Sub

Mais l'extrait n'est pas l'essentiel. La plupart des guides vous jettent dix variantes et vous laissent deviner quand Select Case est le bon choix. Ici, le modèle mental vient d'abord — pour que vous puissiez juger des cas que personne ne vous a montrés.

L'idée centrale : Select Case est un aiguillage, pas une liste de contrôle

If...ElseIf est une liste de contrôle. Elle pose une suite de questions oui/non indépendantes — est-ce ceci ? non… est-ce cela ? non… — et chaque question peut porter sur une variable différente.

Select Case est un aiguillage. Il prend une valeur, parcourt les voies et bascule sur la première qui convient. Chaque Case est une destination possible pour la même entrée.

Cette seule distinction vous dit tout :

  • Même variable, plusieurs issues → aiguillage. Select Case.
  • Variables différentes, vraies questions indépendantes → liste de contrôle. If...ElseIf.

Si vous écrivez un jour ElseIf points = 1 … ElseIf points = 2 … ElseIf points = 3, vous avez construit un aiguillage avec des pièces de liste de contrôle. C'est le signal pour basculer.

La règle qui explique tous les bugs : le premier qui correspond l'emporte

VBA évalue votre valeur une fois, puis essaie chaque Case de haut en bas et s'arrête au premier qui correspond. Intégrez cette règle et le bug classique perd tout mystère :

' BUG : rien sous 100 n'atteint jamais la deuxième ligne
Select Case points
    Case Is < 100:  note = "à revoir"
    Case Is < 50:   note = "critique"      ' ← code mort
End Select

Case Is < 100 avale déjà tout ce qui est sous 50, donc la voie « critique » n'est jamais atteinte. Le correctif n'est pas un nouveau mot-clé, c'est l'ordre. Le cas le plus étroit en premier :

Select Case points
    Case Is < 50:   note = "critique"
    Case Is < 100:  note = "à revoir"
End Select

Presque toute question « mon Select Case fait l'inverse » est cette règle qui mord. Le concept est le guide de débogage.

Comment l'aiguillage bascule — quatre formes de voie

Les styles de correspondance s'apprennent une fois. Chacun est une forme de voie différente ; tous cohabitent dans le même bloc.

Valeurs exactes et listes — une voie, plusieurs étiquettes :

Select Case pays
    Case "France", "Allemagne", "Italie":  region = "Europe"
    Case "Japon", "Corée", "Chine":        region = "Asie"
    Case Else:                             region = "Autre"
End Select

Plages avec To — le cheval de trait des paliers et tranches :

Select Case montantCommande
    Case 0 To 99.99:    remise = 0
    Case 100 To 499.99: remise = 0.05
    Case Else:          remise = 0.1
End Select

Is avec comparaison — quand une plage ne suffit pas (>, <, >=, <=, <>). Is est obligatoire ; un Case points > 5 nu ne compile pas.

Mélangez librement dans un bloc — cette souplesse est précisément pourquoi Select Case passe à l'échelle là où les chaînes de ElseIf pourrissent :

Select Case points
    Case 0, 1, 2:   note = "Faible"   ' une liste
    Case 3 To 6:    note = "Moyen"    ' une plage
    Case Is >= 7:   note = "Bon"      ' une comparaison
End Select

La sortie de secours : Select Case True

Voici le geste qui distingue ceux qui connaissent Select Case de ceux qui s'en servent. Quand vos conditions portent sur des variables différentes, vous reviendriez normalement aux If imbriqués. Ne le faites pas. Mettez l'expression de test à True et chaque Case devient un booléen complet :

Select Case True
    Case age < 18 And aUnTuteur:    tarif = "Enfant"
    Case age >= 65:                 tarif = "Senior"
    Case estEtudiant And age < 26:  tarif = "Étudiant"
    Case Else:                      tarif = "Adulte"
End Select

C'est la manière idiomatique, en VBA, de garder une logique multi-variables plate et lisible — le seul endroit où l'aiguillage dépasse une variable unique. Préférez-le à une pyramide de If.

Quand NE PAS utiliser Select Case

Un avis honnête, car la plupart des guides l'évitent :

  • Deux issues ? Utilisez If...Else. Un Select Case avec un seul Case et un Case Else n'est que du cérémonial.
  • Une condition par branche, toutes sur des variables différentes ? C'est une liste de contrôle — If...ElseIf se lit mieux, sauf si vous voulez délibérément la disposition Select Case True.
  • Trois issues ou plus sur la même variable ? Toujours Select Case. Si vous écrivez encore des ElseIf ici, vous compliquez la tâche du prochain lecteur (souvent vous-même dans six mois).

La vitesse est une note de bas de page — l'expression de test n'est évaluée qu'une fois — mais choisissez Select Case pour la lisibilité, pas pour des microsecondes.

Erreurs courantes — toutes des conséquences du modèle

  • Mauvais cas déclenché / branche morte. Encore le premier qui correspond. Ordonnez du plus étroit au plus large.
  • Case points > 5 ne compile pas. Une comparaison nue est interdite ; écrivez Case Is > 5.
  • La correspondance de texte échoue sur la casse. Select Case distingue la casse par défaut. Ajoutez Option Compare Text en haut du module, ou normalisez avec Select Case LCase(pays).

Passé un certain point, la logique de branchement ne devrait plus s'écrire à la main

Select Case est le bon outil pour aiguiller une valeur — mais dès que les règles elles-mêmes changent sans cesse (nouveaux paliers, nouvelles tranches, nouveaux cas limites), vous testez et retestez du code à chaque modification. ExcelMaster Agent vous laisse énoncer la règle au lieu de la coder — « répartis la colonne A : sous 100 = pas de remise, 100–499 = 5 %, 500+ = 10 % » — et génère la logique, plages et cas limites compris. Essayer gratuitement →

Guides associés

FAQ

Quand utiliser Select Case plutôt que If ? Quand vous aiguillez une variable vers trois issues ou plus. Pour deux issues, ou des conditions sur des variables différentes, If...ElseIf se lit mieux — sauf si vous utilisez délibérément le motif Select Case True.

Select Case peut-il tester une plage de valeurs ? Oui — Case 1 To 10 correspond à toute valeur de 1 à 10 incluse, et vous pouvez mélanger plages, listes et comparaisons Is dans le même bloc.

Pourquoi mon Select Case déclenche-t-il la mauvaise branche ? Le premier qui correspond l'emporte. Un cas large placé avant un cas étroit avale ce dernier — réordonnez du plus étroit au plus large.

Select Case est-il plus rapide que ElseIf ? Marginalement, car la valeur n'est évaluée qu'une fois. Le vrai gain est la lisibilité, pas la vitesse.