IF...THEN ou Comment effectuer des tests logiques simples en VBA [#11 FORMATION EXCEL VBA COMPLETE]

Attention, aujourd’hui nous allons attaquer un point crucial du développement d’applications dans n’importe quel langage de programmation ! En effet, nous allons voir comment aider notre programme à pouvoir prendre des décisions afin de suivre un déroulement logique. Et pour cela, nous allons découvrir l’opérateur If…Then, qui permet de réaliser une opération uniquement lorsqu’une condition est remplie. Restez bien jusqu’au bout de ce chapitre, car nous y découvrirons également une variante encore plus puissante qui est l’opérateur If…Then…Else qui permet également de réaliser une autre opération, lorsque cette fois-ci la condition n’est pas remplie.

 

Téléchargement

Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
 

 

Tutoriel Vidéo

Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !

 

1. Présentation

Comme nous l’avons vu dans l’introduction de ce chapitre, la structure de programmation If…Then que nous allons voir dès à présent et l’un des éléments principaux sur lequel tout langage de programmation va s’appuyer.

Celle-ci permet en effet de guider le programme sur les opérations à effectuer, en définissant un certain nombre de règles simples, mais également complexes (mais pour ne pas trop vous compliquer la compréhension, nous verrons les cas les plus complexes dans les prochains chapitres, chaque chose en son temps !).

Ainsi la structure If…Then permet d’effectuer un test, lequel ne pourra avoir pour valeur que vrai (True dans le langage de VBA) ou faux (False).

Ensuite, et uniquement lorsque ce résultat est vrai, alors nous pouvons demander à Excel d’exécuter une instruction.

La structure est alors la suivante :

 

 If [Test] Then [Instruction] 

 

Où :

  • Test : test logique qui retourne une valeur égale à True (vrai) ou False (faux)
  • Instruction : Opération à réaliser lorsque Test est égal à True

Voici un exemple très simple :

 

 If a = 5 Then b = 10 

 

Ici nous cherchons à savoir si la variable a a pour valeur 5.

Lorsque cela est le cas, alors nous affectons la valeur 10 à la variable b.

En revanche, lorsque n’est pas le cas, alors la macro ne va rien faire, et se contenter de suivre son cours à partir de la ligne suivante.

 

2. Exemple simple

Pour bien comprendre le fonctionnement de la structure If… Then, nous créer une petite fonction très simple qui va se charger d’afficher un message différent en fonction du moment de la journée que nous allons saisir dans une cellule de la feuille de calcul.

Lorsque le moment saisi est égal à « matin », alors nous allons afficher le message « Bonjour ».

Nous n’allons pas nous attarder sur les méthodes qui permettent de créer une fonction personnalisée, si vous avez manqué les chapitres précédents de la formation, je vous invite vivement à les suivre en cliquant ici.

Voici notre fonction personnalisée :

 

 Function bonjour(moment As String) As String
        If moment = "matin" Then bonjour =  "Bonjour"
 End Function 

 

Nous créons donc une fonction qui porte le nom de bonjour qui est de type String (c’est-à-dire que celle-ci va retourner un texte).

Cette fonction demande un argument qui va également être un texte.

Puis nous demandons à VBA de contrôler la valeur contenue dans la variable moment, et lorsque celle-ci est égale à « matin », alors VBA doit retourner à la fonction le texte « Bonjour ».

Ensuite, de retour dans la feuille de calcul, nous appelons la fonction « bonjour », comme nous le ferions pour n’importe quelle autre fonction intégrée dans Excel, en utilisant le signe égal, suivi du nom de la fonction avec l’argument saisi entre guillemets (il s’agit en effet d’un texte) :

 

 =bonjour("matin") 

 

Nous constatons alors que si nous saisissons le texte « matin » en guise d’argument, alors la cellule dans laquelle nous avons saisi la formule prend pour valeur « Bonjour »

Excel formation - VBA11 - tests logiques if then else 1 - 01

En revanche, lorsque nous saisissons un texte différent de « matin », alors la cellule devient vide :

Excel formation - VBA11 - tests logiques if then else 1 - 02

Heureusement, il est tout à fait possible de cumuler plusieurs tests successifs :

 

 Function bonjour(moment As String) As String
        If moment = "matin" Then bonjour =  "Bonjour"
        If moment = "soir" Then bonjour =  "Bonsoir"
 End Function 

 

Excel formation - VBA11 - tests logiques if then else 1 - 03

 

3. If…Then…Else : et sinon !

Dans notre exemple, nous cumulons deux tests afin d’adapter la réponse retournée par la fonction par rapport au message saisi en argument.

Plutôt que d’effectuer deux tests successifs, nous pourrions utiliser la clause facultative Else qui permet d’effectuer une instruction lorsque la condition testée dans l’instruction If n’est pas remplie.

Le code deviendrait alors le suivant :

 

Function bonjour(moment As String) As String
        If moment = "matin" Then bonjour =  "Bonjour" Else bonjour = "Bonsoir"
End Function 

 

L’avantage d’utiliser la clause Else est que celle-ci peut permettre un gain en termes d’utilisation de ressources.

En effet, dans le cas précédent, la macro réalisait systématiquement les deux tests, quelque soient les résultats obtenus par l’un ou l’autre. Bien sûr, dans notre exemple qui est volontairement simpliste, le gain en terme de vitesse est absolument imperceptible, mais celui-ci deviendra bien plus significatif à mesure que notre application va prendre de l’importance !

Ici, Excel ne réalise qu’un seul test, et adapte l’instruction à appliquer en fonction de son résultat.

Bien sûr, il faut être prudent dans l’usage de cette clause pour ne pas produire de code erroné.

En effet, imaginons que l’utilisateur saisisse pour argument « Après-midi ». Dans ce cas, le test admettra pour valeur False (faux) et exécutera l’instruction précisée dans la partie Else, soit « Bonsoir ».

Ce qui n’est évidemment pas adapté au contexte.

Pas de panique, nous verrons très bientôt comment résoudre ce problème !

 

4. L’instruction If sous sa forme développée

Dans tous les exemples que nous avons vu jusqu’à maintenant, l’ensembles des éléments constitutifs de l’instruction If étaient saisis sur une seule et même ligne (le test, l’instruction principale et l’instruction secondaire).

Il s’agit d’une forme simplifiée d’utilisation de l’instruction If, la forme complète séparant chaque élément sur une ligne différente, dont la dernière est la clause de fin d’instruction End If.

Voici la forme complète de l’instruction If :

 

 Function bonjour(moment As String) As String
        If moment = "matin" Then
            bonjour = "Bonjour"
        End If
End Function 

 

La forme simplifiée permet de gagner un peu de temps à la saisie, mais ne permet d’insérer qu’une seule instruction à réaliser.

En revanche la forme complexe permet de réaliser un nombre illimité d’instructions, et rend la lecture du code bien plus claire et aérée :

 

 Function bonjour(moment As String) As String
        If moment = "matin" Then
            MsgBox "Nous sommes le matin, bonjour"
            bonjour = "Bonjour"
        End If
End Function 

 

Ensuite, la clause Else est également à utiliser une ligne différente :

 

 Function bonjour(moment As String) As String
        If moment = "matin" Then
            bonjour = "Bonjour"
        Else
            bonjour = "Bonsoir"
        End If
End Function 

 

 

5. Cumuler les tests grâce à la clause ElseIf…Then

Comme nous l’avons un peu plus tôt dans ce chapitre, la clause Else permet de réaliser une instruction lorsque le test effectué par le If retourne une valeur False.

Mais il peut être utile de souhaiter réaliser une opération uniquement lorsqu’un second test retourne une valeur True !

Pour cela, nous avons à notre disposons une autre clause qui permet de cumuler les effets de If et de Else, il s’agit de la clause ElseIf :

 

 Function bonjour(moment As String) As String
        If moment = "matin" Then
            bonjour = "Bonjour"
        ElseIf moment = "soir" Then
            bonjour = "Bonsoir"
        End If
 End Function 

 

Comme vous pouvez le constater, l’utilisation de ElseIf nécessite également une clause Then en fin de ligne.

Évidemment, la clause ElseIf ne peut être utilisée que dans le cadre d’une utilisation complète de l’instruction If.

Ensuite, sachez que nous pouvons cumuler le nombre de ElseIf pour effectuer un grand nombre de tests :

 

 Function bonjour(moment As String) As String
        If moment = "matin" Then
            bonjour = "Bonjour"
        ElseIf moment = "apres-midi" Then
            bonjour = "Bonne apres-midi"
        ElseIf moment = "soir" Then
            bonjour = "Bonsoir"
        End If
 End Function 

 

Dans ce cas, VBA va réaliser chacun des tests l’un après l’autre, jusqu’à obtenir un resultat positif (True).

Une fois l’instruction réalisée, la macro va se rendre après la dernière ligne du test (End If).

Il faut donc faire attention à l’ordre suivant lequel les tests se suivent, pour ne pas générer d’anomalies dans le déroulement du code.

Enfin, pour saisir une valeur par défaut à retourner lorsqu’aucun test n’a de retour positif, il suffit d’insérer une clause Else classique en toute fin d’instruction :

 

 Function bonjour(moment As String) As String
        If moment = "matin" Then
            bonjour = "Bonjour"
        ElseIf moment = "apres-midi" Then
            bonjour = "Bonne apres-midi"
        ElseIf moment = "soir" Then
            bonjour = "Bonsoir"
        ElseIf moment = "nuit" Then
            bonjour = "Bonne nuit"
        Else
            bonjour = "Moment de la journée  inconnu..."
        End If
 End Function 

 

 

Excel formation - VBA11 - tests logiques if then else 1 - 04

 

Ce tour de présentation de l’instruction If est maintenant terminé… du moins pour le moment ! Nous nous retrouvons en effet vendredi prochain pour en découvrir toutes les subtilités, et voir à quel point nous pouvons effectuer des tests complexes

 



Articles qui pourraient vous intéresser

Automatisez vos saisies d’informations !

Les tableaux croisés dynamiques, c’est facile !

IF...THEN ou Comment effectuer des tests logiques simples en VBA [#11 FORMATION EXCEL VBA COMPLETE]

La notion d’objet dans le langage VBA [#10 FORMATION EXCEL VBA COMPLETE]

Commentaires

Il n'y a aucun commentaire...

Poster un commentaire

Pseudo
Commentaire

Contact - Plan du site - À propos - Contact

© Excel-Formation 2018 - Excel, simplement

Haut de la page

Excelformation.fr propose de nombreuses formations pratiques et gratuites sur Microsoft Excel : des cours pour apprendre à structurer et analyser les données, des tutos sur les fonctions avancées, les formules et les formules avancées d'Excel, les formules matricielles, les mise-en-formes conditionnelles, les graphiques Excel (xls, xlsx, xlsm,…). Des tutoriels pour apprendre à automatiser les tâches répétitives (via des macro-commandes en VBA) de vos classeurs Excel.