Il y a plusieurs façons d'assigner une valeur à une variable. Les plus utilisées en VBA sont les instructions d'assignation Let et Set:
[Let] nom = expression où:
Cette instruction d'assignation évalue expression et assigne la valeur résultante à la variable nom en faisant les conversions nécessaires selon les types des variables utilisées dans expression. Donc la valeur de l'expression est COPIÉE dans nom. Attention au symbole = qui n'a pas le même sens entre nom et expression et dans expression. |
Set nom = {[New] expression |
Nothing}
Si New est absent, cette instruction d'assignation évalue expression et donne le nom nom à l'objet résultant. Donc nom et expression désignent LE MÊME objet. Si New est présent, cette instruction crée un nouvel objet de la classe d'expression nommé nom. Donc nom et expression désignent deux objets DIFFÉRENTS. |
Il y a 2 grandes différences entre Let et Set:
- Let (assignation VBA) copie la valeur de l'expression.
- Dans Let, la valeur de l'expression doit être d'un type VBA.
- Set (assignation objet) donne un nom à l'expression. Ce n'est pas une copie.
- Dans Set, la valeur de l'expression doit être un objet.
D'autres instructions peuvent aussi assigner une valeur à une variable:
For, InputBox, Input, Read, Get, ...
Comme dans tout langage de programmation, les expressions VBA sont composées de variables, de propriétés d'objet, de constantes et/ou de fonctions, liées par des opérateurs et des parenthèses.
Tout ce que VBA peut évaluer est une expression et peut faire partie d'une expression.
Les règles sont presque identiques à celles des formules Excel.
Le résultat de l'évaluation d'une expression est la valeur de l'expression, dont
le type dépend des éléments composant
l'expression.
La valeur d'une expression peut être Null.
ATTENTION: lorsqu'on mélange les types à l'intérieur d'une expression, VBA convertit automatiquement les valeurs dans les types qui SEMBLENT les plus appropriés. Si la plupart du temps, le résultat est correct, il ne l'est pas toujours.
VBA ne détecte aucune erreur dans le programme à droite et il s'exécute correctement.
|
Sub exemple1() Dim sNombre As String sNombre = 22 sNombre = sNombre + 2 End Sub |
VBA ne détecte aucune erreur dans le programme à droite mais une erreur
"Incompatibilité de type" se produit à l'exécution
|
Sub exemple2() Dim sNombre As String sNombre = "Ving deux" sNombre = sNombre + 2 End Sub |
Il est beaucoup plus prudent de vous assurer que les types des éléments de l'expression soient explicites.
Sub exemple()
End Sub |
Sub exemple3()
End Sub |
ou utilisez les fonctions de conversion.
Dans les expressions VBA, vous pouvez utiliser les opérateurs suivants:
Opérateurs arithmétiques
Ces opérateurs combinent deux expressions numériques et retournent une
expression numérique.
+ | Addition |
– | Soustraction |
* | Multiplication |
/ | Division |
\ | Division entière: retourne un entier |
MOD | Reste de division |
^ | Exposant |
Opérateurs de comparaison
Ces opérateurs comparent deux expressions numériques et retournent
Vrai ou Faux (type Boolean).
= | Égal à |
> | Supérieur à |
< | Inférieur à |
>= | Supérieur ou égal à |
<= | Inférieur ou égal à |
<> | Différent de |
Is | Nature d'objet |
Opérateurs de concaténation de texte
Ces opérateurs comparent deux expressions
String et retournent une expression
String.
& combiner (concaténer) deux Strings
+ combiner (concaténer) deux Strings ou en additionne les valeurs.
L'utilisation de + pour concaténer deux expressions
crée une confusion
inacceptable et doit être évitée à tout prix.
Opérateurs logiques
Ces opérateurs retournent une expression
Boolean.
Pour tester si une expression vaut Null, utiliser la fonction
IsNull().
Si une des expressions n'est pas de type Boolean, VBA convertit l'expression de
la façon suivante:
0 donne Faux, et toute autre valeur donne Vrai (Not Faux).
And |
(Vrai AND Vrai) donne Vrai (Vrai AND Faux) donne Faux (Vrai AND Null) donne Null (Faux AND Vrai ) donne Faux (Faux AND Faux) donne Faux (Faux AND Null) donne Faux (Null AND Vrai ) donne Null (Null AND Faux) donne Faux (Null AND Null) donne Null |
Or |
(Vrai OR Vrai) donne Vrai (Vrai OR Faux) donne Vrai (Vrai OR Null) donne Vrai (Faux OR Vrai ) donne Vrai (Faux OR Faux) donne Faux (Faux OR Null) donne Null (Null OR Vrai ) donne Vrai (Null OR Faux) donne Null (Null OR Null) donne Null |
Xor |
(Vrai XOR Vrai) donne Faux (Vrai XOR Faux) donne Vrai (Vrai XOR Null) donne Null (Faux XOR Vrai ) donne Vrai (Faux XOR Faux) donne Faux (Faux XOR Null) donne Null (Null XOR Vrai ) donne Null (Null XOR Faux) donne Null (Null XOR Null) donne Null |
Not |
(NOT Vrai) donne Faux (NOT Faux) donne Vrai (NOT Null) donne Null IsNull(Null) donne Vrai NOT IsNull(Null) donne Faux |
Eqv | Voir l'aide VBA |
Imp | Voir l'aide VBA |
ATTENTION: Contrairement à ce qu'on peut penser, (NOT Null) retourne
Null.
Pour tester si une expression vaut Null, on utilise le plus souvent
IF NOT IsNull(expression) THEN ...
variable Like
expression Où
La comparaison est évaluéa à Vrai si la valeur String à gauche de Like correspond au masque à droite. |
Like permet de vérifier si la valeur d'une variable correspond à un masque.
Les principaux caractères passe-partout reconnus dans le masque sont:
? qui remplace un caractère
* qui remplace 0, un ou pulsieurs caractères
# qui remplace un chiffre
Exemples:
Si sTexte contient | Vaut | |
Marie | sTexte Like "M*" | Vrai |
Marie | sTexte Like "M?" | Faux |
J1K 2R1 | sTexte Like "?#? #?#" | Vrai |
J1K 2R1 | sTexte Like "?#?#?#" | Faux |
123 456 | sTexte Like "?#? #?#" | Vrai |
Il existe plusieurs autres caracéristiques de l'opérateur Like qu'il serait trop long de décrire ici. Consulter au besoin l'aide Microsoft VBA sur les sujets Like et Option compare.
Dès qu'une opération comporte plus d'un opérateur, VBA applique l'ordre de priorioté suivant :
^
- (négation)
*, /
\
Mod
+,- (addition, soustraction)
&
=
<>
<
>,
<+
>=
Not
And
Or
Xor
Eqv
Imp
Pour éviter toute confusion, il est préférable d'utiliser des parenthèse lorsqu'il y a plus d'un opérateur dans une expression, même si l'ordre de priorité est respecté. Ici, la prudence ne coûte rien.
VBA permet l'utilisation de fonctions dans les expressions VBA.
On peut utiliser des fonctions VBA (souvent semblables à des fonctions Excel) ou même des fonctions Excel.
Voici quelques fonctions VBA fréquemment utilisées:
Voici comment utiliser la fonction Excel Max dans VBA:
WorksheetFunction.Max(Un, Deux)
Notez que l'exécution d'une fonction Excel à partir de VBA est peu performante et qu'il est nettement préférable d'utiliser la fonction VBA équivalente lorsqu'elle existe.
S'il faut utiliser une fonction Excel, il est préférable de l'utiliser dans une cellule Excel et d'aller lire le résultat dans la cellule.
Soit inscrire
=Max(A1;B1)
dans une cellule (disons C1). On peut alors utiliser Range("C1") pour avoir le maximum de A1 et B1.
Assignation | Si | cRésultat vaut |
cRésultat = 3 | 3 | |
cRésultat = 3 + 4 | 7 | |
cRésultat = A + 4 | A contient 3 | 7 |
cRésultat = Résultat + 1 | cRésultat contient 7 | 8 |
cRésultat = A = 3 | A contient 3 | -1 (équivalent à vrai) |
cRésultat = A = 4 | A contient 4 | 0 (équivalent à vrai) |
cRésultat = 2 + 3 * 5 | 17 | |
cRésultat = (2 + 3) * 5 | 25 |
Le fichier Exemples Expressions.xlsm contient ces exemples et plusieurs autres, dans le module VBA Expressions.
Les expressions VBA suivent sensiblement les mêmes règles que Excel, en utilisant des variables VBA plutôt que des cellules.
Il existe un bon nombre d'opérateurs et de fonctions qu'on peut utiliser dans une expression Excel.
Dès qu'on a plus d'un opérateur dans une expression, mieux vaut utiliser des parenthèses.
L'instruction d'assignation régulière évalue l'expression à droite du signe = puis en copie la valeur dans la variable à gauche. Exemple: cRésultat = A copie la valeur de A dans cRésultat.
L'instruction d'assignation SET identifie l'objet résultant de l'évaluation de l'expression à droite du signe = puis lui assigne le nom à gauche. Exemple: Set FeuilleDestination = Worksheets("Documentation") assigne la variable VBA FeuilleDestination à la feuille Documentation du classeur. Il n'y a pas de copie.
Le fichier Excel Tutoriel Exemples Expressions.xlsm contient les exemples présentés dans la présente section.