Macros-commandes VBA/Manipulation des variables
Déclaration des variables
modifierSyntaxe
modifierUne variable VB doit porter un nom commençant par une lettre et ne devant pas comporter certains caractères spéciaux :
- espace
- ! (réservé aux Single)
- # (réservé aux Double)
- % (réservé aux Integer)
- $ (réservé aux String)
- & (réservé aux Long)
- @
Chaque fois que l’on voudra utiliser une nouvelle variable, il est fortement conseillé de la déclarer dans la feuille de code pour signaler au compilateur avec quoi il travaille et quelle place allouer à la mémoire pour gérer ces variables.
Dim Nom As String
Dim Age As Integer
déclare une chaîne de caractères Nom
et un entier Age
Attention
Dim B1, B2, B3 As Boolean
déclare B1
et B2
comme variant et uniquement B3
comme booléen.
Portée
modifierUne variable VB peut avoir trois portées différentes.
- Le niveau procédure, le plus fin, qui permet de limiter l’existence de la variable à la fonction ou procédure en cours.
- Le niveau formulaire permet l'accès à la variable à toutes les procédures d’un même formulaire.
- Le niveau projet permettant d'accéder au contenu de la variable dans toute l'application.
Dim Nom As String
placé en début d'une procédure, déclare une chaîne de caractères Nom
pour la procédure courante uniquement.
Dim Nom As String
placé en début de formulaire, déclare une chaîne de caractères Nom
pour toutes les procédures de celui-ci.
Public Nom as String
placé dans un module, déclare une chaîne de caractères Nom
pour tout le projet.
Opérations possibles sur les variables
modifierAffectation
modifierPour donner une valeur à une variable, on utilise le signe =
Opérations mathématiques
modifierUsuelles
modifier- Les opérations usuelles (addition, soustraction, multiplication, division) s'écrivent en VB avec leurs symboles usuels.
a = 52
b = 8
c = a + b 'c vaut 60
d = a - b 'd vaut 44
e = a * b 'e vaut 416
f = a / b 'f vaut 6,5
- Pour le type Integer, le reste de la division euclidienne est accessible avec l'instruction Mod
- VB dispose également par défaut d'une petite bibliothèque de fonctions mathématiques standard :
Nom | Description |
---|---|
Cos | Cosinus de l'angle (en radians) |
Sin | Sinus de l'angle (en radians) |
Tan | Tangente de l'angle (en radians) |
Exp | Exponentielle (en base e) |
Log | Logarithme népérien |
Sqr | Racine carrée |
Ces fonctions retournent un résultat du type Double.
Comparer deux nombres
modifierMsgBox Application.WorksheetFunction.Min(2, 3) ' = 2 MsgBox Application.WorksheetFunction.Max(2, 3) ' = 3
Arrondir un nombre
modifierIl existe par défaut quatre fonctions pour arrondir :
Sub arrondir()
a = "5,5"
MsgBox Int(a) ' 5
MsgBox Fix(a) ' 5
MsgBox Round(a) ' 6
MsgBox Format(a, 0) ' 6
End Sub
Sub arrondir2()
a = "5,4"
MsgBox Int(a) ' 5
MsgBox Fix(a) ' 5
MsgBox Round(a) ' 5
MsgBox Format(a, 0) ' 5
End Sub
Au supérieur
modifiera = 1,33
msgbox round(a+0.5)
À l'inférieur
modifiera = 1,66
msgbox round(a-0.5)
Opérations logiques
modifierLes opérations logiques se font en temps normal sur des variables de type Boolean
.
VB connaît les principales opérations :
Not
: opérateur NONAnd
: opérateur ETOr
: opérateur OUXor
: opérateur OU exclusif
Dim a, b As Boolean
a = True
b = False
c = a And b 'c contient False
d = a Or b 'd contient True
e = a Xor b 'e contient True
f = Not a 'f contient False
Comparaison
modifierVB sait comparer :
- deux variables numériques (2 > 1).
- deux chaînes de caractères, l’ordre étant celui du codage ASCII par défaut (B > A et a > A).
En début de module, la commande OPTION COMPARE TEXT
change ce mode de comparaison des chaines et ignore la casse (a = A). De plus, "B > " et "A > B" renvoient vrai dans ce mode. Pour y comparer des chaines sans avoir à le faire caractère par caractère, il faut utiliser StrComp()
. Exemple :
StrComp("A", "B", vbBinaryCompare)
Qui donne le même résultat (un booléen faux, soit "-1") que :
OPTION COMPARE BINARY
A > B
Les opérateurs de comparaison sont les suivants :
Opérateur | Signification |
---|---|
< | Inférieur |
> | Supérieur |
<= | Inférieur ou égal |
>= | Supérieur ou égal |
= | Égal |
<> | Différent |
c1 = "minuscule"
c2 = "VisualBasic"
c3 = "Zanzibar"
b1 = c2 < c3 'b1 contient True
b2 = c1 < c3 'b2 contient False : dans l’ordre ASCII, les majuscules sont avant les minuscules
a = 12
b = 12
c = a <> b 'c contient False
c = a = b 'c contient True
Les chaines de caractères contenant des nombres ne sont pas converties automatiquement en nombre lors des comparaisons :a = "1"
MsgBox a > 2 ' True
MsgBox 1 > 2 ' False
MsgBox CInt("1") > 2 ' False
|
Opérations sur les chaînes de caractères
modifierLongueur de la chaîne
modifierLa longueur d'une chaîne de caractères est accessible grâce à l'instruction Len.
Concaténation
modifierConcaténer deux chaînes de caractères est l'opération qui consiste à les mettre bout à bout. De manière très intuitive, cette opération peut se faire en VB grâce à deux opérateurs : + et &.
Suppression des espaces latéraux
modifierVB dispose de trois fonctions permettant de s'affranchir des espaces inutiles aux extrémités des chaînes de caractères :
- LTrim$ (L comme Left), qui retire les espaces inutiles à gauche de la chaîne
- RTrim$ (R comme Right), qui retire les espaces inutiles à droite de la chaîne
- Trim$, qui retire les espaces inutiles à droite et à gauche de la chaîne
a = " abcd "
b = " efgh "
c = a + b
a1 = LTrim$(a) 'a1 contient la chaîne "abcd "
b1 = RTrim$(b) 'b1 contient la chaîne " efgh"
c1 = Trim$(c) 'c1 contient la chaîne "abcd efgh"
Changement de casse
modifierIl existe deux fonctions qui permettent d'harmoniser la casse d'une chaîne :
- LCase$ (comme Lower Case), qui permet d'obtenir la chaîne en minuscules
- UCase$ (comme Upper Case), qui permet d'obtenir la chaîne en majuscules
Extraction d'une sous-chaîne
modifierOn peut facilement extraire des sous-chaînes en VB de trois manières :
- Left$: permet d'extraire les caractères les plus à gauche de la chaîne
- Right$: permet d'extraire les caractères les plus à droite de la chaîne
- Mid$: permet d'extraire une sous-chaîne intérieure
a = "123456789"
b = Right$(a, 5) 'b contient les 5 caractères les plus à droite de a, c'est-à-dire "56789"
c = Left$(a, 2) 'c contient les 2 caractères les plus à gauche de a, c'est-à-dire "12"
d = Mid$(a, 3, 4) 'd contient 4 caractères à partir du troisième, c'est-à-dire "3456"
'Attention aux paramètres : Mid$(chaîne, départ, longueur)
Recherche d'une sous-chaîne
modifierVB permet de trouver la position de la première occurrence d'une chaîne dans une autre chaîne grâce à l'instruction InStr.
t1 = "45"
t2 = "w"
s = "123456789"
b1 = InStr(s, t1) 'b1 vaut 4 car "45" commence au quatrième caractère de s
b2 = InStr(s, t2) 'b2 vaut 0 car "w" est introuvable dans s
Valeur numérique
modifierL'instruction Val permet d'extraire un nombre présent au début d'une chaîne de caractères.
a = "23"
b = "17.5 ans"
y = "taratata"
c = Val(a) 'c vaut 23
d = Val(b) 'd vaut 17.5
z = Val(y) 'z vaut 0
Opérations sur les dates
modifierQuand on manipule des dates, pour éviter de convertir et rechercher si nous devons changer de mois le 30 ou le 31, il existe des fonctions prédéfinies[1] :
- DatePart() : extrait une partie de date (jour, heures...)
- DateAdd() : ajoute une durée.
- DateDiff() : calcule une différence entre deux dates.
Influence du typage sur le contenu des variables
modifierContrairement à d'autres langages, VB fait preuve d’un certain laxisme envers le typage des variables. Ce peut être un avantage comme un inconvénient.
Dim a As Integer
Dim b As Integer
a = 2.51
b = 2.49
Après l'exécution de ces lignes, a
contiendra en réalité 3 et b
contiendra 2.
Toutefois, cette souplesse se manifeste avec certains opérateurs et pas d'autres.
Dim s As String
Dim a As Integer
Dim b As Double
a = 14
b = 17.2
s = "a+b vaut " & (a + b) & " !"
Avec &, s contient "a+b vaut 31.2 !"
Dim s As String
Dim a As Integer
Dim b As Double
a = 14
b = 17.2
s = "a+b vaut " + (a + b) + " !"
Avec +, on obtient l'erreur d'exécution 13 : Types incompatibles
Variables publiques connues
modifierCertaines variables sont propres aux logiciels, par exemple dans Excel : xlDown, xlUp, xlToLeft, xlToRight renvoient toujours les limites de la feuille courante (respectivement en bas, haut, gauche et droite).
Références
modifier