VBA – Instruction Select Case

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

David Gagnon

Last updated on janvier 12, 2022

En VBA, l’instruction Select Case est une alternative à l’instruction If-Then, elle vous permet de tester si certaines conditions sont remplies, en exécutant un code spécifique pour chaque condition. L’instruction Select est préférable à l’instruction If lorsqu’il y a plusieurs conditions à traiter.

Exemple d’utilisation de Select Case

Cet exemple invite l’utilisateur à utiliser une boîte de message YesNoCancel et teste l’option sélectionnée par l’utilisateur :

Sub Select_Case_Oui_Non_Annuler()

    Dim nRéponse As VbMsgBoxResult
    
    nRéponse = MsgBox("...", vbYesNoCancel)
    
    Select Case nRéponse
        Case vbYes
            MsgBox "Oui"
        Case vbNo
            MsgBox "Non"
        Case vbCancel
            MsgBox "Annuler"
    End Select
End Sub

Ci-dessous, nous avons rédigé l’équivalent de l’exemple précédent en utilisant plutôt une déclaration If. Vous remarquerez que l’instruction Case Select implique un peu moins de code et est plus facile à lire – cet avantage est amplifié lorsque vous testez plusieurs critères.

Sub If_Oui_Non_Annuler()
    Dim nRéponse As VbMsgBoxResult
    
    nRéponse = MsgBox("...", vbYesNoCancel)
    
    If nRéponse = vbYes Then
        MsgBox "Oui"
    ElseIf nRéponse = vbNo Then
        MsgBox "Non"
    ElseIf nRéponse = vbCancel Then
        MsgBox "Annuler"
    End If
End Sub

Syntaxe de l’Instruction Case

La syntaxe de l’instruction Select Case est la suivante :

Select Case [Expression de test]
    Case [Condition 1]
        [Action si la condition 1 est vraie]
    Case [Condition 2]
        [Action si la condition 2 est vraie]
    Case [Condition n]
        [Action si la condition n est vraie]
    Case Else
        [Action si aucune n'est vraie]
End Select

Où :

[Expression de test] – Valeur à évaluer. Il s’agit généralement d’une variable.

[Action si la condition n est vraie] – Il s’agit simplement du code à exécuter si la condition est remplie (comme avec une instruction If)

[Condition n] – C’est la condition à tester. Il existe de nombreuses manières différentes de tester les conditions. Nous allons les aborder ci-dessous.

La déclaration select case exécutera le code pour la PREMIÈRE condition qui s’avère être VRAIE. Si aucune condition n’est remplie, aucun code ne sera exécuté, sauf si la clause Else est ajoutée.

Critères de Sélection des cas

Les conditions Select Case peuvent être utilisés pour évaluer à la fois des valeurs numériques et du texte. Nous allons d’abord voir comment utiliser les cas de sélection pour évaluer des expressions numériques.

Correspondance Exacte – Nombres

Vous pouvez facilement tester une correspondance exacte à l’aide d’une instruction Case :

Case 10

ou ajouter des virgules pour tester les correspondances exactes avec plusieurs nombres :

Case 20, 30, 40
Sub CorrespondanceExacte_Nombres()
    Dim n As Integer
    n = CInt(InputBox("..."))
    
    Select Case n
        Case 10
            ' Si "n" est égal à 10, alors...
        Case 20, 30, 40
            ' Si "n" est égal à 20/30/40, alors...
        Case Else
            ' Si "n" n'est pas égal à 10/20/30/40, alors...
    End Select
    
End Sub

Plages

Vous pouvez tester si un nombre est compris dans une plage comme suit :

Case 55 To 74

Cette procédure génère une note sous forme de lettre pour un étudiant en fonction de sa note numérique :

Sub Calc_Note()
    Dim NoteNum As Integer
    Dim NoteLettre As String

    NoteNum = InputBox("Entrer la note numérique de l'étudiant")
    
    Select Case NoteNum
        Case 90 To 100
            NoteLettre = "A"
        Case 80 To 90
            NoteLettre = "B"
        Case 70 To 80
            NoteLettre = "C  "
        Case 60 To 70
            NoteLettre = "D"
        Case Else
            NoteLettre = "F"
    End Select
    
    MsgBox "La note de l'étudiant est : " & NoteLettre
    
End Sub

Vous pouvez également tester des plages avec la fonction Case Is

Instruction Select Case Is

Case Is < 55
  'Ne rien faire
Case <= 74
 MsgBox "Dans l'intervalle"

N’oubliez pas que l’instruction Case n’exécutera du code QUE pour la première correspondance. Cette procédure calculera la note d’un étudiant en utilisant le Case Is au lieu du Case To.

Sub Select_Case_Is_Note()
    Dim NoteNum As Integer
    Dim NoteLettre As String
    
    NoteNum = InputBox("Entrer la note nuérique de l'étudiant")
    
    Select Case NoteNum
        Case Is >= 90
            NoteLettre = "A"
        Case Is >= 80
            NoteLettre = "B"
        Case Is >= 70
            NoteLettre = "C"
        Case Is >= 60
            NoteLettre = "D"
        Case Else
            NoteLettre = "F"
    End Select
    
    MsgBox "La note de l'étudiant est : " & NoteLettre
    
End Sub

Case Else

Vous pouvez ajouter « Case Else » à la fin de votre déclaration de cas pour faire quelque chose si aucune condition n’est remplie :

Case Else

Consultez la fin de l’exemple de code précédent pour voir comment Case Else peut être utilisé.

Select Case – Texte et opérateur Like

Jusqu’à présent, nos exemples de Select Case n’ont fonctionné qu’avec des nombres. Vous pouvez également utiliser les instructions Select Case avec du texte.

Correspondance Exacte – Texte

Vous pouvez tester si l’expression correspond à une phrase exacte comme ceci :

Case "Betteraves"

Vous pouvez également utiliser des virgules pour tester si l’expression correspond exactement à plus d’une phrase :

Case "Pomme", "Banane", "Orange"

L’ensemble ressemble à ceci :

Sub CorrespondanceExacte_Aliments()

Select Case Range("a1").Value
    Case "Betterave"
        MsgBox "Légume"
    Case "Pommes", "Bananes", "Oranges"
        MsgBox "Fruit"
End Select

End Sub

Majuscules et Minuscules

Par défaut, VBA est sensible à la casse. Cela signifie que VBA considère que « Texte » est différent de « texte ». Pour désactiver la sensibilité à la casse, ajoutez l’option « Compare Text » en haut de votre module :

Option Compare Text

Cet exemple rendra la comparaison des conditions insensible à la casse lorsque vous travaillez avec du texte :

Option Compare Text

Sub CorrespondanceExacte_Aliments()

Select Case Range("a1").Value
    Case "Betterave"
        MsgBox "Légume"
    Case "Pommes", "Bananes", "Oranges"
        MsgBox "Fruit"
End Select

End Sub

Select Case – Opérateur Like

L’opérateur Like vous permet d’effectuer des comparaisons inexactes. Si le texte correspond, Like renvoie VRAI, s’il ne correspond pas, il renvoie FAUX. Cela rend l’opérateur Like facile à utiliser avec les instructions If, mais il ne fonctionnera pas aussi facilement avec les instructions Select Case.

Case Like – Un Test Raté

Le code suivant démontre que l’opérateur Like ne fonctionne pas toujours avec l’instruction Select Case :

Sub Select_Case_Like_NonFonctionnel()
    Dim mot As String
    mot = "COCOA"
    
    Select Case mot
        Case mot Like "*C*C*"
            MsgBox "Correspondance Trouvée!"
        Case Else
            MsgBox "Pas de Correspondance"
    End Select
End Sub

Case Like – La Bonne Méthode

Cependant, nous pouvons ajouter l’expression TRUE pour que l’instruction Select fonctionne avec l’opérateur Like :

Sub Select_Case_Like_Fonctionnel()
    Dim mot As String
    mot = "COCOA"
    
    Select Case True
        Case mot Like "*C*C*"
            MsgBox "Correspondance Trouvée!"
        Case Else
            MsgBox "Pas de Correspondance"
    End Select
End Sub

Case – Symbole « Deux Points »

Lorsque vous utilisez une instruction Case, vous pouvez ajouter autant de lignes de code que vous le souhaitez pour chaque condition. Cependant, si vous n’avez besoin d’exécuter qu’une seule ligne de code. Vous pouvez utiliser un deux-points ( : ) pour tout écrire sur la même ligne.

Voici le même exemple de note d’étudiant que précédemment présenté, sauf qu’un deux-points est utilisé pour raccourcir le code :

Sub Calc_Note_Deux_Points()
Dim NoteNum As Integer
Dim NoteLettre As String

    NoteNum = InputBox("Entrer le note numérique de l'étudiant")
    
    Select Case NoteNum
        Case 90 To 100: NoteLettre = "A"
        Case 80 To 90: NoteLettre = "B"
        Case 70 To 80: NoteLettre = "C"
        Case 60 To 70: NoteLettre = "D"
        Case Else: NoteLettre = "F"
    End Select
    
    MsgBox "La note de l'étudiant est : " & NoteLettre
    
End Sub

Select Case – Et / Ou – Conditions multiples

Vous pouvez utiliser les opérateurs And / Or pour tester des critères supplémentaires en même temps. Dans cet exemple, nous utilisons un Select-Case sur la variable « âge », mais nous voulons également tester le sexe. Nous utilisons donc l’opérateur And pour effectuer la comparaison le plus complexe :

Sub SelectCase_ConditionsMultiples()
    Dim sexe As String
    Dim age As Integer
    
    sexe = "masculin" ' ou féminin
    age = 15
    
    Select Case age
        Case Is < 20 And sexe = "masculin"
            MsgBox "Homme de moins de 20"
        Case Is < 20 And sexe = "féminin"
            MsgBox "Femme de moins de 20 ans"
        Case Is >= 20 And sexe = "masculin"
            MsgBox "Homme de plus de 20 ans"
        Case Is >= 20 And sexe = "féminin"
            MsgBox "Femme de plus de 20 ans"
    End Select
End Sub

Instructions Select Case Imbriquées

Tout comme les instructions If, vous pouvez imbriquer les instructions Select Case les unes dans les autres :

Sub SelectCase_Imbriqué()
    Dim sexe As String
    Dim age As Integer
    
    sexe = "masculin" ' ou féminin
    age = 15
    
    Select Case age
        Case Is < 20
            Select Case sexe
                Case "masculin"
                    MsgBox "Homme de moins de 20"
                Case "féminin"
                    MsgBox "Femme de moins de 20 ans"
            End Select
        Case Is >= 20
        Select Case sexe
            Case "masculin"
                MsgBox "Homme de plus de 20 ans"
            Case "féminin"
                MsgBox "Femme de plus de 20 ans"
        End Select
    End Select
End Sub

Déclaration de cas ou déclaration If

Plus il y a de conditions à tester, plus l’instruction Select Case est utile par rapport à l’instruction If. Prenons un exemple. Voici le code nécessaire pour tester si le nom d’une feuille de calcul est égal à un ensemble de valeurs à l’aide d’une instruction If :

If Nom = "Budget" Or Nom = "Prévisions" Or Nom = "Trailing12" Or _
   Nom = "Flex" Or Nom = "AutresRatios" Or Nom = "Comparaison" Or _
   Nom = "Révision" Or Nom = "P&L_Révision" Or Nom = "Autres" Then
   'Faire quelque chose
End If

Voici le même code en utilisant plutôt une instruction Select Case :

Select Case Nom
Case "Budget", "Prévisions", "Trailing12", "Flex", "AutresRatios", _
     "Comparaison", "Révision", "P&L_Révision", "Autres"
    'Faire quelque chose
End Select

Vous pouvez constater qu’il est beaucoup plus facile d’utiliser une instruction Select dans ce scénario. Il y a beaucoup moins de frappe et c’est beaucoup plus facile à lire.

Exemples Pratiques de Select Case en VBA

Ex 1. Déclaration de cas Fonction définie par l’utilisateur (UDF)

Reprenons notre exemple de calcul de note ci-dessus et créons une fonction définie par l’utilisateur (UDF) pour calculer et retourner la note d’un élève :

Function ObtenirNote(Pourcentage As Integer) As String
    
    Select Case Pourcentage
        Case 90 To 100
            ObtenirNote = "A"
        Case 80 To 90
            ObtenirNote = "B"
        Case 70 To 80
            ObtenirNote = "C"
        Case 60 To 70
            ObtenirNote = "D"
        Case Else
            ObtenirNote = "F"
    End Select
    
End Function

Nous pouvons maintenant utiliser la fonction ObtenirNote dans notre feuille de calcul Excel pour calculer rapidement les notes des élèves :

Ex 2. Vérification des Noms de Feuilles / Boucle Select Case

Ce code va parcourir en boucle toutes les feuilles de calcul d’un classeur, en déprotégeant les feuilles qui répondent à certains critères :

Sub EnleverProtectionFeuilles()
    Dim fc As Worksheet
    
    For Each fc In Worksheets
        Select Case fc.Name 'Liste de toutes les feuilles avec les ratios
        Case "Budget", "Prévisions", "Trailing12", "Flex", "AutresRatios", _
             "Comparaison", "Révision", "P&L_Révision", "Autres"
            fc.Unprotect
        End Select
    Next fc
    
End Sub

Ex 3 : Select Case – Valeur de Cellule

Cet exemple teste la note d’un étudiant dans une cellule, en affichant la note en lettres directement dans la cellule de droite.

Sub VérificationValeurCellule()
    Dim cell As Range
    Set cell = Range("C1")

    Select Case cell.Value
    Case 90 To 100
        cell.Offset(0, 1) = "A"
    Case 80 To 90
        cellule.Offset(0, 1) = "B"
    Case 70 To 80
        cellule.Offset(0, 1) = "C"
    Case 60 To 80
        cellule.Offset(0, 1) = "D"
    End Select

End Sub

Ex 4. Select Case – Dates

Cet exemple est une fonction qui teste dans quel trimestre se trouve une date.

Sub TestDate()
    MsgBox ObtenirTrimestre(CDate("7/20/2019"))
End Sub

Function ObtenirTrimestre(dt As Date) As Integer
    Dim fc As Worksheet
    Dim Année As Integer
    
    Année = Year(dt)
    
    Select Case dt
        Case CDate("01/01/" & Année) To CDate("03/31/" & Année)
            ObtenirTrimestre = 1
        Case CDate("04/01/" & Année) To CDate("06/30/" & Année)
            ObtenirTrimestre = 2
        Case CDate("07/01/" & Année) To CDate("09/30/" & Année)
            ObtenirTrimestre = 3
        Case CDate("10/01/" & Année) To CDate("12/31/" & Année)
            ObtenirTrimestre = 4
    End Select
End Function

Comme il s’agit d’une fonction, vous pouvez l’utiliser comme une fonction dans Excel :

Ex. 5 Vérifier si un Nombre est Pair ou Impair

Cet exemple teste si un nombre est pair ou impair.

Sub VérifierPairImpair()
    Dim n As Integer
    n = InputBox("Entrez un nombre")
    
    Select Case n Mod 2
        Case 0
            MsgBox "Le nombre est pair"
        Case 1
            MsgBox "Le nombre est impair"
    End Select
    
End Sub

Ex. 6 Tester si une Date est un Jour de Semaine ou un Week-End

Ces exemples testent si une date tombe un jour de semaine ou un week-end.

Sub EstJourDeSemaine()
    Dim dt As Date
    dt = CDate("1/1/2020")
    
    Select Case Weekday(dt)
        Case vbMonday
            MsgBox "C'est lundi"
        Case vbTuesday
            MsgBox "C'est mardi"
        Case vbWednesday
            MsgBox "C'est mercredi"
        Case vbThursday
            MsgBox "C'est jeudi"
        Case vbFriday
            MsgBox "C'est vendredi"
        Case vbSaturday
            MsgBox "C'est samedi"
        Case vbSunday
            MsgBox "C'est dimanche"
    End Select
End Sub
Sub EstJourDeWeekEnd()
    Dim dt As Date
    dt = CDate("1/1/2020")
    
    Select Case Weekday(dt)
        Case vbSaturday, vbSunday
            MsgBox "C'est un week-end"
        Case Else
            MsgBox "Il ne s'agit pas d'un week-end"
    End Select

End Sub

VBA Select Case dans Access

Tous les exemples ci-dessus fonctionnent exactement de la même manière en Access VBA qu’en Excel VBA.

Sub VérificationValeurChamps()
    Dim dbs As Database
    Dim rst As Recordset
    Set dbs = CurrentDB
    Set rst = dbs.OpenRecordset("tblClients", dbOpenDynaset)
    With rst
       .MoveFirst
       .Edit
       Select Case rst.Fields("Ville")
       Case "Austin"
           .rst.Fields("TelCode") = "512"
       Case "Chicago"
           .rst.Fields("TelCode") = "312"
       Case "New YorK"
           .rst.Fields("TelCode") = "1212"
       Case "San Fransisco"
           .rst.Fields("TelCode") = "415"
    End Select
    .Update
   End With
End Sub
vba-free-addin

Module Complémentaire d'Exemples de Code VBA

Accédez facilement à tous les exemples disponibles sur le site.

Naviguez simplement dans le menu, cliquez, et le code sera inséré directement dans votre module. Module complémentaire .xlam.

(Aucune installation requise!)

Téléchargement gratuit

Retour aux exemples de code VBA