Select Case : Réaliser plusieurs Test conditionnels en VBA [#14 FORMATION EXCEL VBA COMPLETE]

Guide « 108 astuces pour grands débutants sur Excel ! » Offert
Booster votre productivité en téléchargeant gratuitement votre ebook PDF des meilleures astuces pour les débutants et les pros d'Excel
Excel formation - 00 Astuces - 100
 

Au cours des trois derniers chapitres de la formation sur l’apprentissage de VBA, nous avons découvert le fonctionnement de la structure conditionnelle If… Then… Else… Endif qui permet d’orienter le fonctionnement d’une macro VBA en fonction du résultat retourné par un test. Nous avions alors vu qu’il était possible d’utiliser un grand nombre de tests successifs, mais lorsque ce nombre commence à devenir significatif, alors cette structure n’est plus toujours très adaptée. Nous préfèrerons alors utiliser une autre structure conditionnelle : la structure Select Case.

 

Téléchargement

Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
 

 

Tutoriel Vidéo

 

 

Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !

 

1. Présentation

Pour définir le comportement qu’une macro doit adopter, nous pouvons utiliser comme nous venons de le voir dans l’introduction de ce chapitre une structure conditionnelle If… Then… :

 

Sub testSelectCase()
     
        Dim a As Integer
        a = 1
        
        If a = 1 Then Debug.Print "Résultat OK"
        
End Sub

 

Ensuite, il est possible de démultiplier les tests afin de retourner un résultat adapté en utilisant les éléments ElseIf et Else :

 

Sub testSelectCase()
     
        Dim a As Integer
        a = -2000
        
        If a <= -3000 Then
            Debug.Print "Préhistoire"
        ElseIf a <= -476 Then
            Debug.Print "Antiquité"
        ElseIf a <= 1492 Then
            Debug.Print "Moyen Âge"
        ElseIf a <= 1789 Then
            Debug.Print "Temps Modernes"
        Else
            Debug.Print "Époque Contemporaine"
        End If
End Sub

 

 

Excel formation - VBA14 - Select case - 01

Ici, nous pourrions également utiliser une nouvelle structure conditionnelle, il s’agit de Select Case. Celle-ci s’utilise de la manière suivante :

 

Select Case valeur 
            Case "valeur 1"
                ' action 1
            Case "valeur 2"
                ' action 2
            …
            Case Else
                ' action par défaut si aucun test  précédent n’est valide
End Select    

 

2. Select Case sur des valeurs numériques

Cette structure conditionnelle permet en premier lieu de vérifier des égalités avec la valeur d’une variable étudiée :

 

Sub testSelectCase()
     
        Dim a As Integer
        a = 1789
        
        Select Case a
            Case -3000
                Debug.Print "Fin de la Préhistoire"
            Case -476
                Debug.Print "Fin de l'Antiquité"
            Case 1492
                Debug.Print "Fin du Moyen Âge"
            Case 1789
                Debug.Print "Fin des Temps Modernes"
           End Select
    End Sub

 

 

Excel formation - VBA14 - Select case - 02

Ici, nous vérifions que la valeur de la variable a est strictement égale à l’une des années qui marque la fin de l’une des grandes Époques de l’histoire.

En revanche, si nous saisissons une année qui ne correspond pas exactement à une année de fin, alors rien ne va se passer (la macro va effectuer chacun des tests définis, sans rencontrer le moindre succès, jusqu’à finir par sortir du Select).

Pour renvoyer quand même un résultat lorsqu’aucune condition n’est remplie, il est possible d’utiliser l’instruction Case Else qui permet de définir une action par défaut :

Excel formation - VBA14 - Select case - 03

Parfois il peut également être utile d’utiliser des opérateurs de comparaisons, comme nous les avons déjà découverts dans le chapitre de la formation dédié à l’utilisation des formules conditionnelles If.

Dans ce cas il convient d’utiliser Case Is et non pas simplement Case, mais pas de panique, en cas d’oubli nous pouvons compter sur la grande bonté de VBE qui se chargera de l’ajouter à notre place :

 

Sub testSelectCase()
     
        Dim a As Integer
        a = 2019
        
        Select Case a
            Case Is < -3000
                Debug.Print "Préhistoire"
            Case Is < -476
                Debug.Print "Antiquité"
            Case Is < 1492
                Debug.Print "Moyen Âge"
            Case Is < 1789
                Debug.Print "Temps Modernes"
            Case Else
                Debug.Print "Époque Contemporaine"
        End Select
    End Sub

 

Excel formation - VBA14 - Select case - 04

Nous pourrions également utiliser des intervalles pour borner les résultats testés en utilisant le terme To :

 

Sub testSelectCase()
     
        Dim a As Integer
        a = 1492
        
        Select Case a
            Case Is < -3000
                Debug.Print "Préhistoire"
            Case -2999 To -476
                Debug.Print "Antiquité"
            Case -475 To 1492
                Debug.Print "Moyen Âge"
            Case 1492 To 1789
                Debug.Print "Temps Modernes"
            Case Else
                Debug.Print "Époque Contemporaine"
        End Select
    End Sub

 

Excel formation - VBA14 - Select case - 05

Comme vous pouvez le voir, les intervalles utilisés ici comprennent les extrémités : nous avons en effet deux intervalles qui utilisent l’année 1492, mais le code s’arrête sur le premier d’entre deux.

 

3. Select Case sur des chaînes de caractères

Tout comme l’instruction If dont elle récupère grand nombre de propriétés, l’instruction Select permet également d’analyser des chaînes de caractères.

 

Sub testSelectCaseTextes()
     
        Dim a As String
        a = "banane"
        
        Select Case a
            Case "banane", "fraise",  "pomme"
                Debug.Print a & " est un fruit"
            Case "carotte", "avocat",  "épinard"
                Debug.Print a & " est un légume"
            Case Else
                Debug.Print a & "n'est pas  référencé"
        End Select
    End Sub

 

 

Excel formation - VBA14 - Select case - 06

Comme vous pouvez le constater sur cet exemple, nous pouvons appliquer une même action sur plusieurs valeurs de test, en les séparant d’une simple virgule.

Les comparaisons et intervalles sont également disponibles pour les chaînes de caractères, les règles de tests sont alors les mêmes que celles que nous avons déjà découvertes dans les chapitre précédents dédiés à la découverte des tests conditionnels IF, notamment pour ce qui est de l’utilisation de l’ « Option Compare Text » pour des analyses alphabétiques.

Par exemple, par défaut le terme « Banane » ne sera pas reconnu comme un équivalent de « banane » en raison de la majuscule présente au début du mot :

Excel formation - VBA14 - Select case - 07

En revanche, ajouter « Option Compare Text » au tout début du module permet de modifier ce comportement :

Excel formation - VBA14 - Select case - 08

L’analyse se fait maintenant de manière purement alphabétique, sans tenir compte de la casse, ni des accents.

 

4. Imbriquer des Select dans des… Select

Bien entendu, il est possible d’utiliser des schémas bien plus complexes pour construire nos macros.

Il peut notamment être très pratique d’imbriquer des Select dans d’autres Select :

Excel formation - VBA14 - Select case - 09

 

 



Articles qui pourraient vous intéresser

Découvrez le secret des plages relatives dynamique dans Excel
Découvrez le TOP3 des erreurs les plus communes sur Excel (et comment les corriger)
Comment faire apparaître des informations dynamiques sur un graphique Excel ?
Comment créer un graphique lettres sur Excel ?
INDEX-EQUIV : Astuces de pro sur Excel !
Découvrez l'Effaceur d’Excel !
Comment détecter, supprimer ou bloquer les doublons sur Excel ?
La fonctionnalité méconnue pour des prévisions en un clin d’œil sur Excel
Comment changer la couleur d'un graphique en fonction de la valeur dans Excel ?
Comment imprimer les titres de colonnes sur toutes les pages dans Excel ?
TOP3 des (vraies) méthodes pour retirer les chiffres derrière la virgule sur Excel
Comment savoir si une cellule est utilisée dans une autre formule sur Excel ?

Contact - Plan du site - À propos - Contact

© Excelformation.fr 2018-2024 - Excel, simplement

Haut de la page

Excelformation.fr propose de nombreuses formations pratiques et gratuites sur Microsoft Excel : des cours pour apprendre à structurer et analyser les données, des tutos sur les fonctions avancées, les formules et les formules avancées d'Excel, les formules matricielles, les mise-en-formes conditionnelles, les graphiques Excel (xls, xlsx, xlsm,…). Des tutoriels pour apprendre à automatiser les tâches répétitives (via des macro-commandes en VBA) de vos classeurs Excel.