# Macros-commandes VBA/Architecture
## Introduction

Le langage VBA manipule différents concepts : des variables, des procédures, des fonctions, des affectations, des instructions séquentielles, des conditions, des boucles... Ces concepts sont représentés dans le code par de simples lignes de texte :
* les procédures et fonctions organisent les objets sur lesquels le travail repose ;
* les variables précisent les objets sur lesquels le travail repose ;
* les instructions animent les objets sur lesquels le travail repose ;
* les conditions testent les objets sur lesquels le travail repose ;
* les boucles automatisent le travail.

## Structures de base
### Les procédures

Définition : une procédure effectue un traitement (exécute une série d'instructions représentée par des lignes).
Structure :
Exemple :
* Appel de la procédure : afficherMessageBonjour => Résultat affiché à l’écran : Bonjour à tous !

### Les fonctions

Définition : une fonction effectue un traitement (exécute une série d'instructions) et de plus retourne une valeur typée à la fin de ce traitement, cette valeur pouvant être exploitée par une autre procédure, fonction ou application hôte
Structure :
Exemple :
* Appel de la fonction : monCarre = renvoieUniquementUnCarre(10) => Résultat : la variable monCarre prend la valeur 100

### Les variables

* Définition : les variables sont des boites nommées de stockage de valeurs qui évolueront au fur et à mesure que le programme se déroule.
* Déclaration : pour déclarer une variable, on écrit : DIM maVariable AS type où type précise l'objectif d'utilisation de la variable (INTEGER pour un nombre, STRING pour un texte, DATE pour une date...).
Une variable est une sorte de boîte qui va contenir une valeur. Elle peut être utilisée à tout moment en fonction de la portée que l’on souhaite lui attribuer. Il existe différents types de portée des variables, nous en retiendrons deux :
* Une variable globale est une variable que l’on peut utiliser dans tous les modules.
* Une variable locale est une variable déclarée dans une procédure d'un module.

#### Déclarer une variable

La déclaration d'une variable n’est pas obligatoire, mais elle est vivement recommandée.
Exemple ==> Dim monAge As Integer
* Dim : instruction de déclaration de la variable ;
* monAge : nom de la variable ;
* As: déclaration du type de la variable ;
* Integer : type de la variable choisi.

#### Nommer une variable

Le nom des variables doit :
* commencer par un caractère alphabétique ;
* ne pas excéder 255 caractères ;
* ne pas contenir de caractères spéciaux (le caractère underscore _ est accepté).
Exemple ==> Dim LeçonVBA As String.

#### Typer une variable

| Type de donnée | Plage |
| Byte (Numérique) | Nombre entier de 0 à 255. |
| Integer (Numérique) | Nombre entier de -32 768 à 32 767. |
| Long (Numérique) | Nombre entier de - 2 147 483 648 à 2 147 483 647. |
| Currency (Numérique) | Nombre à décimale fixe de -922 337 203 685 477.5808 à 922 337 203 685 477.5807. |
| Single (Numérique) | Nombre à virgule flottante de -3.402823E38 à 3.402823E38. |
| Double (Numérique) | Nombre à virgule flottante de -1.79769313486232D308 à 1.79769313486232D308. |
| String (Texte) | Texte. |
| Date (Date) | Date et heure. |
| Boolean | True (vrai) ou False (faux). |
| Object | Objet Microsoft. |
| Variant | Tout type de données (type par défaut si la variable n’est pas déclarée). |
Exemple ==> Dim monAge As Integer (permet l'affectation monAge = 22, interdit l'affectation monAge = "MOI" Exemple ==> Dim monNom as String (permet l'affectation monNom = "MOI")

### Les opérateurs

Les opérateurs sont, en informatique (comme en mathématiques ou en pratiques EXCEL) des outils identifiés par des symboles permettant des calculs ou des comparaisons entre des opérandes (appelés variables en VBA). Voici les différents opérateurs de VBA :
| Opérateurs | Symboles | Utilités |
| Relationnels | "=,>,<,>=,<= , <>" | permettent d’effectuer des tests et de déclencher un traitement en fonction du résultat. Par exemple : si maDate >"20/01/2020" alors je fais quelque chose… sinon je fais autre chose… finsi (fin de comparaison) |
| Arithmétiques | "+,-,*,/,mod" | permettent d’exécuter des opérations de calcul. Par exemple : monTotal = (100+50)/3, monReste = 100 Mod 24 |
| Affectations | "=" | permettent d’effectuer des opérations de rangement dans des variables monNom = "Martin" => Résultat : monNom prend la valeur "Martin" |
| Logiques | "not, or, xor, and, eqv" | permettent d’enchainer des opérations de comparaison. Par exemple : si a and b, not v |
| Concaténations | "&" | Permettent d’effectuer des opérations de groupage de chaînes de caractères. Ex : nomComplet="Jules" &"-" & "Martin" => Résultat : nomComplet prend la valeur "Jules-Martin" |

### Les instructions de base
#### Les commentaires

Les commentaires sont, en informatique, des lignes (ou portions de lignes) du code source ignorées par le compilateur ou l’interpréteur, car ils ne sont pas nécessaires à l’exécution du programme. Ils représentent un outil indispensable pour décrire de manière détaillée le traitement d'une macro. Les commentaires peuvent soit suivre une instruction sur la même ligne, soit occuper une ligne entière. Ces deux cas sont illustrés par le code suivant :

#### Les affectations

Le langage VBA, comme tous les langages informatiques ou automatiques, range des valeurs dans des variables, il utilise l'opérateur d'affectation "=".
Ici, la variable age recevra la valeur 12, la variable message recevra la valeur "coucou", la variable anniversaire recevra la valeur "12/12/2014".

#### Les instructions séquentielles

Le langage VBA, comme tous les langages informatiques ou automatiques, exécute les instructions une par une
Ici, la cellule E6 de la feuille courante sera sélectionnée, puis la variable age recevra la valeur 12, puis cette valeur 12 sera écrite dans la cellule E6.

#### Les instructions conditionnelles

Le langage VBA, comme tous les langages informatiques ou automatiques, exécute ou non certaines instructions uniquement après un test.
Ici, si la variable age est égale à 18, la cellule E6 recevra le libellé "Vous êtes majeur(e)".

#### Les boucles

Le langage VBA, comme tous les langages informatiques ou automatiques, sait exécuter plusieurs fois certaines instructions.
Ici, tant que la variable age sera inférieure à 18, les cellules E1 à E17 recevront le libellé "Vous êtes mineur(e)".