Structures de décision (les conditions) dans Excel VBA

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.

  1. 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.

  1. 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
S’abonner
Notifier de
0 Commentaires
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x