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