Expressions et assignations

Sur cette page

Instruction d'assignation

Expressions

Opérateurs

Opérateur Like

Parenthèses

Exemples

Sommaire

Fichier exemple

Tests et branchements

Boucles

Gestion d'erreur

Collections et tableaux

Dialogues et formulaires

Objets et événements Excel

Conseils de programmation

Liste d'instructions

Instruction d'assignation

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ù:

  • Let Le nom de l'instruction. Let est pratiquement toujours omis.
  • nom Nom de la variable VBA ou de la propriété d'objet. nom ne doit pas désigner un objet.
  • expression Une expression VBA dont le résultat sera attribué à nom. Expression ne doit pas être un objet.

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}
  • nom Nom de la variable ou propriété d'objet qui contiendra l'objet.
  • New Crée une nouvelle instance de la classe identifiée par expression.
  • expression Représentant le nom d'un objet, d'une autre variable déclarée du même type objet ou d'une fonction ou méthode renvoyant un objet du même type ou d'une classe d'objets.
  • Nothing Efface la variable nom et libère les ressources qui étaient associées.

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

Expressions

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()

Dim sNombre As String

sNombre = 22

If IsNumeric(sNombre) Then
    sNombre = CCur(sNombre) + 2
End If

End Sub

Sub exemple3()

Dim cNombre As Currency

cNombre = 22

cNombre = cNombre + 2

End Sub

ou utilisez les fonctions de conversion.

Opérateurs

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

 

Opérateur Like

 variable Like expression

  • variable est le nom d'une variable de type String
  • expression est une expression de type String contenant un masque de comparaison.

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.

 

Parenthèses

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.

Fonctions

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.

 

Exemples

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.

Sommaire

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.

Fichier exemples

Le fichier Excel Tutoriel Exemples Expressions.xlsm contient les exemples présentés dans la présente section.

 

Suite: Tests