Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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.
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.
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,
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,
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 :
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,
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.
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 écrirons
Case '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.
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.