# Macros-commandes VBA/Les types en VB
## Différents types

Programmer, c’est avant tout manipuler des variables, qui peuvent être de plusieurs types selon les données que l’on stocke dedans. Il est primordial de les avoir à l'esprit, car par exemple si on compare un nombre et un texte (ex : 1 < "2"), le résultat pourra être le contraire de celui attendu.
Il existe ainsi en VB de nombreux types, dont les plus courants sont résumés ci-dessous :
Types VB les plus couramment rencontrés :
| Type | Description | Valeurs possibles | Encombrement mémoire | Fonction de conversion |
| Byte | Octet | 0 à 255 | 1 o | CByte |
| Boolean | Booléen | True (vrai, -1) ou False (faux, 0) | 2 o | CBool |
| Integer | Entier | −32 768 (soit $-2^{15}$) à 32 767 ($2^{15}-1$) | 2 o | CInt |
| Long | Entier long | −2 147 483 648 (soit $-2^{31}$) à 2 147 483 647 ($2^{31}-1$) | 4 o | CLng |
| Single | Variable à virgule flottante : simple précision | de -3.402823 $10^{38}$ à -1.401298 $10^{-45}$ pour les nombres négatifs de 1.401298 $10^{-45}$ à 3.402823 $10^{38}$ pour les nombres positifs | 4 o | CSng |
| Double | Variable à virgule flottante : double précision | de -1.79769313486232 $10^{308}$ à -4.94065645841247 $10^{-324}$ pour les nombres négatifs de 4.94065645841247 $10^{-324}$ à 1.79769313486232 $10^{308}$ pour les nombres positifs | 8 o | CDbl |
| String | Chaîne de caractères (texte unicode) | * | < 255 o | Cstr |
| Currency | Monnaie | | 8 o | CCur |
| Date | Date du calendrier grégorien | Par défaut la commande Now renvoie la date actuelle sous la forme 22/06/2012 17:23:58. Mais il est modifiable avec la commande Format(Now, "yyy-mm-dd"). | 8 o | CDate |
| Decimal | Flottant signé | | 14 o | CDec |
| Variant | Ce type permet de s'adapter à n’importe quel autre type, mais au prix d'une consommation de mémoire importante. Il s'agit du type par défaut des variables non déclarées. | | 16 o | CVar, CVErr |

## Détermination des types

Pour déterminer le type d'une variable, il existe la fonction TypeName :
On peut aussi utiliser des fonctions booléennes de test :
| Fonction | VB 6 | VBA | VBScript | VB .NET | T-SQL |
| IsArray | Oui | Oui | Oui | Oui | Non |
| IsDate | Oui | Oui | Oui | Oui | Oui |
| IsDBNull | Non | Non | Non | Oui | Non |
| IsEmpty | Oui | Oui | Oui | Non | Non |
| IsError | Oui | Oui | Non | Oui | Non |
| IsMissing | Oui | Oui | Non | Non | Non |
| IsNothing | Non | Non | Non | Oui | Non |
| IsNull | Oui | Oui | Oui | Non | Oui |
| IsNumeric | Oui | Oui | Oui | Oui | Oui |
| IsObject | Oui | Oui | Oui | Non | Non |
| IsReference | Non | Non | Non | Oui | Non |

## Déclaration des types

Les types des variables sont donc déclarés grâce à la commande dim, par exemple pour stocker un nom :

### Tableaux

Les tableaux se déclarent par le type de leur contenu :
Tableau à deux dimensions :
Tableau dynamique :
* Utiliser ReDim au lieu du Dim pour redimensionner le tableau, afin par exemple que le UBound ne considère que le nombre de champs remplis (et non celui déclaré au début).
* Idem pour ReDim Preserve qui conserve le contenu du tableau redimensionné.
Voir aussi les tableaux Excel.

#### Recherches

Pour rechercher dans un tableau :

#### Test si nul

Un tableau déclaré mais non utilisé ne renverra pas une taille zéro avec UBound, mais une erreur disant que l’indice n'appartient pas à la sélection. Voici donc l’astuce pour vérifier qu'un tableau est vierge :

### Fonctions

Les fonctions aussi peuvent être de plusieurs types, et sont déclarées ainsi :
Celle-ci ne renvoie rien, c’est l'équivalent du type void en C et en Java.
Ou encore privée avec un paramètre obligatoire :
Publique avec un paramètre facultatif :
Pour se servir de la fonction comme d'une variable :

#### Remarques

* Cela peut aussi servir à créer des fonctions pour les formules Excel : une cellule peut contenir =NomDeFonction si la fonction est placée dans un module et contient la ligne Application.Volatile.
* Si la fonction est placée dans ThisWorkbook, et s’appelle Sub Auto_open ou Sub ThisWorkbook_Open, elle se lance automatiquement à l'ouverture du fichier qui la contient.
* Si elle s’appelle Auto_close, elle s'exécutera à la fermeture du fichier.

### POO

En programmation orientée objets, les procédures correspondent aux classes, et sont stockées dans des fichiers .cls.
* La déclaration des objets se fait ainsi : Dim NomDeLaVariable As New NomDeLaClasse.
* Les classes filles spécifient leur classe mère avec le code Implements NomDeLaClasseMere.
On y accède avec MaClasse.Nom.

#### Collections

L'avantage des collections sur les tableaux est que l’on peut incrémenter la liste à la suite ou insérer une ligne à un endroit, sans connaitre ou modifier manuellement sa taille.
L'exemple suivant affiche "ligne 1", ligne 2", "ligne 3" (sans tenir compte des autres lignes supprimées) :