Blog ENI : Toute la veille numérique !
🎃 Jusqu'à -30% sur les livres en ligne, vidéos et e-formations.
Code : GHOST30.
Cliquez ici !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Macros et langage VBA
  3. Les conditions
Extrait - Macros et langage VBA  Découvrez la programmation sous Excel (2e édition)
Extraits du livre
Macros et langage VBA Découvrez la programmation sous Excel (2e édition)
7 avis
Revenir à la page d'achat du livre

Les conditions

Objectifs du chapitre

Lorsque vous souhaitez exécuter un programme selon des conditions, comme par exemple, pour mettre en vert une ligne si le montant de telle colonne est supérieur à un montant, ou encore si vous souhaitez savoir dans quelle feuille recopier une valeur selon des éléments situés ailleurs dans votre classeur, vous devez faire appel aux structures de conditions et, plus largement, aux tests VBA. Ce chapitre a pour objectif de vous indiquer quelles sont les principales syntaxes de ces structures, comment les utiliser et lesquelles choisir selon les cas de figure.

En fin de chapitre, vous trouverez une série d’exercices pour vous entraîner.

Structure de condition

Lorsque vous codez en VBA, il est possible d’indiquer au programme qu’il doit réaliser un test et en fonction du résultat de ce test, il exécutera ou non une série d’instructions. Cela s’appelle une structure de condition.

Notion de test

Lorsqu’on parle de test, il est ici question d’une égalité ou inégalité qui retourne une valeur booléenne (Vrai/Faux - True/False) qui permet de déterminer le cheminement que le programme doit prendre en fonction de cette valeur. Il existe plusieurs structures de condition, vous allez donc les voir en commençant par les plus simples avant d’aborder les plus élaborées.

Condition Si Alors - If Then

La structure de condition la plus simple en VBA est celle du Si Alors, dont la syntaxe VBA correspond au If Then (traduction littérale anglaise).

En langage humain, cela reviendrait à :

Si (Quelque Chose Est Vrai) Alors 
   On exécute ce code 
Fin Si 

La syntaxe générale d’une telle structure est la suivante :

If Condition_A_Tester Then 
   Instructions 's'exécuteront si la Condition_A_Tester 
retourne True (Vrai) 
End If 

Exemple 1 : cas d’une structure de condition If Then

La structure de cette condition comporte une première ligne qui débute par le mot-clé If, suivi de la condition à tester puis du mot-clé Then pour finir cette première ligne. Suivent ensuite les instructions qui seront exécutées si la condition placée entre les mots-clés If et Then est vraie (True). Enfin, la structure se termine par les mots-clés End If (Fin Si).

Les instructions situées à l’intérieur de la structure ne seront pas exécutées si la condition est fausse.

Voici quelques exemples :

'L'utilisateur a fourni l'âge d'un usager, si celui-ci a moins de  
18 ans, vous affichez un message indiquant que l'usager est mineur  
If Age < 18 Then 
   MsgBox "Votre...

Condition Sinon - Else

Dans le cas où la condition apparaissant dans le If n’est pas remplie, c’est-à-dire qu’elle retourne False (faux), il vous est possible d’exécuter d’autres lignes de code.

En langage humain, cela reviendrait à :

Si (Quelque Chose Est Vrai) Alors 
   On exécute le code A 
Sinon 
   On exécute le code B 
Fin Si 

Le mot-clé à utiliser ici est Else. Son utilisation se fait très simplement avec la syntaxe suivante :

If Condition_A_Tester Then 
   InstructionsA 's'exécuteront si la Condition_A_Tester 
retourne True (Vrai) 
Else 
   InstructionsB 's'exécuteront si la Condition_A_Tester 
retourne False (Faux) 
End If 

Exemple 5 : cas de structure de condition If Then Else

Ce mot-clé permet donc d’effectuer un test et dans le cas où le test ne répond pas aux attentes, vous pouvez exécuter un autre code.

Lors de l’usage d’une structure If Else, une seule des deux instructions InstructionsA et InstructionsB pourra être exécutée, mais pas les deux à la suite.

Condition Sinon Si - ElseIf

Lorsque vous programmez, il peut arriver que lorsqu’une première condition n’est pas remplie, vous souhaitiez en tester une autre, pour pouvoir exécuter une autre série d’instructions. Cette structure existe également en VBA.

En langage humain, cela reviendrait à :

Si (Quelque Chose Est Vrai) Alors 
   On exécute le code A 
Sinon Si (Quelque Chose d'Autre Est Vrai) Alors 
   On exécute le code B 
Sinon 
   On exécute le code C 
Fin Si 

Le mot-clé qui permet cette syntaxe est ElseIf (en un seul mot-clé). La syntaxe VBA équivalente est la suivante :

If Condition_A_Tester_1 Then 
   InstructionsA 's'exécuteront si la Condition_A_Tester_1 
retourne True (Vrai) 
ElseIf Condition_A_Tester_2 Then 
   InstructionsB 's'exécuteront si la Condition_A_Tester_1 
retourne False (Faux) ET que la Condition_A_Tester_2 retourne True (Vrai) 
Else 
   InstructionsC 's'exécuteront si les Condition_A_Tester_1 et 
Condition_A_Tester_2 retournent toutes les deux False (Faux) 
End If 

Exemple 6 : syntaxe générale du ElseIf

Cette structure permet d’effectuer plusieurs tests les uns après les autres. Voici un exemple pour déterminer...

Condition Selon valeur - Select Case

Lorsque vous souhaitez par exemple colorier une cellule en vert, selon que vous ayez les lettres A, B, C ou D, en bleu si vous avez une valeur comprise en 1 et 5, en jaune si vous avez une valeur supérieure à 10, ou en rouge pour tous les autres cas, l’usage de la syntaxe avec If ElseIf sera particulièrement lourde, comme vous pouvez le voir dans cet exemple :

If Range("A1").Value = "A" Then 
   Range("A1").Interior.Color = vbGreen 
ElseIf Range("A1").Value = "B" Then 
   Range("A1").Interior.Color = vbGreen 
ElseIf Range("A1").Value = "C" Then 
   Range("A1").Interior.Color = vbGreen 
ElseIf Range("A1").Value = "D" Then 
   Range("A1").Interior.Color = vbGreen 
ElseIf Range("A1").Value = 1 Then 
   Range("A1").Interior.Color = vbBlue 
ElseIf Range("A1").Value = 2 Then 
   Range("A1").Interior.Color = vbBlue 
ElseIf Range("A1").Value = 3 Then 
   Range("A1").Interior.Color = vbBlue 
ElseIf Range("A1").Value = 4 Then 
   Range("A1").Interior.Color = vbBlue 
ElseIf Range("A1").Value = 5 Then 
   Range("A1").Interior.Color...

Condition condensée : IIf

Pour terminer ce chapitre, sachez qu’il existe une dernière structure de condition qui vous est accessible. Il s’agit de la fonction IIf() dont la syntaxe générale est la suivante

Dim Variable 
Variable = IIf(Condition, ValeurSiConditionVrai, 
ValeurSiConditionFaux) 

Exemple 14 : syntaxe générale de la fonction IIf

Cette fonction prend trois paramètres au total. Le premier correspond à la condition à tester. Le second servira de valeur de retour si la condition à tester retourne True, le troisième paramètre correspond à la valeur de retour si la condition est fausse.

Vous pouvez utiliser cette fonction lorsque vous souhaitez affecter une valeur à une variable selon une condition.

Voici un exemple d’une variable Age de notre utilisateur, et selon cet âge, on détermine si l’usager est majeur ou mineur.

Dim MajeurOuMineur As String 
... 
MajeurOuMineur = IIf(Age<18, "Mineur", "Majeur") 

Exemple 15 : exemple d’usage de la fonction IIf.

Cette fonction peut remplacer une structure If Then Else vue précédemment dans ce chapitre et permet d’atteindre le même objectif.

Dim Age As Integer 
Dim MajeurOuMineur As String 
... 
If Age<18 Then 
   MajeurOuMineur = "Mineur" 
Else ...

Exercices

Si Alors

 Écrivez une procédure AfficheSiNegatif, de portée publique nécessitant un paramètre numérique entier nommé ValeurDuDeclencheur.

Cette procédure devra afficher OK si la valeur de la variable ValeurDuDeclencheur est strictement inférieure à 0.

 Créez une macro SiAlors.

Cette macro appellera dans un premier temps AfficheSiNegatif en lui passant la valeur 35, puis dans un second temps AfficheSiNegatif en lui passant la valeur -5.

 Exécutez la macro SiAlors.

Le message OK apparaîtra une seule fois.

SI Sinon

 Écrivez une fonction RetourneDoubleOuMoitie de portée privée.

Elle prendra en paramètre d’entrée une valeur numérique entière inférieure à 255, nommée ValeurEntree, et retournera une valeur possiblement décimale.

Cette fonction retournera le double de la valeur ValeurEntree, si celle-ci est supérieure à 128, ou la moitié de la valeur ValeurEntree, sinon.

 Créez une macro SiSinon.

Cette macro affichera successivement la valeur retournée par RetourneDoubleOuMoitie, en lui passant la valeur 15, puis de nouveau par RetourneDoubleOuMoitie, en lui passant cette fois la valeur 129.

 Exécutez la macro SiSinon (7.5 puis 258).

Les valeurs 7.5 puis 258 apparaîtront.

Si Sinon Si

 Écrivez une fonction...