Testé sur : Excel 365 v2509 · Excel 2021 · Excel 2019 · dernière vérification le 05/06/2026
En bref — Select 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. UnSelect Caseavec un seulCaseet unCase Elsen'est que du cérémonial. - Une condition par branche, toutes sur des variables différentes ? C'est une liste de contrôle —
If...ElseIfse lit mieux, sauf si vous voulez délibérément la dispositionSelect Case True. - Trois issues ou plus sur la même variable ? Toujours
Select Case. Si vous écrivez encore desElseIfici, 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 > 5ne compile pas. Une comparaison nue est interdite ; écrivezCase Is > 5.- La correspondance de texte échoue sur la casse.
Select Casedistingue la casse par défaut. AjoutezOption Compare Texten haut du module, ou normalisez avecSelect 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
- VBA If Then Else — quand la liste de contrôle est la bonne forme
- Boucle For VBA dans Excel — 8 exemples concrets
- Boucle While VBA — While, Do While et Do Until expliqué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.
