Constat
On peut lire régulièrement sur les forums dédiés au VBA, des codes publiés comme ceux-ci
1 2 3 4 5
| If Range("A2").Value = 10 Then
CommandButton2.Visible = True
Else
CommandButton2.Visible = False
End If |
1 2 3 4 5
| If Sheets("NOM DE LA FEUILLE").Visible = True Then
Sheets("NOM DE LA FEUILLE").Visible = False
Else
Sheets("NOM DE LA FEUILLE").Visible = True
End If |
et celui-ci qui mérite la palme
1 2 3 4 5 6 7 8 9
| Private Sub ToggleButton1_Click()
With ToggleButton1
If .Value = True Then
Columns("J:P").Hidden = True
ElseIf .Value = False Then
Columns("J:P").Hidden = False
End If
End With
End Sub |
Rappel
Qu'est-ce qu'une variable booléenne ?
Un booléen est un type de variable à deux états (généralement notés True et False)
Attribuer une valeur booléenne à une variable ou à une propriété
On peut affecter la valeur True ou False à une variable comme par exemple Flag = True ou à une propriété, si son type le permet, comme par exemple pour masquer les colonnes J à P de la feuille nommée Accueil Worksheets("Accueil").Columns("J:P").Hidden = True
La fonction If...Then...[Else]
La fonction If à pour but de renvoyer une valeur ou d'effectuer une action si la condition est vraie et éventuellement une autre si la condition est fausse.
Sa syntaxe est If <Condition> Then <Valeur/Action si VRAI> Else <Valeur/Action si FAUX>
Tests et opérateurs logiques
Assigner la valeur True ou False directement à une variable présente un intérêt relativement limité. En revanche, il est bien plus intéressant d'effectuer un test qui renvoie l'une de ces valeurs.
Un test logique, c'est comparer deux éléments à l'aide d'un opérateur de comparaison et cette opération renverra donc True ou False.
Il existe six opérateurs de comparaison (=, <>, <, >=, >, <=)
Pour effectuer des tests plus complexes on utilisera les opérateurs And, Or, Xor
Pour inverser une valeur booléenne, on utilisera l'opérateur Not
Utiliser directement le test logique
Effectuer un test qui renvoie la valeur True ou False pour affecter la valeur d'une variable ou modifier la propriété booléenne d'un objet se révèle bien plus intéressant et plus professionnel que de passer par un If
Exemple 1
Pour masquer ou afficher les colonnes de H à O en fonction de la valeur modifiée de la cellule A2 de la feuille active, on écrira
1 2 3 4 5
| Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Address = "$A$2" Then Columns("H:O").EntireColumn.Hidden = (.Value = 10)
End With
End Sub |
ou
1 2 3 4 5
| Private Sub Worksheet_Change(ByVal Target As Range)
With Target
Columns("H:O").EntireColumn.Hidden = (.Address = "$A$2") And (.Value = 10)
End With
End Sub |
Au lieu de
1 2 3 4 5 6 7 8 9 10 11
| Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Address = "$A$2" Then
If .Value = 10 Then
Columns("H:O").EntireColumn.Hidden = True
Else
Columns("H:O").EntireColumn.Hidden = False
End If
End If
End With
End Sub |
Exemple 2
Pour afficher ou masquer une feuille en inversant la valeur booléenne de la propriété Visible de l'objet Sheet
1 2 3
| With Sheets("Parameter")
.Visible = (Not .Visible)
End With |
est préférable à
1 2 3 4 5
| If Sheets("Parameter").Visible = True Then
Sheets("Parameter").Visible = False
Else
Sheets("Parameter").Visible = True
End If |
Il peut également être intéressant de Remplacer la fonction SI par une formule logique directement dans Excel.