VBA If, ElseIf, Else (Guide ultime des instructions If)

VBA Si déclaration

Si donc

Les instructions VBA If vous permettent de tester si les expressions sont VRAI ou FAUX, en exécutant un code différent en fonction des résultats.Regardons un exemple simple :
1 If Range("a2").Valeur > 0 Then Range("b2").Valeur = "Positive"
Ceci teste si la valeur de la plage A2 est supérieure à 0. Si c'est le cas, définissez la plage B2 sur « Positive »Remarque : Lors du test des conditions, nous utiliserons les opérateurs de comparaison =, >, <, , =. Nous les aborderons plus en détail plus loin dans l'article.Voici la syntaxe d'une simple instruction If d'une ligne :
1 Si [expression_test] alors [action]
Pour faciliter la lecture, vous pouvez utiliser un caractère de continuation de ligne (trait de soulignement) pour développer les instructions If sur deux lignes (comme nous l'avons fait dans l'image ci-dessus) :
12 Si [expression_test] alors _[action]
12 Si Plage("a2").Valeur > 0 Alors _Plage("b2").Valeur = "Positif"

Fin si

L'instruction if "à une seule ligne" ci-dessus fonctionne bien lorsque vous testez une condition. Mais comme vos instructions IF deviennent plus compliquées avec plusieurs conditions, vous devrez ajouter un « End If » à la fin de l'instruction if :
123 Si Plage("a2").Valeur > 0 AlorsPlage("b2").Valeur = "Positif"Fin si

Ici la syntaxe est :

123 Si [expression_test] alors[action]Fin si

La fin If signifie la fin de l'instruction if.

Ajoutons maintenant un ElseIF :

ElseIF - Conditions multiples

ElseIf est ajouté à une instruction If existante. ElseIf teste si une condition est remplie UNIQUEMENT si les conditions précédentes ne sont pas remplies.Dans l'exemple précédent, nous avons testé si une valeur de cellule est positive. Maintenant, nous allons également tester si la valeur de la cellule est négative avec un ElseIf :
12345 Si Plage("a2").Valeur > 0 AlorsPlage("b2").Valeur = "Positif"ElseIf Range("a2").Valeur < 0 ThenPlage("b2").Valeur = "Négatif"Fin si

Vous pouvez utiliser plusieurs ElseIfs pour tester plusieurs conditions :

1234567891011 Sous-If_Multiple_Conditions()If Range("a2").Value = "Cat" ThenPlage("b2").Valeur = "Miaou"ElseIf Range("a2").Value = "Chien" ThenRange("b2").Valeur = "Woof"ElseIf Range("a2").Value = "Canard" ThenRange("b2").Valeur = "Coin"Fin siFin du sous-marin

Nous allons maintenant ajouter un Autre:

Autre

Les Autre fonctionnera si aucune autre condition préalable 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, alors elle doit être nulle :

1234567 Si Plage("a2").Valeur > 0 AlorsPlage("b2").Valeur = "Positif"ElseIf Range("a2").Valeur < 0 ThenPlage("b2").Valeur = "Négatif"AutrePlage("b2").Valeur = "Zéro"Fin si

Sinon

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

1234567 Sous-If_Else()Si Plage("a2").Valeur > 0 AlorsPlage("b2").Valeur = "Positif"AutrePlage("b2").Valeur = "Non positif"Fin siFin du sous-marin

FI imbriqués

Vous pouvez également « imbriquer » des déclarations if les unes dans les autres.

1234567891011 Sous Nested_Ifs()Si Plage("a2").Valeur > 0 AlorsPlage("b2").Valeur = "Positif"AutreSi Plage("a2").Valeur < 0 AlorsPlage("b2").Valeur = "Négatif"AutrePlage("b2").Valeur = "Zéro"Fin siFin siFin du sous-marin

SI - Ou, Et, Xou, Non

Ensuite, nous discuterons des opérateurs logiques : Ou, Et, Xou, Non.

Si ou

Les Ou l'opérateur 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 :

123 If Range("a2").Valeur 10000 ThenPlage("b2").Valeur = "Hors plage"Fin si

Vous pouvez inclure plusieurs Ors dans une ligne :

123 Si Plage("a2").Valeur 10000 Ou Plage("a2").Valeur = 9999 AlorsPlage ("b2").Valeur = "Hors plage"Fin si

Si vous comptez utiliser plusieurs Ors, il est recommandé d'utiliser un caractère de continuation de ligne pour faciliter la lecture de votre code :

123456 Si Plage("a2").Valeur < 5000 Ou _Plage("a2").Valeur > 10000 Ou _Plage("a2").Valeur = 9999 AlorsPlage("b2").Valeur = "Hors plage"Fin si

Si Et

L'opérateur Et vous permet de tester si TOUTES les conditions sont remplies.

123 If Range("a2").Value >= 5000 And Range("a2").Value <= 10000 ThenPlage("b2").Valeur = "Dans la plage"Fin si

Si Xou

L'opérateur Xor permet de tester si exactement une condition est remplie. Si aucune condition n'est remplie, Xor renverra FALSE, si deux conditions ou plus sont remplies, Xor renverra également false.

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

Si non

L'opérateur Not est utilisé pour convertir FALSE en TRUE ou TRUE en FALSE :

123 Sous SI_Non()MsgBox pas (vrai)Fin du sous-marin

Notez que l'opérateur Not nécessite une parenthèse entourant l'expression pour basculer.

L'opérateur Not peut également être appliqué aux instructions If :

123 Si Non (Plage("a2").Valeur >= 5000 Et Plage("a2").Valeur <= 10000) AlorsPlage ("b2").Valeur = "Hors plage"Fin si

Si comparaisons

Lors des comparaisons, vous utiliserez généralement l'un des opérateurs de comparaison :

Opérateur de comparaison Explication
= Égal à
Pas égal à
> Plus grand que
>= Plus grand ou égal à
< Moins que
<= Inférieur ou égal à

Cependant, vous pouvez également utiliser n'importe quelle expression ou fonction qui donne VRAI ou FAUX

Si - Fonction booléenne

Lorsque vous créez des expressions pour les instructions If, vous pouvez également utiliser n'importe quelle fonction qui génère TRUE ou False. VBA a quelques-unes de ces fonctions :

Fonction La description
IsDate Renvoie TRUE si expression est une date valide
Est vide Vérifier les cellules vides ou les variables non définies
EstErreur Vérifier les valeurs d'erreur
EstNull Vérifier la valeur NULL
EstNumérique Vérifier la valeur numérique

On peut les appeler ainsi :

1 If IsEmpty(Range("A1").Value) Then MsgBox "Cell Empty"

Excel possède également de nombreuses fonctions supplémentaires qui peuvent être appelées à l'aide de WorksheetFunction. Voici un exemple de la fonction Excel IsText :

12 If Application.WorksheetFunction.IsText(Range("a2").Value) Then _MsgBox "La cellule est du texte"

Vous pouvez également créer vos propres fonctions définies par l'utilisateur (UDF). Ci-dessous, nous allons créer une fonction booléenne simple qui renvoie TRUE. Ensuite, nous appellerons cette fonction dans notre instruction If :

1234567891011 Sous If_Function()Si TrueFunction AlorsMsgBox "Vrai"Fin siFin du sous-marinFonction TrueFunction() en tant que booléenTrueFunction = TrueFonction de fin

Comparer du texte

Vous pouvez également comparer du texte similaire à la comparaison de nombres :
1 Msgbox "a" = "b"
1 Msgbox "a" = "a"
Lorsque vous comparez du texte, vous devez tenir compte de la « casse » (supérieure ou inférieure). Par défaut, VBA considère les lettres avec des casses différentes comme non correspondantes. En d'autres termes, « A » « un ».Si vous souhaitez que VBA ignore la casse, vous devez ajouter la déclaration Option Compare Text en haut de votre module :
1 Option Comparer le texte

Après avoir fait cette déclaration « A » = « a » :
12345 Option Comparer le texteSous-If_Text()MsgBox "a" = "A"Fin du sous-marin

VBA si j'aime

L'opérateur VBA Like vous permet de faire des comparaisons inexactes de texte. Cliquez sur le lien « J'aime l'opérateur » pour en savoir plus, mais nous allons montrer un exemple de base ci-dessous :

12345678 Dim strName en tant que chaînestrName = "M. Charles"Si strName comme "Mr*" AlorsMsgBox "Vrai"AutreMsgBox "Faux"Fin si

Ici, nous utilisons un caractère générique astérisque « * ». Le * représente n'importe quel nombre de n'importe quel caractère. Ainsi, l'instruction If ci-dessus renverra TRUE. L'opérateur Like est un outil extrêmement puissant, mais souvent sous-utilisé pour traiter le texte.

Si boucles

Les boucles VBA vous permettent de répéter des actions. La combinaison de IF-ELSE avec des boucles est un excellent moyen de traiter rapidement de nombreux calculs.

Poursuivant notre exemple positif/négatif, nous ajouterons une boucle For Each pour parcourir une plage de cellules :

1234567891011121314 Sous-If_Loop()Dim Cell comme plagePour chaque cellule de la plage ("A2:A6")Si Cell.Value > 0 AlorsCell.Offset(0, 1).Value = "Positive"ElseIf Cell.Value < 0 ThenCell.Offset(0, 1).Valeur = "Négatif"AutreCell.Offset(0, 1).Valeur = "Zéro"Fin siCellule suivanteFin du sous-marin

Si autre exemples

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

Vérifiez si la cellule est vide

Ce code vérifiera si une cellule est vide. S'il est vide, il ignorera la cellule. S'il n'est pas vide, il affichera la valeur de la cellule dans la cellule de droite :
1234567 Sous-If_Cell_Empty()Si Plage("a2").Valeur "" AlorsPlage("b2").Valeur = Plage("a2").ValeurFin siFin du sous-marin

Vérifier si la cellule contient du texte spécifique

La fonction Instr teste si une chaîne de texte est trouvée dans une autre chaîne. Utilisez-le avec une instruction If pour vérifier si une cellule contient du texte spécifique :
123 Si Instr(Range("A2").value,"text") > 0 AlorsMsgbox "Texte trouvé"Fin si

Vérifier si la cellule contient du texte

Ce code testera si une cellule est du texte :
1234567 Sous-If_Cell_Is_Text()If Application.WorksheetFunction.IsText(Range("a2").Value) ThenMsgBox "La cellule est du texte"Fin siFin du sous-marin

Si aller à

Vous pouvez utiliser le résultat d'une instruction If pour « Aller à » une autre section de code.
12345678910 Sous SiGoTo ()Si IsError(Cell.value) ThenAller à IgnorerFin si'Du codeSauter:Fin du sous-marin

Supprimer la ligne si la cellule est vide

À l'aide de Ifs et de boucles, vous pouvez tester si une cellule est vide et, le cas échéant, supprimer la ligne entière.
123456789 Sub DeleteRowIfCellBlank()Dim Cell As RangePour chaque cellule de la plage ("A2:A10")Si Cell.Value = "" Then Cell.EntireRow.DeleteCellule suivanteFin du sous-marin

Si MessageBox Oui / Non

Avec les boîtes de message VBA, vous pouvez 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 continuer à exécuter la procédure ou non. Vous gérez l'entrée de l'utilisateur à l'aide d'une instruction If.Voici la boîte de message Oui/Non en pratique :
123456789101112 Sous MsgBoxVariable()Réponse faible en tant qu'entierréponse = MsgBox("Voulez-vous continuer ?", vbQuestion + vbOuiNon)Si réponse = vbOui AlorsMsgBox "Oui"AutreMsgBox "Non"Fin siFin du sous-marin

VBA If, ElseIf, Else dans Access VBA

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

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

wave wave wave wave wave