Nous pouvons créer quatre types de structures de décision avec l’instruction If:
■ If…Then;
■ If…Then…Else;
■ If aninhado;
■ If combiné avec les opérateurs And et Or.
1 If … Then
Dans le bloc d’un lf … Then, la structure commence toujours par If et se termine par End If. Lorsque la condition entrée est vraie, toutes les instructions entre ces deux clauses seront exécutées. Si la condition est false, le code est exécuté à partir de la ligne sous la clause End If et toutes les instructions précédentes sont ignorées. La syntaxe utilisée est la suivante:
If Condition Then Instruction si la condition est vrai End If
L’exemple suivant contient une condition qui vérifie si la variable ProduitA est supérieure à 15, auquel cas sa valeur sera entrée dans la cellule A5:
Sub ExempleConditionIf() Dim ProduitA As Integer ProduitA = InputBox("Entrez la valeur du produit: ") If ProduitA > 15 Then Range("A5").Value = ProduitA End If Msgbox "A bientôt!" End Sub
Commentaires
■ Ce code, une fois exécuté, affichera un InputBox. Si vous entrez une valeur supérieure à 15 et appuyez sur OK, la condition sera vraie et, par conséquent, la cellule A5 sera remplie avec la valeur entrée.
■ Si une valeur inférieure à 15 est entrée, la cellule restera vide, c’est-à-dire qu’aucune action ne sera effectuée.
■ Étant donné que la commande Msgbox se trouve après l’instruction End If, que la condition soit vraie ou non, le message “A bientôt!” sera affiché.
Il est possible de structurer la fonction if en une seule ligne de code. Par conséquent, nous n’utilisons pas la clause End If.
If ProduitA > 15 Then Range(“A5”).Value = ProduitA
Nous pouvons entrer plusieurs procédures à exécuter si la condition est vraie. Pour ce faire, nous devons ajouter une condition par ligne, en terminant le bloc avec l’instruction End If.
L’exemple suivant contient des instructions pour entrer la valeur de la variable ProduitA dans la cellule A5 et appliquer le style italique à cette cellule. Ensuite, vous devez ajouter la valeur 50 dans la variable ProduitA et entrer ce résultat dans la cellule A6, modifier la taille de police de cette cellule en 20 et afficher un message indiquant que l’opération a été effectuée. En tout, il y a cinq instructions, une sur chaque ligne de code entre les instructions If et End If.
Sub ExempleConditionIf() Dim ProduitA As Integer ProduitA = InputBox ("Entrez la valeur du produit: ") If ProduitA > 15 Then Range("A5").Value = ProduitA Range("A5").Font.Italic = True Range("A6") = ProduitA + 50 Range("A6").Font.Size = 20 MsgBox "Toutes nos félicitations! Opération réussie." End If End Sub
Commentaires
■ L’image suivante affiche le résultat de ce code si la valeur entrée par l’utilisateur est 40.
■ La cellule A5 est remplie du numéro 50, la cellule A6 avec 100 correspondant au résultat de 40 + 60 et affiche le message indiquant que l’opération a été effectuée.
2 If … Then … Else (Si … Alors … Sinon)
La structure If … Then … Else vous permet d’entrer non seulement des instructions à exécuter si les conditions sont vraies, mais également des instructions à exécuter si les conditions sont fausses. Le bloc de cette structure commence également par If et se termine par End If, mais comporte une clause Else après les instructions relatives à la condition vraie. Toutes les instructions entrées entre les clauses Else et End If ne seront exécutées que si la condition est fausse.
La structure de ce bloc est la suivante :
If Condition Then Instructions pour la condition vraie Else Instructions pour la condition fausse End If
Commentaires
La structure … Alors … Sinon est divisée en trois parties:
■ Condition (Obligatoire): expression dont le résultat sera True ou False. La valeur sera considérée comme vraie si l’expression est vraie ou fausse si la condition est fausse ou nulle;
■ Instructions pour la condition vrai: une instruction (ou plusieurs, séparées par des points) qui sera exécutée si la condition renvoie une valeur True.
■ Instructions pour la condition fausse: une instruction (ou plusieurs, séparées par des deux points) qui seront exécutées si la condition renvoie une valeur Faux.
Pour illustrer l’application de cette structure, nous allons utiliser la fonction MsgBox pour créer une zone de texte avec les boutons OK et Annuler. Selon le bouton choisi par l’utilisateur, une action différente sera entreprise : le bouton OK devrait supprimer toutes les cellules et les données d’un tableur et le bouton Annuler devrait mettre fin à la procédure sans effectuer cette action, en affichant un seul message à l’utilisateur.
La procédure d’origine pour supprimer toutes les cellules d’une feuille de calcul serait la suivante :
Sub SuppressionFeuilles() Cells.Delete End Sub
Commentaires
■ La méthode Delete permet de supprimer le contenu d’une cellule ou d’une plage de cellule.
Le code suivant crée la variable Decision, qui prend une valeur en fonction de la réponse de l’utilisateur dans la fonction MsgBox. Cette valeur est utilisée dans la structure If … Then … Else:
Sub SuppressionFeuilles () Dim Decision As String Decision = MsgBox ("Cette opération supprimera toutes les cellules et toutes les données de la feuille de calcul. Souhaitez-vous continuer?", _ vbOKCancel + vbCritical, "Alerte") If Decision = vbOK Then Cells.Delete MsgBox " Cellules et données supprimées." Else MsgBox " L'opération a été annulée." End If End Sub
Lorsque cette procédure est effectuée, le message s’affiche, comme illustré par l’image suivante :
Commentaires
■ Si l’utilisateur clique sur le bouton OK, la variable Decision stockera le résultat vbOK (ou 1), ce qui rendra la condition Decision = vbOK vraie.
■ Dans ce cas, toutes les cellules et les données de la feuille de calcul seront supprimées.
■ Si l’utilisateur clique sur le bouton Annuler, la condition sera fausse, ce qui entraînera uniquement l’affichage du message L’opération a été annulée.
Nous pouvons utiliser la clause Elself pour entrer diverses conditions à tester. Dans ce cas, le code vérifie chaque condition et exécute les instructions de la première condition dont le résultat est True. Si aucune des deux conditions n’est vraie, il exécute l’instruction (ou le jeu d’instructions) situé sous la clause Else. Un bloc avec Elself utilise la structure suivante :
If Condition1 Then Instructions pour le cas de Condition1 = True ElseIf Condition2 Then Instructions pour If = False et ElseIf = True Else Instructions pour toutes les conditions précédentes =False End If
Commentaires
■ Condition1 (obligatoire): expression qui sera évaluée comme étant vraie ou fausse. La valeur sera considérée comme vraie si l’expression est vraie ou fausse si la condition est fausse ou nulle;
■ Instruction pour le cas de Condition1 = True: une instruction (ou plusieurs, séparées par des points) qui sera exécutée si Condition renvoie une valeur True. Les instructions sont requises sous la forme d’une ligne sans jalousie Else et facultative sous forme de bloc;
■ Condition2 (facultatif): égale à la condition;
■ Instructions pour lf = False et Elself = True (facultatif): une instruction (ou plusieurs, séparées par des points) qui sera exécutée si Condition renvoie une valeur False et que Condition2 renvoie une valeur True.
■ Instructions pour toutes les conditions précédentes = False (facultatif): une instruction (ou plusieurs, séparées par un signe deux-points) qui sera exécutée si aucune des conditions précédentes ne renvoie une valeur True.
Prenons l’exemple suivant:
Sub ExempleIfElseif() Dim paiement As String paiement = Ucase(InputBox("Spécifiez le mode de paiement")) If paiement = "D" Then MsgBox "Argent" ElseIf paiement = "C" Then MsgBox "Cheque" ElseIf paiement = "CC" Then MsgBox "Carte de crédit" Else MsgBox "Paiement non défini. Annuler la vente!" End If End Sub
Commentaires
■ Le message sera affiché selon l’acronyme entré dans la zone de texte (InputBox). Si l’utilisateur tape une valeur différente des acronymes (D, C ou CC), la commande sera exécutée après l’instruction Else.
■ Dans cet exemple, nous n’avons comme condition valide que les valeurs D, C ou CC (en majuscules). Toutefois, si l’un de ces éléments minuscules était entré dans la boîte de réception, les actions seraient exécutées dans Else, car toutes les conditions font référence aux lettres majuscules et que VBA différencie les lettres majuscules des lettres minuscules.
■ Pour résoudre ce problème, la fonction UCase () a été utilisée, qui convertit les caractères en majuscules. Notez la ligne de code :
modepaiement = Ucase(InputBox("Spécifiez le mode de paiement"))
Si l’utilisateur entre dans la boîte de réception la valeur cc (en lettres minuscules), la fonction convertira cette valeur en lettres majuscules, ce qui entraînera un CC.
-
If imbriqué
Vous pouvez imbriquer des blocs If, c’est-à-dire, insérer un bloc If dans un autre, comme indiqué dans la structure suivante. Il est important de noter que tous les blocs If doivent être fermés avec l’instruction End If:If Condition1 Then Instructions pour le cas de Condition1 = true If Condition2 Then Instructions pour le cas de Condition2 = true End If End If
Regardez l’exemple suivant, qui montrera à l’utilisateur le message “Donner 10% de remise” si le paiement est en espèces (si vous appuyez sur le bouton “OUI” dans la fonction MsgBox) et que le type de paiement est en espèces (si vous tapez le mot ” ARGENT “dans la zone de texte InputBox):
Sub ModeDePaiement() Dim commentP As String Dim paiement As String commentP = MsgBox("Paiement en espèces?", vbYesNo) paiement = InputBox("Spécifiez le mode de paiement") If commentP = vbYes Then If ucase(paiement) = "ARGENT" Then MsgBox "Offrez 10% de réduction" End If End If End Sub
Commentaires
■ Si la réponse obtenue dans la fonction MsgBox est “YES”, la deuxième instruction If sera exécutée.
-
Entrer dans diverses conditions avec And (Et) et Or (Ou)
Grâce aux opérateurs And et Or, nous pouvons exécuter une ou plusieurs instructions à partir du test de diverses conditions.
L’opérateur And construit une conjonction logique, c’est-à-dire que pour que le résultat soit Vrai, toutes les conditions doivent être vraies (si l’une d’entre elles est fausse, le résultat est Faux). Pour utiliser l’opérateur And, vous devez l’insérer entre les conditions à tester, comme indiqué dans la structure suivante:
If Condition1 And Condition2 And Condition3...Then Instructions si toutes les conditions sont vraies Else Instructions si une ou plusieurs conditions sont fausses End If
Considérons l’exemple ci-dessous :
Sub OperationAnd () Dim nombre As Double nombre = 10 If nombre > 5 And nombre < 15 Then MsgBox "Valeur dans la plage!" End If End Sub
Commentaires
Le contenu de variable nombre est 10, avec les conditions suivantes:
■ nombre > 5 = True puisque 10 est supérieur à 5; ■ nombre <15 = True, car 10 est inférieur à 1 5.
Comme les deux conditions sont satisfaisantes (True), la commande sera exécutée dans l’instruction If.
L’opérateur Or construit une disjonction logique, c’est-à-dire que pour que le résultat soit Vrai, il suffit que l’une des conditions soit vraie (si elles sont toutes fausses, le résultat est faux). L’opérateur Or doit être inséré entre les conditions qui seront testées, tout comme l’opérateur And, comme indiqué dans la structure suivante :
If Condition1 Or Condition2 Or Condition3...Then Instructions si une ou plusieurs des conditions sont vraies Else Instructions si toutes les conditions sont fausses End If
Prenons l’exemple :
Sub OperationOr() Dim Valeur As Byte Dim paiement As String Valeur = 50 paiement = "espèces" If Valeur > 200 Or paiement = "espèces" Then MsgBox "Offrir 15% de réduction" End If End Sub
Commentaires
■ Dans ce cas, le message sera affiché si le paiement est espèces ou si le montant de l’achat est supérieur à 200, c’est-à-dire si vous utilisez l’opérateur Or, la déclaration est considérée comme vraie si l’une des deux conditions remplie est satisfaisant.
5 Sélectionnez le cas
L’instruction Select Case vous permet de créer un processus décisionnel dans lequel une expression unique peut être comparée à diverses autres expressions. L’instruction Select Case utilise la structure suivante :
Select Case expression Case expression1 Instruction 1 Case expression 2 Instruction 2 Case Else Instruction Else End Select
L’exemple suivant déclare la variable Modele, crée un InputBox pour permettre à l’utilisateur de définir sa valeur et le compare à quatre valeurs à l’aide de l’instruction Select Case:
Sub Fabricant() Dim Modele As String Modele = InputBox("Entrez le nom du modèle de voiture: ") Select Case Ucase(Modele) Case "COROLLA" MsgBox " Le fabricant de cette voiture est Toyota." Case "CIVIC" MsgBox " Le fabricant de cette voiture est Honda." Case "FUSION" MsgBox " Le fabricant de cette voiture est Ford." Case Else MsgBox " Impossible d'identifier le fabricant." End Select End Sub
Commentaires
■ Cet exemple compare les modèles (un nom de voiture saisi par l’utilisateur dans la InputBox) et les observations (conditions). Lorsque l’instruction trouve un cas qui correspond à l’expression Modele, il affiche une MsgBox avec le nom du fabricant du véhicule.
■ Si aucun cas ne correspond à l’expression, les commandes contenues dans l’instruction Case Else seront exécutées. Dans cet exemple, une MsgBox est affichée, indiquant que le fabricant n’a pas pu être identifié.
Notez l’exemple ci-dessous, qui détermine l’affichage de MsgBox en fonction de la plage de valeurs entrée par l’utilisateur:
Sub QuantiteStock() Dim quantité As Integer stock= InputBox("Quelle quantité") Select Case stock Case 0 To 10 MsgBox " Insuffisant " Case 11 To 30 MsgBox " Avertissement " Case Is > 30 MsgBox "Ok" End Select End Sub