Comparaison
En programmation, il est courant de devoir tester une variable ou de la comparer à une autre, et en fonction du résultat de la comparaison, réaliser telle opération ou telle autre.
Tout d'abord il va falloir comparer deux (ou plus) variables.
Six opérateurs de comparaison à disposition :
= | Est égal à |
<> | Est différent de |
< | Est plus petit que |
<= | Est plus petit ou égal à |
> | Est plus grand que |
>= | Est plus grand ou égal à |
La syntaxe s'applique de gauche à droite :
var1 < var2 renvoie "vrai" si le contenu de var1 est strictement inférieur au contenu de var2
Idem pour les autres opérateurs, c'est dans le sens de lecture gauche droite.
Il est possible de rajouter des conditions à ces opérateurs en les combinant avec
And | Et | [condition1] AND [condition2] | Les deux conditions doivent être vraies |
Or | Ou | [condition1] OR [condition2] | Au moins une des deux conditions doit être vraie |
Not | Faux | NOT [condition] | La condition doit être fausse |
XOR |
Ou |
[condition1]XOR [condition2] | Si une seule des conditions est vraie |
Lors de ces comparaisons VBA renverra "true" ou "false", il va sans dire que c'est si c'est bien une valeur "true" qui est renvoyée c'est que la "condition" est avérée.
Si on compare des nombres, c’est assez simple de comparer, avec les string (chaînes de caractères) c'est moins évident car "ABC" est égal à "ABC" mais différent de "abc". J'en parlerai plus précisément dans la page dédiée "STRING".
L’opérateur Not peut être utilisé pour inverser une valeur booléenne retournée par un opérateur ou une fonction.
Une valeur "True" est retournée comme "False", et bien sûr une valeur "False" est retournée comme "True". C'est le même principe qu'une double négation,
par exemple je ne suis pas absent, ce qui implique que je suis présent.
Par exemple : If not a = b Then se comprend comme If a <> b Then
Comparer des objets :
L’opérateur "=" n’est pas idéal pour comparer si deux objets sont identiques.
Pour comparer deux objets, il vous faudra utiliser l’opérateur Is.
La syntaxe pour cet opérateur est la même que pour l’utilisation de l’opérateur "=".
La valeur "True" est retournée si les deux objets sont la même "chose", sont identiques, sinon bien évidemment, ce sera "False" qui sera retourné.
Dans l'exemple suivant, il est testé si le calque courant est le nouveau calque qui vient d'être créé, une MsgBox l'affiche à l'écran, ensuite le nouveau calque devient le calque courant et j'affiche même s'il est imprimable.
Vous noterez que cette vérification(imprimable) est simplifiée, je ne mets pas :
If objCalqueCourant.Plottable = true Then, mais simplement
If objCalqueCourant.Plottable Then, car le "if" renvoie "True" sir la propriété est à "True", donc j'évite la redondance.
Le choix d'afficher une MsgBox n'est que pour cet exemple, car si on ne l'affiche pas le programme fait la même chose, à savoir passer le nouveau calque en calque courant.
Sub testCalque()
' obtention du calque courant
Dim objCalqueCourant As AcadLayer
Set objCalqueCourant = ThisDrawing.ActiveLayer
' Creation d'un nouveau calque
Dim objNouveauCalque As AcadLayer
Set objNouveauCalque = ThisDrawing.Layers.Add("Nouveau Calque par VBA")
'renvoie true si les objets objCalqueCourant et objNouveauCalque sont identiques
If objCalqueCourant Is ThisDrawing.ActiveLayer Then
MsgBox "le nouveau calque n'est pas le calque courant"
End If
ThisDrawing.ActiveLayer = objNouveauCalque
Set objCalqueCourant = ThisDrawing.ActiveLayer
If objCalqueCourant Is ThisDrawing.ActiveLayer Then
MsgBox "le nouveau calque est maintenant le calque courant"
End If
If objCalqueCourant.Plottable Then
MsgBox " et ce calque est imprimable"
End If
End Sub
Création le 24 mai 2021,
mise à jour le 26mai 2021