VBA If, ElseIf, Else (Guide Ultime des Instructions If)
In this Article
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.