VBA Variables 2

Types de données
dans les variables

Il va être question ici de ce qu'il est possible de mettre dans une variable et comment le déclarer en fonction du contenu attendu.
Je mets en évidence sur fond jaune la taille réservée en mémoire pour chaque type afin de  "montrer" que ce qui n'est pas déclaré étant "variant" pèse bien plus lourd in fine que la déclaration ad hoc.
Comme il a été vu précédemment, ne pas déclarer une variable est toléré par l'IDE, mais revient à la déclarer implicitement en "variant" ce qui ressemble fort à une fausse bonne idée.
En fin de page, je vous donne une raison supplémentaire de déclarer les variables, Cliquez ICI pour vous  rendre directement.

Object
(je mets ce type en premier, car il concerne particulièrement notre sujet : AutoCAD)
Type de données représentant toute référence Object (les entités AutoCAD sont des objets)
Les variables Object sont stockées sous forme d'adresses codées sur 32 bits (4 octets). L'instruction Set permet d'attribuer une référence d'objet à la variable.
Ce type est intéressant dans le cas d'AutoCAD pour les entités graphiques et avoir accès à leurs propriétés :
Dim MaLigne As AcadLine 
'Création de la ligne en Espace Objet
Set MaLigne = ThisDrawing.ModelSpace.AddLine(PtDep, PtFin)

Byte
Les variables Byte sont utilisées pour stocker des nombres entiers positifs compris entre 0 et 255.
Elles sont stockées sous la forme de nombres uniques codés sur 8 bits (1 octet), sans signe.

Boolean
Données pouvant prendre exclusivement les valeurs True et False.
Elles sont stockées sous la forme de nombres codés sur 16 bits (2 octets).

Integer
Données contenant des nombres entiers stockés, (2 octets), compris entre -32 768 et 32 767.
Remarque : Si vous utilisez  Dim MonNombre As Integer", alors que la valeur est décimale
dans le cas de MonNombre =10.29, la valeur renvoyée sera égale à 10.

Long
Nombre entier codé sur 4 octets (32 bits) dont la valeur est comprise entre -2 147 483 648 et 2 147 483 647.

Currency
Données dont la plage de valeurs s'étend de -922 337 203 685 477.5808 à 922 337 203 685 477.5807.
Les variables de type Currency sont stockées sous la forme de nombres de 64 bits (8 octets).
Ce type de données est utilisé dans les calculs monétaires ou dans les calculs à virgule fixe pour lesquels une grande précision est requise.

Single
Type de données qui regroupe des variables à virgule flottante en simple précision sous forme de nombres à virgule flottante codés sur 32 bits (4 octets), dont la valeur est comprise entre -3,402823E38 et -1,401298E-45 pour les valeurs négatives, et entre 1,401298E-45 et 3,402823E38 pour les valeurs positives.

Double
Type de données stockant sur 64 bits les nombres à virgule flottante en double précision compris entre -1,79769313486231E308 et -4,94065645841247E-324 pour les valeurs négatives, et entre 4,94065645841247E-324 et 1,79769313486232E308 pour les valeurs positives (8 octets).

Date
Type de données utilisé pour stocker les dates et les heures sous la forme d'un nombre réel codé sur 64 bits (8 octets).
Dans Microsoft Windows, la plage de dates valides s'étend du 1er janvier 100 au 31 décembre 9999 après J.C. (quel sera le numéro de version AutoCAD à cette époque lointaine ?).

String
Type de données composé d'une séquence de caractères contigus interprétés en tant que caractères et non en tant que valeurs numériques.
Une donnée de type String peut inclure lettres, nombres, espaces et signes de ponctuation.
Le type de données String peut stocker des chaînes de longueur fixe dont la longueur est comprise entre 0 et environ 63 Ko de caractères et des chaînes dynamiques dont la longueur est comprise entre zéro et environ deux milliards de caractères (longueur de la chaine)

Variant
Type de données particulier pouvant contenir des données numériques, des chaînes ou des dates, des types définis par l'utilisateur ainsi que les valeurs spéciales Empty et Null.
Le type de données Variant est doté d'une taille de stockage numérique de 16 octets et peut contenir la même plage de données que le type Decimal, ou d'une taille de stockage de caractère de 22 octets (plus la longueur de la chaîne). Dans ce dernier cas, il peut stocker tout texte.


Il est tout à fait possible de déclarer des variables sur une seule ligne, il suffit de les séparer par une virgule, mais attention à donner à chacune son type.
Exemples :
Dim Var1 As String , Var2 As String , Var3 As String est correct les trois variables sont déclarées en string (chaine de caractères)
Dim Var1 , Var2 , Var3 As String est incorrect, car Var1 et Var2 seront de type Variant et non pas String, seule Var3 est typée en string par cette ligne de code.


Certaines personnes utilisent un préfixe dans le nom des variables, ce préfixe ayant pour utilité de rappeler le type déclaré.
En prenant l'exemple d'une variable déclarée en String et qui se nommerait Ma_Varaible, cela donnerait : strMa_Variable, avec un integer ce serait intMa_Variable.
Je ne suis pas utilisateur de cette façon de faire, toutefois j'en comprends l'utilité et vous êtes libres de l'adopter si vous l'estimez nécessaire. Je souhaitais le préciser, car en lisant les exemples, c'est souvent cette notation qui est utilisée.


Deux autres bonnes raisons de déclarer les variables :
(toujours préférer l'explicite à l'implicite)

  • Lorsque qu'une variable est explicitement et correctement déclarée elle sera prise en compte par l'Intellisense de l'IDE de VBA. Ce qui signifie que lors de la frappe d'une variable dès que vous taper les premières lettres il suffit de taper Ctrl+Barre Espace et le mot se complète automatiquement vous préservant de toute erreur de frappe.
  • Lorsque qu'une variable est explicitement et correctement déclarée et que Option Explicit est précisé en première ligne, si vous faites une faute de frappe dans votre code, (je vous promets que ça peut arriver), au lancement du programme vous serez illico alerté d'un souci dans une variable, ce qui pourrait rendre le code non fonctionnel et pas simple à déboguer le cas échéant.

Voici un enregistrement explicatif, du moins c'est dans cet esprit que je l'ai fait ...


Création le deux mai 2021