Déclaration de cas de sélection VBA

En VBA, le Sélectionner la déclaration de cas est une alternative à la Instruction Si-Alors, vous permettant de tester si les 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.

Sélectionnez un exemple de cas

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

1234567891011121314 Sub Select_Case_Yes_No_Cancel()Dim nResult As VbMsgBoxResultnRésultat = MsgBox("… ", vbOuiNonAnnuler)Sélectionner le cas nRésultatCas vbOuiMsgBox "Oui"Cas vbNonMsgBox "Non"Cas vbAnnulerMsgBox "Annuler"Fin de la sélectionFin du sous-marin

Ci-dessous, nous avons écrit l'équivalent en utilisant une instruction If à la place. Vous remarquerez que l'instruction Case Select implique un peu moins de saisie - cet avantage est amplifié lors du test de plusieurs critères.

12345678910111213 Sub If_Yes_No_Cancel()Dim nResult As VbMsgBoxResultnRésultat = MsgBox("… ", vbOuiNonAnnuler)Si nRésultat = vbOui AlorsMsgBox "Oui"ElseIf nResult = vbNo ThenMsgBox "Non"ElseIf nResult = vbCancel ThenMsgBox "Annuler"Fin siFin du sous-marin

Syntaxe de l'instruction de cas

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

12345678910 Sélectionnez le cas [Expression de test]Cas [Condition 1][Action si la condition 1 est vraie]Cas [Condition 2][Action si la condition 2 est vraie]Cas [Condition n][Action si la condition n est vraie]Cas autre[Action si aucune n'est vraie]Fin de la sélection

Où:

[Expression de test] - C'est la valeur à évaluer. Il s'agit généralement d'une variable.

[Action si la condition n est vraie] - Est-ce juste le code à exécuter si la condition est remplie (comme avec une instruction If)

[État n] - C'est la condition à tester. Il existe de nombreuses façons de tester les conditions. Nous les aborderons ci-dessous.

L'instruction Case exécutera le code de la PREMIÈRE condition qui s'avère être VRAIE. Si aucune condition n'est remplie, aucun code ne sera exécuté, à moins que la clause Else ne soit ajoutée.

Sélectionnez les critères de cas

Select Cases peut être utilisé pour évaluer à la fois des valeurs numériques et du texte. Nous verrons d'abord comment utiliser Select Cases pour évaluer des expressions numériques.

Correspondance exacte - Nombres

Vous pouvez facilement tester une correspondance exacte avec une instruction de cas :

1 Cas 10

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

1 Cas 20, 30, 40
1234567891011121314 Sous-numéros de correspondance exacte ()Dim n en tant qu'entiern = CInt(InputBox("… "))Sélectionnez le cas nCas 10' Si n est 10 AlorsCas 20, 30, 40' Si n vaut 20/30/40 AlorsCas autre' Si n n'est pas 10/20/30/40 AlorsFin de la sélectionFin du sous-marin

Gammes

Vous pouvez tester si un nombre se situe dans une plage comme ceci :

1 Cas 55 à 74

Cette procédure générera une note en lettres pour un étudiant en fonction de sa note numérique :

12345678910111213141516171819202122 Sous Calc_Grade()Score faible en tant qu'entierDim LetterGrade en tant que chaîneScore = InputBox("Entrer le score de l'étudiant")Sélectionnez le score de casCas 90 à 100LetterGrade = "A"Cas 80 à 90LetterGrade = "B"Cas 70 à 80LetterGrade = "C"Cas 60 à 70LetterGrade = "D"Cas autreLetterGrade = "F"Fin de la sélectionMsgBox "La note de l'étudiant est : " & LetterGradeFin du sous-marin

Vous pouvez également tester des gammes avec le Case Is

Sélectionnez la casse

1234 Le cas est < 55'Ne fais rienCas <= 74MsgBox "À portée"

N'oubliez pas que l'instruction Case n'exécutera le code que pour la première correspondance UNIQUEMENT.

Cette procédure calculera la note d'un étudiant en utilisant Case Is au lieu de Case To.

12345678910111213141516171819202122 Sous Select_Case_Is_Grade()Score faible en tant qu'entierDim LetterGrade en tant que chaîneScore = InputBox("Entrer le score de l'étudiant")Sélectionnez le score de casCas Est >= 90LetterGrade = "A"Cas Est >= 80LetterGrade = "B"Cas Est >= 70LetterGrade = "C"Cas Est >= 60LetterGrade = "D"Cas autreLetterGrade = "F"Fin de la sélectionMsgBox "La note de l'étudiant est : " & LetterGradeFin du sous-marin

Cas autre

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

1 Cas autre

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

Select Case - Text & the Like Operator

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

Correspondance exacte - Texte

Vous pouvez tester si l'expression correspond à une phrase exacte comme celle-ci :

1 Coffret " Betteraves "

Ou utilisez des virgules pour tester si l'expression correspond exactement à plusieurs phrases :

1 Etui "Pomme", "Banane", "Orange"

L'assemblage ressemble à :

12345678910 SubExactMatch_Food()Sélectionnez la plage de cas ("a1").ValeurCoffret " Betteraves "MsgBox "Légume"Etui "Pomme", "Banane", "Orange"MsgBox "Fruits"Fin de la sélectionFin du sous-marin

Majuscule et minuscule

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

1 Option Comparer le texte

Cet exemple rendra le Case Select insensible à la casse lorsque vous travaillez avec du texte :

123456789101112 Option Comparer le texteSubExactMatch_Food()Sélectionnez la plage de cas ("a1").ValeurCoffret " Betteraves "MsgBox "Légume"Etui "Pomme", "Banane", "Orange"MsgBox "Fruits"Fin de la sélectionFin du sous-marin

Cas comme

L'opérateur Like vous permet de faire des comparaisons inexactes. Si le texte correspond, Like renvoie TRUE, s'il ne correspond pas, il renvoie FALSE. Cela rend l'opérateur Like facile à utiliser avec les instructions If, mais il ne fonctionnera pas aussi facilement avec les instructions Case.

Cas similaire - Un test raté

Le code suivant montre que l'opérateur Like ne fonctionne pas avec Select Case :

1234567891011 Sous Select_Case_Like_DoesnotWork ()Mot faible en tant que chaînemot = " CACAO "Sélectionnez le mot de casCase word2 Comme "*C*C*"MsgBox "Bien"Cas autreMsgBox "Pas bien"Fin de la sélectionFin du sous-marin

Case Like - La bonne façon

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

1234567891011 Sous Select_Case_Like_CorrectWay()Mot faible en tant que chaînemot = " CACAO "Sélectionnez la casse VraiMot de la casse comme "*C*C*"MsgBox "Bien"Cas autreMsgBox "Pas bien"Fin de la sélectionFin du sous-marin

Cas - Colon

Lorsque vous utilisez une instruction Case, vous pouvez ajouter autant de lignes de code que vous souhaitez exécuter avec 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 qu'auparavant, à l'exception de l'utilisation de deux points pour raccourcir le code :

1234567891011121314151617 Sous-Calc_Grade_colon()Score faible en tant qu'entierDim LetterGrade en tant que chaîneScore = InputBox("Entrer le score de l'étudiant")Sélectionnez le score de casCas 90 à 100 : LetterGrade = "A"Cas 80 à 90 : LetterGrade = "B"Cas 70 à 80 : LetterGrade = "C"Cas 60 à 70 : LetterGrade = "D"Case Else : LetterGrade = "F"Fin de la sélectionMsgBox "La note de l'étudiant est : " & LetterGradeFin du sous-marin

Case Select - Et / Ou - Conditions multiples

Vous pouvez utiliser les opérateurs And/Or pour tester des critères supplémentaires avec Select Case.

Dans cet exemple, nous utilisons un cas de sélection sur la variable « âge », mais nous voulons également tester le sexe. Nous utilisons donc l'opérateur And pour effectuer le test le plus complexe :

123456789101112131415161718 Sous NestedSelectCase()Dim sexe comme chaîneDim age As Integersexe = "mâle" ' ou femelleâge = 15Sélectionnez l'âge du boîtierCas Est < 20 Et sexe = "mâle"Msgbox "Homme de moins de 20 ans"Cas Est < 20 Et sexe = "femelle"Msgbox "Femme de moins de 20 ans"Case Is >= 20 Et sexe = "mâle"Msgbox "Homme de plus de 20 ans"Case Is >= 20 Et sexe = "femelle"Msgbox "Femme de plus de 20 ans"Fin de la sélectionFin du sous-marin

Déclarations de cas imbriquées

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

123456789101112131415161718192021222324 Sous NestedSelectCase()Dim sexe comme chaîneDim age As Integersexe = "mâle" ' ou femelleâge = 15Sélectionnez l'âge du boîtierLa casse est < 20Sélectionnez le sexe du casCas "homme"MsgBox "Homme de moins de 20 ans"Cas "femelle"MsgBox "Femme de moins de 20 ans"Fin de la sélectionCase Is >= 20 Et sexe = "femelle"Sélectionnez le sexe du casCas "homme"MsgBox "Homme de plus de 20 ans"Cas "femelle"MsgBox "Femme de plus de 20 ans"Fin de la sélectionFin de la sélectionFin du sous-marin

Énoncé de cas vs. énoncé Si

Plus il y a de conditions à tester, plus l'instruction Case est utile par rapport à une instruction If. Regardons un exemple.

Voici le code requis pour tester si le nom d'une feuille de calcul correspond à un ensemble de valeurs à l'aide d'une instruction If :

12345 Si Nom = "Budget" Ou Nom = "Prévision" Ou Nom = "Trailing12" Ou _Nom = "Flex" Ou Nom = "AutresRatios" Ou Nom = "Comparaison" Ou _Nom = "BudReview" Ou Nom = "P&L_Review" Ou Nom = "Autre" Alors'Faire quelque choseFin si

Voici le même code utilisant une instruction Select à la place :

12345 Sélectionnez le nom du casCas "Budget", "Prévision", "Trailing12", "Flex", "OtherRatios", _"Comparaison", "BudReview", "P&L_Review", "Autre"'Faire quelque choseFin de la sélection

Vous pouvez voir qu'il est beaucoup plus facile d'utiliser une instruction Select dans ce scénario. C'est beaucoup moins à taper et c'est beaucoup plus facile à lire.

Exemples de cas sélectionnés VBA

Ex 1. Case Statement Fonction définie par l'utilisateur (UDF)

Reproduisons notre exemple de calcul de note ci-dessus et créons une FDU pour calculer le score d'un élève :

12345678910111213141516 Fonction GetGrade (Score en tant qu'entier) en tant que chaîneSélectionnez le score de casCas 90 à 100ObtenirGrade = "A"Cas 80 à 90ObtenirGrade = "B"Cas 70 à 80ObtenirGrade = "C"Cas 60 à 70ObtenirGrade = "D"Cas autreObtenirGrade = "F"Fin de la sélectionFonction de fin

Nous pouvons maintenant utiliser la fonction GetGrade dans notre feuille de calcul Excel pour calculer rapidement les notes des étudiants :

Ex 2. Nom de la feuille de test / Déclaration de cas de boucle

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

123456789101112 Sous Case_UnProtectSheet()Dim ws As Feuille de calculPour chaque ws dans les feuilles de calculSelect Case ws.Name 'Liste de toutes les feuilles avec des ratiosCas "Budget", "Prévision", "Trailing12", "Flex", "OtherRatios", _"Comparaison", "BudReview", "P&L_Review", "Autre"ws.DéprotégerFin de la sélectionWS suivantFin du sous-marin

Ex 3. Sélectionnez la casse - Valeur de la cellule

Cet exemple testera le score d'un étudiant dans une cellule, en affichant la note de la lettre directement dans la cellule de droite.

12345678910111213141516 Sous TestCellValue()Cellule tamisée en tant que plageDéfinir la cellule = Plage("C1")Sélectionnez Case cell.ValueCas 90 à 100cell.Offset(0, 1) = "A"Cas 80 à 90cell.Offset(0, 1) = "B"Cas 70 à 80cell.Offset(0, 1) = "C"Cas 60 à 80cell.Offset(0, 1) = "D"Fin de la sélectionFin du sous-marin

Ex 4. Sélectionnez le cas - Dates

Cet exemple Case Select est une fonction qui teste dans quel trimestre une date tombe.

123456789101112131415161718 Date de sous-test ()MsgBox GetQuarter(CDate("7/20/2019"))Fin du sous-marinFonction GetQuarter(dt As Date) As IntegerDim sht comme feuille de travailSélectionnez le cas dtCas CDate("01/01/2019") à CDate("31/03/2019")GetQuarter = 1Cas CDate("04/01/2019") À CDate("06/30/2019")ObtenirQuartier = 2Cas CDate("07/01/2019") à CDate("09/30/2019")ObtenirQuartier = 3Cas CDate("10/01/2019") à CDate("12/31/2019")ObtenirQuartier = 4Fin de la sélectionFonction de fin

Parce que c'est une fonction, vous pouvez l'utiliser comme une fonction dans Excel :

Ex. 5 Vérifiez si le nombre est pair ou impair

Cet exemple teste si un nombre est pair ou impair.

123456789101112 Sous-CheckOddEven()Dim n en tant qu'entiern = InputBox("Entrez un nombre")Sélectionnez Case n Mod 2Cas 0MsgBox "Le nombre est pair."Cas 1MsgBox "Le nombre est impair."Fin de la sélectionFin du sous-marin

Ex. 6 Testez si la date est en semaine ou en week-end

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

123456789101112131415161718192021 Sous CheckWeekDay()Dim dt comme datedt = CDate("1/1/2020")Sélectionnez le jour de la semaine (dt)Cas vblundiMsgBox "C'est lundi"Affaire vbmardiMsgBox "C'est mardi"Affaire vbmercrediMsgBox "C'est mercredi"Cas vbJeudiMsgBox "C'est jeudi"Affaire vbvendrediMsgBox "C'est vendredi"Cas vbSamediMsgBox "C'est samedi"Affaire vbDimancheMsgBox "C'est dimanche"Fin de la sélectionFin du sous-marin
123456789101112 Sous-VérificationWeekend()Dim dt comme datedt = CDate("1/1/2020")Sélectionnez le jour de la semaine (dt)Cas vbSamedi, vbDimancheMsgBox "C'est un week-end"Cas autreMsgBox "Ce n'est pas un week-end"Fin de la sélectionFin du sous-marin

VBA Sélectionnez le cas dans Access

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

123456789101112131415161718192021 Sous TestCellValue()Dim dbs comme base de donnéesDim d'abord comme RecordSetDéfinir la base de données = CurrentDBDéfinir d'abord = dbs.OpenRecordset("tblClients", dbOpenDynaset)Avec d'abord.MoveFirst.ÉditerSélectionnez le premier cas.Champs("Ville")Affaire "Austin".rst.Fields("TelCode") = "512"Affaire "Chicago".rst.Fields("TelCode") = "312"Affaire "New York".rst.Fields("TelCode") = "1212"Affaire "San Fransisco".rst.Fields("TelCode") = "415"Fin de la sélection.Mettre à jourTerminer parFin Sus
wave wave wave wave wave