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