Fonction VBA IIF

Ce tutoriel vous expliquera comment utiliser IIF en VBA

La fonction VBA IIF est similaire à l'utilisation de la fonction SI dans Excel. Il teste si une condition est remplie, renvoyant une valeur (ou un calcul) si VRAI, une autre valeur (ou un calcul) si FAUX.

Il est similaire à l'instruction VBA If, beaucoup le considèrent comme un raccourci pour utiliser cette méthode car vous n'avez besoin d'écrire qu'une seule ligne de code pour obtenir le résultat souhaité plutôt que d'utiliser un Si… Alors… Sinon… Fin si routine. Cependant, il doit être utilisé correctement car il peut entraîner des problèmes dans votre code.

Syntaxe IIF

La fonction IFF est composée de 3 parties - le test logique, la partie vraie et la partie fausse.

  • Expression:Le test logique qui doit avoir lieu.
  • Partie vraie : Le résultat qui sera retourné si le test logique est VRAI.
  • Fausse partie : Le résultat qui sera retourné si le test logique est FAUX.

Écriture d'une procédure de fonction IIF

123 Fonction GetNames(strName As String) As StringGetNames = IIf(strName = "John", "Le nom est John", "Le nom n'est pas John")Fonction de fin

Dans la fonction ci-dessus, nous pouvons utiliser une sous-procédure pour tester si la variable que nous passons à la fonction est la chaîne « John »

123 Sub TestGetNamaes()MsgBox GetNames("Jean")Fin du sous-marin

Si nous devions exécuter la sous-procédure TestGetNames, elle appellerait la fonction GetNames et renverrait une boîte de message.

Si nous avions utilisé la méthode If à la place, le code aurait ressemblé à ceci :

1234567 Fonction GetNames(strName As String) As StringSi(strName = "Jean") AlorsGetNames = "Le nom est Jean"AutreGetNames = "Le nom n'est pas John"Fin siFonction de fin

Nous avons effectivement écrit une ligne de code au lieu de 5 lignes de code - impressionnant !

Pourquoi utiliser If à la place ?

Considérer ce qui suit

123 Fonction GetNames(strName As String) As StringGetNames = IIf(strName = "John", MsgBox("Le nom est John"), MsgBox("Le nom n'est pas John"))Fonction de fin

Maintenant, si vous exécutez la sous-procédure suivante pour appeler votre fonction

123 Sub TestGetNames()GetNames ("Jean")Fin du sous-marin

Vous obtiendrez la même boîte de message qu'avant, mais immédiatement après, vous obtiendrez la boîte de message suivante !

La fonction IIF exécute à la fois les sections VRAI et FAUX de la ligne de code - elle ne quitte pas le code une fois qu'elle a trouvé que la condition est vraie - elle exécute toujours la section fausse également - nous donnant ainsi un faux message dans le deuxième boîte de message. Si tu avais utiliséSi… Alors… Sinon… Fin si - cela ne se serait pas produit - la fonction SI n'exécute que la section VRAI ou FAUX du code - en fonction de la logique transmise au code.

Le code est mal conçu (exprès !) avec les boîtes de message contenues dans la ligne de code sur laquelle se trouve l'instruction IIF plutôt qu'après le code, ou dans la sous-routine. Comme la fonction IIF exécute à la fois les sections TRUE et FALSE de l'instruction, les deux messages sont renvoyés.

Nous pourrions corriger cette erreur en déplaçant la boîte de message sous la ligne de fonction IIF, comme dans le code ci-dessous, ou en déplaçant la boîte de message vers la sous-procédure selon le premier exemple de cet article.

1234 Fonction GetNames(strName As String) As StringGetNames = IIf(strName = "John", "Le nom est John", "Le nom n'est pas John")MsgBox (GetNames)Fonction de fin

Si vous faites attention lorsque vous écrivez votre code, la fonction IIF peut vous faire économiser beaucoup de lignes de code et une saisie supplémentaire !

IIF imbriqués

Nous pouvons imbriquer la fonction IIF de la même manière que la fonction IF mais encore une fois, tout se fait sur une seule ligne.

123 Fonction GetDiscount(dblPrice As Double) As DoubleGetDiscount = IIf(dblPrice >= 500, 10, IIf(dblPrice >= 250, 5, IIf(dblPrice >= 100, 2.5, 0)))Fonction de fin

Nous pourrions alors appeler cette fonction à partir d'une sous-procédure

12345 Sub FindRemise()Dim dblP en tant que doubledblP = 899MsgBox ("La remise que vous pouvez obtenir est " & GetDiscount(dblP) & "%")Fin du sous-marin

ou vous pouvez l'appeler depuis Excel, en l'utilisant comme UDF (User Defined Function)

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave