formateur informatique

Select Case en VBA Excel pour gérer beaucoup de conditions

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Select Case en VBA Excel pour gérer beaucoup de conditions
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Gérer un grand nombre de conditions en VBA Excel
Dans le support précédent sur les instructions If, nous avons vu comment gérer les conditions en langage VBA Excel. Le principe consistait à vérifier des critères et à envisager des actions différentes selon qu'il était vérifié ou non. Nous avons même vu qu'il était possible d'augmenter le nombre de critères grâce à la branche ElseIf pour poser de véritables raisonnements de programmation.
Multi-critères If et ElseIf en VBA Excel

Cependant, lorsque le nombre de conditions à vérifier devient important, la syntaxe de l'instruction If s'avère lourde et peu adaptée. On lui préfèrera l'instruction Select Case qui permet d'énumérer les critères et les actions liées, les uns à la suite des autres. En outre, cette instruction est censée mieux gérer les ressources pour un code optimisé. Nous allons présenter cette instruction et sa syntaxe au travers de deux petits cas pratiques appartenant au même classeur Excel. tableau pour application du Select Case VBA

Deux feuilles nous intéressent sur ce classeur, celles qui sont nommées. Nous utiliserons la feuille tableau pour réaliser une mise en forme du tableau selon la couleur choisie par l'utilisateur. Comme le choix est vaste, le Select Case sera tout à fait adapté pour répondre au problème. Nous commencerons par la feuille IMC qui est le cas pratique sur la formation de l'instruction If. On l'utilise notamment pour indiquer à l'utilisateur dans quel secteur de poids il se trouve après le calcul de son IMC. Même si, dans ce cas, le If ElseIf présenté par la première capture au-dessus est tout à fait adapté, nous le remplacerons par un Select Case pour présenter sa syntaxe.

Case Is
  • Activer la feuille IMC,
  • Cliquer sur le bouton calcul IMC afin de lancer le programme,
  • A l'invite, saisir une taille puis un poids,
Apllication VBA Excel pour calcul IMC avec If ElseIf

A l'issue, le curseur est placé sur la courbe et un message vous indique dans quelle tranche vous vous situez. Tout cela grâce à une instruction If ElseIf. Si l'IMC est inférieur ou égal à 25, le programme en conclut que votre équilibre est correct, sinon s'il est compris entre 25 exclus et 30 inclus, que vous êtes en surpoids et dans le cas restant que vous êtes en état d'obésité. Il s'agit donc de deux critères entraînant trois possibilités. Nous allons remplacer cette instruction If par un Select Case.
  • Enfoncer ensemble les touches ALT et F11 afin de basculer dans l'éditeur de code Visual Basic,
  • Dans l'éditeur, double cliquer dans le volet de gauche sur Feuil2 (IMC),
Vous affichez ainsi le code qui lui est lié. Vous découvrez la présence de la procédure calcul_imc() qui déroule le programme au clic sur le bouton de la feuille. Tout en bas se trouve l'instruction If qui gère les trois cas en fonction de deux critères.
  • Cliquer avec le bouton droit de la souris à un emplacement vide de la barre d'outils de l'éditeur,
  • Dans la liste, choisir Edition,
Outils de code VBA Excel dont les commentaires

Vous affichez ainsi la barre d'outils Edition qui apporte quelques fonctionnalités liées au code.
  • Sélectionner les sept lignes de code du If au End If,
  • Cliquer sur le bouton Commenter bloc de la barre Edition,
Vous placez ainsi l'instruction en commentaires, chaque ligne précédée d'une apostrophe est neutralisée. Le Select Case demande tout d'abord en paramètre la variable à tester, ex. Select Case (imc). Littéralement, il faut traduire, selon la valeur de la variable imc. Tout comme l'instruction If ou With, il doit être fermé. Le Select Case se clôture par un End Select.
  • Sous les lignes de commentaires, taper les bornes de l'instruction Select Case permettant de tester la valeur de l'IMC :
Select Case (imc)

End Select

Les critères à verifier et les actions correspondantes doivent être listés entre ces bornes. C'est le mot clé Case (Le cas où) qui permet de poser un critère. Case 25 signifierait par exemple, le cas où la valeur de l'imc est 25. Ici cependant, nous ne vérifions pas des valeurs strictes mais des plages. Le cas où la valeur est inférieure ou égale à 25, comprise entre 25 et 30 ou supérieure à 30. Dans ces conditions, on associe le mot clé Is au Case, Case Is <=25 dans le cas où la valeur de l'IMC est inférieure ou égale à 25. Le critère énoncé par ce Case Is sera suivi de l'action à entreprendre dans ce cas, soit l'affichage du message par un MsgBox(). L'énumération d'un Select Case se boucle toujours par un Case Else qui permet d'entreprendre une action dans tous les autres cas, c'est à dire quand aucun des critères énoncés n'a été vérifié. Il s'agit en quelques sortes d'une issue de secours pour ne rien oublier.
  • Remplir le Select Case avec le code suivant :
Critères sur plages de valeurs avec Select Case Is en VBA

Si vous testez le code, le résultat est exactement le même. Le Select Case n'est pas plus court mais est beaucoup plus structuré dès lors que le nombre de critères augmente. Il offre aussi une meilleure vitesse d'exécution et une plus grande simplicité de lecture pour le programmeur.

Case ''
Nous allons maintenant exploiter le Select Case dans un cas où sa puissance s'illustre plus clairement. Sur la feuille Tableau, nous souhaitons ajouter un bouton. Au clic sur ce bouton, le fond des cellules pré-sélectionnées par l'utilisateur doit passer dans la couleur qu'indiquera l'utilisateur dans une boîte de dialogue. Etant donné le large éventail de couleurs, nous allons devoir traiter un très grand nombre de cas, soit de critères.
  • Dans l'éditeur Visual Basic, double cliquer dans le volet gauche sur Feuil1 (Tableau),
  • Créer la procédure mef_plage(),
  • Afficher ensuite la feuille Tableau du classeur Excel,
Pour ajouter un bouton sur cette feuille et le lier à la macro que nous venons de créer nous avons besoin du ruban développeur. Le support pour débuter avec VBA Excel rappelle comment afficher ce ruban s'il n'est pas visible.
  • Activer le ruban Développeur,
  • Dans la section Contrôles, cliquer sur la flèche du bouton Insérer,
  • Dans la liste, choisir le bouton de formulaire, le premier en haut à gauche,
  • Tracer un rectangle sur la feuille,
  • Dans la boîte de dialogue qui se déclenche, sélectionner la macro mef_plage,
  • Puis, valider,
  • Le bouton étant sélectionné, changer son texte en : Mise en forme,
Bouton sur feuille Excel pour déclencher macro VBA

A ce stade, si vous cliquez sur le bouton, rien ne se produit puisqu'aucun code n'a été écrit entre les bornes de la procédure.
  • Revenir dans l'éditeur Visual Basic dans le code de la macro,
L'utilisateur doit indiquer la couleur de son choix dans une boîte de dialogue qui autorise la saisie, un InputBox. Cette saisie doit immédiatement être stockée dans une variable, en l'occurrence de type texte ici. Le support sur les variables en VBA Excel présente ce cas précis.
  • Déclarer la variable couleur en tant que String,
  • Affecter cette variable à la valeur saisie par l'utilisateur,
On parle de valeur de retour fournie par la fonction InputBox(). Et on parle de fonction et non de méthode car bien qu'elle exécute une action, elle n'est pas attachée à un objet de programmation. La capture ci-dessous vous donne une solution.
Saisie utilisateur stockée dans une variable String

Si vous testez la procédure, une boîte de dialogue se déclenche vous invitant à taper une couleur. Après validation, le code s'arrête bien sûr puisqu'aucun autre traitement n'est encore prévu. Ce que nous devons tester avec le Select Case cette fois est la valeur contenue dans la variable couleur (Select Case(couleur)). Il ne s'agit pas d'un nombre et encore moins d'une plage de valeurs comme précédemment mais d'une égalité stricte sur un texte. Ainsi pour tester si la couleur est le rouge, nous écrironsCase 'rouge'. Un string doit toujours être mentionné entre guillemets.
  • Reproduire le code proposé ci-dessous :
Select Case (couleur)
Case 'bleu'
Selection.Interior.Color = RGB(0, 0, 255)
Case 'vert'
Selection.Interior.Color = RGB(0, 255, 0)
Case 'rouge'
Selection.Interior.Color = RGB(255, 0, 0)
Case 'jaune'
Selection.Interior.Color = RGB(255, 255, 0)
Case 'orange'
Selection.Interior.Color = RGB(255, 128, 0)
Case 'violet'
Selection.Interior.Color = RGB(128, 0, 255)
Case 'marron'
Selection.Interior.Color = RGB(128, 64, 0)
Case 'rose'
Selection.Interior.Color = RGB(255, 0, 255)
Case Else
Selection.Interior.Color = RGB(255, 255, 255)
End Select

Select Case (couleur) : Selon la valeur mémorisée dans la variable couleur. Case 'bleu': Si cette valeur est le texte bleu. Selection.Interior.Color = RGB(0, 0, 255) : Alors nous remplissons le fond des cellules de la sélection de bleu. Selection est l'objet VBA Excel qui désigne la plage de cellules sélectionnée au moment de l'exécution. La formation pour débuter la programmation en VBA Excel, présente cet objet et ses méthodes. Interior est en effet une propriété de l'objet Selection qui désigne le remplissage des cellules de la sélection. Mais le remplissage peut être une bordure, comme un motif ou encore une couleur. Donc nous précisions avec la propriété dérivée Color de la propriété Interior de l'objet Selection. Notez que chaque Objet appelle sa propriété à l'aide du point (.). Enfin, nous affectons cette propriété à une couleur que nous définissons à l'aide de la fonction RGB, Red, Green, Blue. Cette fonction attend trois paramètres, les trois composantes de la couleur, comprises entre 0 et 255. Puis nous poursuivons l'énumération des critères afin de prévoir et traiter le plus grand nombre de cas. Bien sûr nous terminons avec la branche Case Else qui permet de traiter en une fois, tous les autres cas, c'est-à-dire tout ce que nous n'avons pas pu prévoir au-dessus.
  • Revenir sur la feuille Tableau,
  • Sélectionner le tableau ou une partie de ce dernier,
  • Cliquer sur le bouton pour tester le code,
  • Saisir l'une des couleurs au clavier.
Multi-critères utilisateurs gérés en Select Case VBA

A validation, les cellules sélectionnées prennent la couleur définie par le traitement de la branche Case ayant validé le critère saisi. Dans notre cas, nous n'avions sélectionné que les cellules de titres. Les instructions d'un Case ne se limitent pas qu'à une action. Tous les traitements s'écrivent sur des lignes les unes en dessous des autres d'un Case. Ainsi nous pourrions en même temps définir une couleur de bordure et une couleur de texte. Par exemple :

Case 'orange'
Selection.Interior.Color = RGB(255, 128, 0)
Selection.Font.Color = RGB(255, 255, 255)
Case 'violet'
Selection.Interior.Color = RGB(128, 0, 255)
Selection.Font.Color = RGB(255, 255, 0)

Dans le code ci-dessus, grâce aux branches Case du Select Case, nous définissons à la fois la couleur de fond et la couleur de police. Font est la propriété de l'objet Selection pour la police. Color est bien entendu la propriété dérivée de la propriété Font de l'objet Selection dont nous définissons une fois de plus la valeur à l'aide de la fonction RGB(). Et nous pourrions ainsi ajouter autant de traitements que nous le souhaitons.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn