Testé sur : Excel 365 v2509 · Excel 2021 · Excel 2019 · dernière vérification le 05/06/2026
En bref — Select Case teste une variable contre de nombreuses valeurs possibles — plus net qu'une pile de ElseIf. 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
Voyez comme c'est plus lisible que quatre lignes de ElseIf. Ce guide couvre chaque style de correspondance : valeurs exactes, listes, plages, comparaisons et le coup de maître Select Case True.
Pourquoi Select Case bat un mur de ElseIf
Quand vous testez la même variable contre plusieurs valeurs, ElseIf devient vite bruyant. Select Case nomme la variable une seule fois, aligne les options et s'arrête au premier résultat — plus lisible, plus facile à étendre et légèrement plus rapide.
Comment ça marche
VBA évalue l'expression de test une fois, puis vérifie chaque Case de haut en bas. Le premier qui correspond l'emporte — les autres sont ignorés. Case Else capture tout ce qui n'a pas été trouvé (toujours en dernier).
Exemple 1 — Valeurs exactes et listes séparées par des virgules
Un seul Case peut contenir plusieurs valeurs séparées par des virgules :
Sub ClasserPays()
Dim pays As String
pays = Range("A2").Value
Select Case pays
Case "France", "Allemagne", "Italie", "Espagne"
Range("B2").Value = "Europe"
Case "Japon", "Corée", "Chine"
Range("B2").Value = "Asie"
Case Else
Range("B2").Value = "Autre"
End Select
End Sub
Exemple 2 — Plages numériques avec To
To couvre une plage inclusive — parfait pour les paliers et les tranches :
Select Case montantCommande
Case 0 To 99.99: remise = 0
Case 100 To 499.99: remise = 0.05
Case 500 To 999.99: remise = 0.1
Case Else: remise = 0.15
End Select
Exemple 3 — Is avec les opérateurs de comparaison
Quand une plage ne suffit pas, Is autorise >, <, >=, <=, <> :
Select Case temperature
Case Is < 0: statut = "Gel"
Case Is <= 15: statut = "Froid"
Case Is <= 25: statut = "Doux"
Case Else: statut = "Chaud"
End Select
L'ordre compte : comme le premier résultat l'emporte, listez vos cas de la borne la plus restrictive vers le haut.
Exemple 4 — Mélanger listes, plages et Is dans un seul bloc
Select Case score
Case 0, 1, 2: note = "Faible" ' une liste
Case 3 To 6: note = "Moyen" ' une plage
Case Is >= 7: note = "Bon" ' une comparaison
Case Else: note = "Non noté"
End Select
Les trois styles de correspondance coexistent librement. C'est cette souplesse qui fait que Select Case passe à l'échelle là où les chaînes de ElseIf deviennent illisibles.
Exemple 5 — L'astuce Select Case True
Besoin de tester des conditions sur des variables différentes, tout en gardant la disposition propre des Case ? Mettez l'expression de test à True :
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
Chaque Case est désormais une expression booléenne complète. C'est la façon idiomatique en VBA de garder lisible une logique à plusieurs variables — le seul endroit où Select Case dépasse une variable unique.
Exemple 6 — Case Else comme filet de sécurité
Incluez toujours Case Else, ne serait-ce que pour attraper les surprises :
Select Case Weekday(Date)
Case vbMonday To vbFriday: MsgBox "Jour ouvré"
Case vbSaturday, vbSunday: MsgBox "Week-end"
Case Else: MsgBox "Valeur de date inattendue" ' ne devrait jamais arriver
End Select
Un Case Else qui « ne devrait jamais s'exécuter » est la façon d'attraper les données imprévues au lieu de ne rien faire en silence.
Select Case ou If/ElseIf — lequel choisir
| Situation | À utiliser |
|---|---|
| Tester une variable contre 3 valeurs ou plus | Select Case |
| Plages de valeurs (1–10, 11–20…) | Select Case ... To |
| Conditions sur des variables différentes | If...ElseIf ou Select Case True |
| Une ou deux issues seulement | If...Else |
Règle d'or : même variable, beaucoup d'issues → Select Case. Variables différentes, peu d'issues → If.
Erreurs courantes (et la solution)
Deux cas se chevauchent et le mauvais se déclenche — Rappelez-vous : le premier résultat l'emporte. Case Is < 100 avant Case Is < 50 signifie que les valeurs sous 50 n'atteignent jamais le second cas. Ordonnez du plus précis au plus général.
Case x > 5 ne fait rien — Une comparaison nue est interdite ; écrivez Case Is > 5. Le mot-clé Is est obligatoire pour comparer.
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).
Arrêtez d'entretenir la logique de branchement à la main
Select Case est plus propre que ElseIf, mais ça reste du code à tester, déboguer et mettre à jour chaque fois que les règles métier changent. ExcelMaster Agent transforme la règle elle-même en interface — « 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 — 6 exemples concrets
- Boucle For VBA dans Excel — 8 exemples concrets
- Boucle While VBA — While, Do While et Do Until expliqués
FAQ
VBA Select Case peut-il tester une plage de valeurs ?
Oui — Case 1 To 10 correspond à toute valeur de 1 à 10 incluse. Vous pouvez combiner plages, listes et comparaisons Is dans le même bloc.
Comment tester plusieurs valeurs dans un seul cas ?
Séparez-les par des virgules : Case "A", "B", "C" correspond à l'une des trois. Plages et comparaisons peuvent rejoindre la liste : Case 1, 2, 5 To 9.
Quand utiliser Select Case plutôt que If ?
Quand vous testez la même variable contre trois valeurs ou plus. Pour une ou deux issues, ou des conditions sur des variables différentes, If...ElseIf suffit.
VBA Select Case est-il plus rapide que ElseIf ? Marginalement, car l'expression de test n'est évaluée qu'une fois. Le vrai gain est la lisibilité et la maintenabilité, pas la vitesse brute.
