Un type de données peut être attribué à une variable ce qui permet de déterminer le type d'information que la variable peut stocker. Cette décision peut avoir un effet sur l'efficacité de votre code. Si aucun type de données n'est spécifié, le type par défaut est Variant.
On rappelle que pour attribuer un type à une variable, il faut faire suivre le type lors de la déclaration de variable.
Code : VB.NET | Dim ma_variable As String
|
Variant
Une variable de type Variant peut stocker tous les types de données, par exemple, du texte, des nombres, des dates ou bien encore d'autres informations. Elle peut même stocker un tableau entier. Une variable Variant peut modifier librement son type pendant l'exécution du code alors que ceci est impossible à réaliser avec un autre type de données (par exemple String).
Vous pouvez utiliser la fonction
VarType pour trouver le type de données que contient une variable Variant.
Code : VB.NET 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | Sub TestVariables()
' On déclare implicitement une variable qui est du texte.
ma_variable = "le_site_du_zéro"
'On affiche le type de la variable
MsgBox VarType(ma_variable)
'On change la valeur de la variable pour mettre un nombre
ma_variable = 4
'On affiche le nouveau type de la même variable
MsgBox VarType(ma_variable)
End Sub
|
La boite de dialogue affichera d'abord la valeur 8 puis la valeur 2.
Mais, je croyais que la fonction nous renvoyait le type de la variable ?
C'est le cas, sauf qu’au lieu de vous le donnez en toutes lettres. On vous donne un chiffre qui correspond à une type. Voilà le tableau des correspondances :
| Valeur de retour |
Type |
| 0 |
Empty |
| 1 |
Null |
| 2 |
Integer |
| 3 |
Long |
| 4 |
Single |
| 5 |
Double |
| 6 |
Currency |
| 7 |
Date/Time |
| 8 |
String |
Par la même occasion, je viens de vous présenter la liste de tous les types de variables que l'on peut renvoyer pour une variable.
Même si Variant stocke tout type de données, il n'est pas indifférent à ce qu'il contient. En effet, vous avez vu dans l'exemple précédant que Varient identifie le type de données. Ainsi, si vous essayez d'effectuer des calculs avec une variable de type Variant mais contenant du texte, une erreur apparait. Il existe une fonction pour savoir si la variable est de type numérique ou non et donc ainsi faire des calculs. Cette fonction est
IsNumeric et fonctionne comme la fonction VarType. Si la variable comprend un nombre, la fonction renvoie Vrai, sinon elle renvoie Faux.
Code : VB.NET | Sub TestNumeric()
'On déclare une variable implicitement ayant du texte
ma_variable = "zozor"
'On affiche le résultat de la fonction
MsgBox IsNumeric(ma_variable)
End Sub
|
Cet exemple affiche la valeur Faux.
Reprenons la liste des types de variables que nous avons vues dans le tableau précédent. Il y a en fait des types qui peuvent se regrouper. On va détailler ces différents types et dire à quoi ils servent.
Les types numériques
On va ici détailler les types numériques : Byte, Integer, Long, Single, Double, Currency. Tous ces types de variables permettent de stocker des nombres.
Pourquoi avoir créé autant de types sachant qu'un nombre est un nombre non ?
Il est vrai qu'on pourrait avoir un seul type pour les nombres. Mais le chiffre 1 ne prend pas la même place en mémoire que le nombre 23954959,45593. C'est pour cela que différents types ont été créés. En effet, si la mémoire monopolisée par une variable est faible, alors le programme tournera plus vite. C'est logique après tout, il aura moins de données à analyser.
Voici un tableau qui récapitule les différents types numériques (la plage représente la plage de dispersion dans laquelle les valeurs de la variable doivent être comprises) :
| Nom |
Description |
Plage |
Caractère de déclaration |
| Byte |
Contient un nombre entier (sans partie décimale = nombre après la virgule) sur 1 octet |
0 à 255 |
Aucun |
| Integer |
Contient un nombre entier sur 2 octets |
-32 768 à 32 767 |
% |
| Long |
Idem Integer sur 4 octets |
- 2 147 483 648 à 2 147 483 647 |
& |
| Single |
Contient un nombre en virgule flottant (partie décimale variable) sur 4 octets |
-3,402823E38 à 1,401298E-45 (valeurs négatives)
1,401298E-45 à 3,402823E38 (valeurs positives) |
! |
| Double |
Idem Single sur 8 octets |
-1,79769313486232E308 à -4,94065645841247E-324 (valeurs négatives)
4,94065645841247D-324 à 1,79769313486232D308 (valeurs positives) |
# |
| Currency |
Nombre sur 8 octets avec une partie décimale fixe |
-922337203685477,5808 à 922337203685477,5807 |
@ |
Oulala, c'est quoi tous ces chiffres ?
J'avoue que tous ces chiffres ne sont pas très digestes. Il faut simplement retenir que pour de petits entiers on utilise Integer ou Byte si l'on est sûr que c’est un petit nombre (comme pour l'age par exemple). Si on sait que l'entier sera très gros, on utilise Long. C'est la même chose pour Single et Double mais pour les nombres décimaux. Currency est moins souvent utilisé.
Euh, j'ai dû partir aux toilettes quand tu as expliqué le caractère de déclaration...
Non, c'est normal, je n'en ai pas parlé. J'allais y venir. Le caractère de déclaration est utilisé pour faciliter les déclarations de variable. Au lieu de mettre
As Integer, on va simplement coller le caractère % à la variable pour la déclarer comme un Integer.
Code : VB.NET | 'Ces deux lignes exécutent la même chose
Dim ma_variable%
Dim ma_variable As Integer
'D'autres exemples de déclaration de variables
Dim age As Byte
Dim annee As Integer
Dim salaire_Zidane As Long
Dim un_pourcentage As Currency
Dim une_fraction As Single
Dim une_grosse_fraction As Double
|
le caractère de déclaration permet donc de gagner du temps dans le codage, mais n'est pas très explicite. Je ne peux vous conseiller une méthode, c'est selon votre façon de programmer.
On peut déclarer plusieurs variables sur une même ligne (avec un seul Dim. Mais pour le type, il faut le spécifier à chaque fois. S'il n'est pas spécifié après chaque variable, le type Variant est appliqué aux variables sans type spécifique.
Code : VB.NET | Dim nom As String, prenom As String, age As Integer, enfants As Integer
|
Dans le tableau répertoriant les valeurs renvoyées par VarType, il n'y a pas le type Byte. Si une variable est de type Byte, la fonction renvoie 17.
Le type String
Si vous savez que votre variable ne sera que du texte, alors vous utilisez le type String. String signifie en anglais "Chaîne". C'est donc une chaîne de caractère que l'on va donner comme valeur.
Code : VB.NET
Ainsi, vous pouvez utiliser les fonctions sur les chaînes de caractères à ces variables.
Par défaut, la longueur de la chaîne de caractère est variable. On peut alors, pour économiser de la mémoire, fixer la longueur de la chaîne à un maximum. C'est au moment de la déclaration de variable que l'on effectue cette opération de cette façon :
Code : VB.NET | Dim du_texte As String * 50
|
On utilise l'étoile (le signe multiplier informatique) suivie du nombre de caractères maximum. Dans notre exemple, la chaîne ne pourra dépasser 50 caractères.
Si la chaîne est inférieure au maximum, elle est comblée avec des espaces. A l'inverse, si elle est trop longue, elle est coupée après le 50ème caractère et le reste est perdu.
Il existe aussi un caractère de déclaration pour ce type de variable qui est le dollar $.
A titre indicatif, une chaîne de longueur fixe peut comporter jusqu'à 65 500 caractères alors qu'une chaîne de longueur variable peut comporter jusqu'à 2 000 000 de caractères.
Les types Empty et Null
Vous avez vu dans le tableau des différents types qu'il reste encore des types inconnus. Nous allons en analyser deux de plus ici, il s'agit de Empty et Null. Le premier cité est attribué à une variable ne contenant rien. C'est le cas d'une variable qui est déclarée et à laquelle n'est affectée aucune valeur. On peut vérifier si une variable contient quelque chose ou si elle a été définie avec un type grâce à la fonction IsEmpty.
Code : VB.NET 1
2
3
4
5
6
7
8
9
10
11
12 | ' On déclare une variable sans type donc un Variant
Dim ma_variable_vide
' On déclare une variable de type String (du texte)
Dim mon_texte As String
' On n'affecte aucune valeur ni à l'une ni à l'autre variable
' On affiche le type des deux variables
MsgBox VarType(ma_variable_vide)
MsgBox VarType(mon_texte)
|
Dans un premier temps, on observe que la variable est vide donc s'affiche 0. Dans le second temps, la variable a beau être vide, mais elle est déclarée comme une chaîne de caractère, s'affiche alors 8 pour String.
Il ne faut pas confondre une valeur vide à une valeur Null. C'est le deuxième type de variable expliqué dans ce point. Une variable Varient peut contenir une valeur spéciale appelée Null. La valeur Null est utilisée pour indiquer des données inconnues ou manquantes. Les variables ne sont pas initialisées à Null à moins que vous n'écriviez du code pour ce faire. Si vous n'utilisez pas Null dans votre application, vous n'avez pas à vous soucier de la valeur Null.
La valeur Null n'est pas égale à 0.
Il existe une fonction pour savoir si une variable est de type Null ou non, il s'agit de la fonction IsNull.
Code : VB.NET | Sub TestNull()
' On crée une variable à laquelle on attribue la valeur Null (sans guillemet)
ma_variable = Null
' On teste le type de la variable
MsgBox IsNull(ma_variable)
End Sub
|
Voilà deux types de variables en plus dans votre besace.
Le type Date et Heure
On ne peut définir une variable avec le type Date dès la déclaration. Elle se "transforme" en type Date une fois que la valeur est égale à une date. Les dates et heures sont stockées sous forment de nombres en virgule flottante. La partie entière représente le nombre de jours écoulés depuis le 31 décembre 1899. La partie décimale représente les heures, minute et secondes exprimées comme une portion de 24 heures (0,5 = 12 heures).
Il existe une fonction permettant de savoir si la valeur d'une variable est une date. C'est la fonction IsDate.
Code : VB.NET | la_date = "23-07-2010"
MsgBox IsDate(la_date)
|
Ce code affiche Vrai.
La date peut être renseignée avec différents séparateurs. Ici j'ai utilisé les tirets, mais on peut utiliser les points ou les slashs. L'année peut comporter que deux chiffres. Il faut faire attention à la configuration du format de date qui peut faire varier la reconnaissance de date. JJ-MM-AAAA ou MM-JJ-AAAA.
Le type Booléens
Vous savez ce qu'est un booléen ? Ce mot un peu barbare désigne en fait un type de variable qui prend 2 valeurs différentes : Vrai et Faux. L'avantage est que ce type de variable ne demande que 2 octets pour être stocké et très souvent utilisé en programmation. VBA utilise l'anglais, la variable de type booléen prends alors les valeurs True or False. Par contre, à l'affiche dans une boite de dialogue, Vrai et Faux sont affichés.
Code : VB.NET | ' Une variable qui vaut Vrai
ma_variable = True
' Une variable qui vaut Faux
ma_variable = False
|
La fonction VarType renvoie 11 quand la variable est un booléen.
Le type Objet
Ce sont des variables faisant référence à des objets. Ne me dites pas que vous avez oublié ce que c'est... Ce sont les classeurs, les feuilles, les cellules ou même l'application. On a vu dans le cours qu'avec la fonction With... End With on peut faire les faignants et ne pas tous réécrire. Et bien là, on va pouvoir mettre des objets en tant que variable. Ce type de variable occupe 4 octets. L'instruction
Set permet d'attribuer une référence d'objet à la variable. Par contre, ce type de variable prend de la place et on libère donc la mémoire grâce à Nothing (cf. exemple ci-dessous).
Les exemples sont plus explicites que le texte :
Code : VB.NET 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | Sub test()
' On crée une variable qui a pour type une feuille.
' De ce fait, on peut lui attribuer une valeur spécifique : une feuille d'un classeur.
Dim Ws As Worksheet
' On attribue la 1ere feuille du classeur dans la variable grâce à Set
Set Ws = Sheets(1)
' On affiche le nom de la première feuille
MsgBox Ws.Name
' On libère ensuite la mémoire
Set Ws = Nothing
End Sub
|
Ceci est réalisable avec une feuille ou un classeur ou une cellule. En combinant tout ça, on obtient ceci :
Code : VB.NET 1
2
3
4
5
6
7
8
9
10
11
12
13 | ' On attribue des variables : c comme classeur pour Workbook.
' f comme feuille pour Worksheet.
Dim c As Workbook, f As Worksheet
' On associe à c le premier classeur
Set c = Workbooks("classeur1")
' On associe à f la feuille 1 du classeur 1
Set f = c.Worksheets("feuil1")
' On affiche la valeur de la première cellule de la première feuille,
' du premier classeur
MsgBox f.Range("A1").Value
|
On aurait pu aussi associer Range("A1") à une variable pour raccourcir le code si on avait à l'utiliser souvent. Ce code est utile et remplace ce code :
Code : VB.NET | Workbooks("classeur1").Worksheets("feuil1").Range("A1").Value
|
Ce que nous avons fait avant peut paraitre plus long, mais très pratique par la suite, en effet, la simple lettre f remplace tout ce code :
Code : VB.NET | Workbooks("classeur1").Worksheets("feuil1")
|