VBA If, ElseIf, Else (Guide Ultime des Instructions If)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

David Gagnon

Last updated on février 5, 2023

Instruction If en VBA

If Then

Les instructions If de VBA vous permettent de tester si des expressions sont VRAIES ou FAUSSES et d’exécuter un code différent en fonction des résultats.

Prenons un exemple simple :

If Range("a2").Value > 0 Then Range("b2").Value = "Positif"

Ceci teste si la valeur de la cellule A2 est supérieure à 0. Si c’est le cas, la valeur de la cellule b2 est définie à « Positif »

Remarque : lorsque nous testons des conditions, nous utilisons les opérateurs de comparaison =, >, <, <>, <=, >=. Nous les aborderons en détail plus loin dans l’article.

Voici la syntaxe d’une simple instruction If d’une ligne :

If [Expression_à_tester] then [action]

Pour faciliter la lecture, vous pouvez utiliser un caractère de continuation de ligne (underscore) pour étendre les déclarations If à deux lignes (comme nous l’avons fait dans l’image ci-dessus) :

If [Expression_à_tester] Then _
    [action]
If Range("a2").Value > 0 Then _
   Range("b2").Value = "Positif"

End If

L’instruction if « à une ligne » ci-dessus fonctionne bien lorsque vous testez une seule condition. Mais au fur et à mesure que vos instructions IF deviennent plus compliquées avec plusieurs conditions, vous devrez ajouter un « End If » à la fin de l’instruction if :

If Range("a2").Value > 0 Then
  Range("b2").Value = "Positif"
End If

Ici, la syntaxe est la suivante:

If [Expression_à_tester] then
  [action]
End If

Le paramètre End If signifie la fin de l’instruction if.

Ajoutons maintenant un ElseIF :

ElseIF – Conditions multiples

L’instruction ElseIf est ajoutée à une instruction If existante. ElseIf teste si une condition est remplie UNIQUEMENT si les conditions précédentes n’ont pas été remplies.

Dans l’exemple précédent, nous avons testé si la valeur d’une cellule était positive. Maintenant, nous allons également tester si la valeur de la cellule est négative à l’aide d’un ElseIf :

If Range("a2").Value > 0 Then
    Range("b2").Value = "Positif"
ElseIf Range("a2").Value < 0 Then
    Range("b2").Value = "Négatif"
End If

Vous pouvez utiliser plusieurs ElseIf pour tester plusieurs conditions :

Sub If_Conditions_Multiples()

    If Range("a2").Value = "Chat" Then
        Range("b2").Value = "Miaou"
    ElseIf Range("a2").Value = "Chien" Then
        Range("b2").Value = "Wouf"
    ElseIf Range("a2").Value = "Canard" Then
        Range("b2").Value = "Coin Coin"
    End If

End Sub

Maintenant, nous allons ajouter un Else:

Else

L’instruction Else (sinon) s’exécutera si aucune autre condition précédente n’a été remplie. Nous terminerons notre exemple en utilisant un Else pour indiquer que si la valeur de la cellule n’est ni positive ni négative, elle doit être égale à zéro :

If Range("a2").Value > 0 Then
    Range("b2").Value = "Positif"
ElseIf Range("a2").Value < 0 Then
    Range("b2").Value = "Négatif"
Else
    Range("b2").Value = "Zéro"
End If

If-Else

Le type d’instruction If le plus courant est un simple If-Else :

Sub If_Else()
    If Range("a2").Value > 0 Then
        Range("b2").Value = "Positif"
    Else
        Range("b2").Value = "Pas Positif"
    End If
End Sub

IF imbriqués

Vous pouvez également « imbriquer » les instructions if les unes dans les autres.

Sub Si_Imbriqués()
    If Range("a2").Value > 0 Then
        Range("b2").Value = "Positif"
    Else
        If Range("a2").Value < 0 Then
            Range("b2").Value = "Négatif"
        Else
            Range("b2").Value = "Zéro"
        End If
    End If
End Sub

IF – Or, And, Xor, Not

Nous allons maintenant aborder les opérateurs logiques: Or, And, Xor, Not.

If Or

L’opérateur Or teste si au moins une condition est remplie. Le code suivant testera si la valeur de la plage A2 est inférieure à 5 000 ou supérieure à 10 000 :

If Range("a2").Value < 5000 Or Range("a2").Value > 10000 Then
    Range("b2").Value = "Hors de la plage"
End If

Vous pouvez inclure plusieurs Or dans une seule ligne :

If Range("a2").Value < 5000 Or Range("a2").Value > 10000 Or Range("a2").Value = 9999 Then
    Range("b2").Value = "Hors de la plage"
End If

Si vous utilisez plusieurs Or, il est recommandé d’utiliser un caractère de continuation de ligne pour rendre votre code plus facile à lire :

If Range("a2").Value < 5000 Or _
   Range("a2").Value > 10000 Or _
   Range("a2").Value = 9999 Then

       Range("b2").Value = "Hors de la plage"
End If

If And

L’opérateur And vous permet de tester si TOUTES les conditions sont remplies.

If Range("a2").Value >= 5000 And Range("a2").Value <= 10000 Then
    Range("b2").Value = "Dans la plage"
End If

If Xor

L’opérateur Xor vous permet de tester si une seule condition est remplie. Si aucune condition n’est remplie, Xor renvoie FAUX. Si deux conditions ou plus sont remplies, Xor renvoie également FAUX.

J’ai rarement vu Xor utilisé dans la programmation VBA.

If Not

L’opérateur Not est utilisé pour convertir FAUX en VRAI ou VRAI en FAUX :

Sub IF_Not()
    MsgBox Not (True)
End Sub

Notez que l’opérateur Not nécessite des parenthèses autour de l’expression à convertir. L’opérateur Not peut également être appliqué aux instructions If :

If Not (Range("a2").Value >= 5000 And Range("a2").Value <= 10000) Then
    Range("b2").Value = "Hors de la plage"
End If

Comparaisons If

Lorsque vous effectuez des comparaisons, vous utilisez généralement l’un des opérateurs de comparaison :

Opérateur de comparaison Explication
= Egal à
<> Non égal à
> Supérieur à
>= Supérieur ou égal à
< Inférieur à
<= Inférieur ou égal à

Cependant, vous pouvez également utiliser n’importe quelle expression ou fonction dont le résultat est VRAI ou FAUX

If – Fonction booléenne

Lorsque vous construisez des expressions pour les instructions If, vous pouvez également utiliser toute fonction qui génère VRAI ou FAUX. VBA possède quelques-unes de ces fonctions :

Fonction Description
IsDate Renvoie VRAI si l’expression est une date valide
IsEmpty Vérifie la présence de cellules vides ou de variables indéfinies
IsError Vérifie la présence de valeurs d’erreur
IsNull Vérification de la présence d’une valeur NULL
IsNumeric Vérification de la présence d’une valeur numérique

Elles peuvent être appelées comme ceci :

If IsEmpty(Range("A1").Value) Then MsgBox "Cellule Vide"

Excel dispose également de nombreuses fonctions supplémentaires qui peuvent être appelées à l’aide des Fonctions des feuilles de calcul (WorksheetFunction). Voici un exemple de la fonction IsText d’Excel:

If Application.WorksheetFunction.IsText(Range("a2").Value) Then _ 
   MsgBox "La cellule est un texte"

Vous pouvez également créer vos propres fonctions définies par l’utilisateur (User defined functions ou UDF). Ci-dessous, nous allons créer une simple fonction booléenne qui renvoie VRAI. Nous appellerons ensuite cette fonction dans notre instruction If :

Sub Fonction_If()

If FonctionVraie Then
    MsgBox "Vrai"
End If

End Sub

Function FonctionVraie() As Boolean
    FonctionVraie = True
End Function

Comparaison de Textes

Vous pouvez également comparer des textes de la même façon que vous comparez des chiffres :

Msgbox "a" = "b"

Lorsque vous comparez du texte, vous devez faire attention à la « casse » (supérieure ou inférieure). Par défaut, VBA considère les lettres ayant une casse différente comme non concordantes. En d’autres termes, « A » <> « a ».

Si vous souhaitez que VBA ignore la casse, vous devez ajouter la déclaration Option Compare Text

en haut de votre module :

Option Compare Text

Après avoir fait cette déclaration, « A » = « a » :

Option Compare Text

Sub If_Texte()
   MsgBox "a" = "A"
End Sub

VBA If Like

L’Opérateur Like de VBA vous permet d’effectuer des comparaisons inexactes de texte. Cliquez sur le lien « Opérateur like » pour en savoir plus, mais voici un exemple de base ci-dessous:

Dim strName as String
strName = "M. Charles"

If strName Like "M.*" Then
    MsgBox "Vrai"
Else
    MsgBox "Faux"
End If

Ici, nous utilisons un astérisque « * » comme caractère de remplacement. L’astérisque * représente un nombre quelconque de caractères. L’instruction If ci-dessus renverra donc VRAI. L’opérateur Like est un outil extrêmement puissant, mais souvent sous-utilisé, pour traiter du texte.

Boucles If

Les Boucles VBA vous permettent de répéter des actions. La combinaison des IF-ELSE avec les boucles est un excellent moyen de traiter rapidement de nombreux calculs. En poursuivant notre exemple positif/négatif, nous allons ajouter une boucle For Each pour parcourir une plage de cellules:

Sub Boucle_If()
Dim Cell as Range

  For Each Cell In Range("A2:A6")
    If Cell.Value > 0 Then
      Cell.Offset(0, 1).Value = "Positif"
    ElseIf Cell.Value < 0 Then
      Cell.Offset(0, 1).Value = "Négatif"
    Else
      Cell.Offset(0, 1).Value = "Zéro"
     End If
  Next Cell

End Sub

Exemples If Else

Nous allons maintenant passer en revue quelques exemples plus spécifiques.

Vérifier si une cellule est vide

Ce code va vérifier si une cellule est vide. Si elle est vide, il ignorera la cellule. Si elle n’est pas vide, il affichera la valeur de la cellule dans la cellule de droite :

Sub Si_Cellule_Vide()

If Range("a2").Value <> "" Then
    Range("b2").Value = Range("a2").Value
End If

End Sub

Vérifier si une cellule contient un texte spécifique

La fonction Instr teste si une chaîne de texte se trouve dans une autre chaîne. Utilisez-la avec une instruction If pour vérifier si une cellule contient un texte spécifique :

If Instr(Range("A2").value,"Texte") > 0 Then
  Msgbox "Texte Trouvé"
End If

Vérifier si la cellule contient du texte

Ce code va tester si une cellule contient du texte :

Sub Si_Cellule_Est_Texte()

If Application.WorksheetFunction.IsText(Range("a2").Value) Then
    MsgBox "La Cellule contient du Texte"
End If

End Sub

If Goto

Vous pouvez utiliser le résultat d’une instruction If pour « aller à » une autre section du code.

Sub IfGoTo ()

    If IsError(Cell.value) Then
        Goto Passer
    End If

    'Autre Code

Passer:
End Sub

Suppression d’une ligne si la cellule est vide

À l’aide de If et de boucles, vous pouvez tester si une cellule est vide et, si c’est le cas, supprimer la ligne entière.

Sub SupprimerLigneSiVide()

Dim Cell As Range

For Each Cell In Range("A2:A10")
    If Cell.Value = "" Then Cell.EntireRow.Delete
Next Cell

End Sub

If Boîte de message Oui / Non

Les boîtes de message VBA vous permettent de demander à l’utilisateur de choisir parmi plusieurs options. La boîte de message Oui/Non demande à l’utilisateur de sélectionner Oui ou Non. Vous pouvez ajouter une boîte de message Oui/Non à une procédure pour demander à l’utilisateur s’il souhaite poursuivre l’exécution de la procédure ou non. Vous traitez l’entrée de l’utilisateur à l’aide d’une instruction If.

Voici la boîte de message Oui/Non en pratique :

Sub MsgBoxVariable()

Dim réponse As Integer
réponse = MsgBox("Voulez-vous continuer?", vbQuestion + vbYesNo)

  If réponse = vbYes Then
    MsgBox "Oui"
  Else
    MsgBox "Non"
  End If

End Sub

VBA If, ElseIf, Else en Access VBA

Les fonctions If, ElseIf et Else fonctionnent exactement de la même manière dans Access VBA et dans Excel VBA.

Vous pouvez utiliser une instruction If pour vérifier s’il existe des enregistrements dans un Recordset.

vba-free-addin

Module Complémentaire d'Exemples de Code VBA

Accédez facilement à tous les exemples disponibles sur le site.

Naviguez simplement dans le menu, cliquez, et le code sera inséré directement dans votre module. Module complémentaire .xlam.

(Aucune installation requise!)

Téléchargement gratuit

Retour aux exemples de code VBA