1. Livres & vidéos
  2. VBA Excel (versions 2024 et Microsoft 365)
  3. Le langage VBA
Extrait - VBA Excel (versions 2024 et Microsoft 365) Programmer sous Excel : macros et langage VBA
Extraits du livre
VBA Excel (versions 2024 et Microsoft 365) Programmer sous Excel : macros et langage VBA
1 avis
Revenir à la page d'achat du livre

Le langage VBA

Les modules

1. Présentation

Le code VBA associé à un classeur est regroupé dans un projet contenant plusieurs dossiers :

Le dossier Microsoft Excel Objets

Il contient un module de classe associé au classeur du projet (appelé par défaut ThisWorkbook) et un module de classe pour chacune des feuilles de calcul ou feuilles graphiques du classeur. Dans ces modules de classe, se trouvent notamment les procédures événementielles attachées au classeur et aux feuilles.

Le dossier Feuilles

Il contient les formulaires (UserForm) du projet et le code VBA associé.

Le dossier Modules

Il regroupe les différents modules standards (composés d’une ou plusieurs procédures) pouvant être appelés depuis toute procédure du projet.

Le dossier Modules de classe

Il contient les modules de classe utilisés pour la création de nouvelles classes d’objets. Les modules de classe sont notamment utilisés pour l’écriture des procédures événementielles associées aux objets Application et Chart (voir chapitre Gestion des événements).

La liste de tous les modules est affichée de façon hiérarchique dans l’Explorateur de projets de l’environnement VBE.

Si l’explorateur de projets n’est pas affiché, choisissez l’option Explorateur de projets...

Les procédures

1. Définitions

Les procédures sont des sous-programmes qui permettent de décomposer une tâche de programmation complexe en une suite de tâches plus petites et plus simples. Elles permettent d’organiser le code à l’intérieur des modules afin d’obtenir un code plus facile à maintenir et facilement réutilisable.

Dans VBA Excel, on distingue trois types de procédures :

  • Les procédures Sub (pour subroutine) appelées sous-programmes ou procédures Sub.

  • Les procédures Function appelées fonctions.

  • Les procédures Property appelées procédures de propriété.

Dans ce chapitre, nous ne nous intéressons qu’aux deux premières qui sont les plus couramment utilisées.

  • Points communs entre les procédures Sub et les fonctions :

  • Elles contiennent des instructions et/ou des méthodes VBA.

  • Elles acceptent des arguments.

  • Elles peuvent être appelées depuis d’autres fonctions ou procédures Sub.

  • Caractéristiques spécifiques aux fonctions :

  • Elles retournent une valeur.

  • Elles peuvent être utilisées depuis Excel comme n’importe quelle fonction Excel.

2. Accès aux procédures

 Pour atteindre une procédure depuis la fenêtre de code d’un module, ouvrez la deuxième liste de la fenêtre du module, cliquez sur le nom de la procédure à atteindre ou déplacez-vous de procédure en procédure par [Ctrl][Flèche en haut] et [Ctrl][Flèche en bas].

 Pour sélectionner un mot, réalisez un double clic sur le mot.

 Pour sélectionner une ligne, placez le pointeur de la souris à gauche de la ligne, cliquez lorsque le pointeur se transforme en une flèche.

 Pour sélectionner un groupe de caractères, utilisez la technique du cliqué-glissé ou réalisez des [Shift] clics.

 Pour sélectionner une procédure entière, placez le pointeur de la souris à gauche d’une ligne de la procédure. Lorsque le pointeur se transforme en flèche, réalisez un double clic.

 Pour exécuter une procédure, cliquez dans la procédure à exécuter et appuyez sur la touche...

Les variables

Les variables permettent de stocker des valeurs intermédiaires à tout moment de l’exécution du code VBA afin de les exploiter ultérieurement pour effectuer des calculs, des comparaisons, des tests...

Les variables sont identifiées par un nom permettant de faire référence à la valeur qu’elles contiennent et un type déterminant la nature des données qu’elles peuvent stocker.

1. Les types de variables

Numériques

Type

Étendue

Taille en octets

Byte (octet)

0 à 255

1

Integer (entier)

-32 768 à 32767

2

Long (entier long)

-2 147 483 648 à 2 147 483 647

4

Single (réel simple à virgule flottante)

-3,402823E38 à 1,401298E-45

(valeurs négatives)

1,401298E-45 à 3,402823E38

(valeurs positives)

4

Double (réel double à virgule flottante)

-1,79769313486231E308 à 4,94065645841247E-324

(valeurs négatives)

4,94065645841247E-324 à 1,79769313486231E308

(valeurs positives)

8

Currency (monétaire à virgule fixe)

-922 337 203 685 477,5808 à 922 337 203 685 477,5807

8

Decimal

+/-79 228 162 514 264 337 593 543950 335 sans séparateur décimal ; +/-7,9228162514264337593543950335 avec 28 chiffres à droite du séparateur décimal ;

le plus petit nombre différent de zéro est +/-0.0000000000000000000000000001

12

Chaînes de caractères

Le type est String. Il existe deux types de chaînes :

  • Les chaînes de longueur variable peuvent contenir environ 2 milliards de caractères. 

  • Les chaînes de longueur fixe peuvent contenir de 1 à environ 64 Ko de caractères.

Exemple

'  Chaîne de longueur variable 
Dim sAdresse As String 
'  Chaîne de longueur fixe (20 caractères) 
Dim sNom As String * 20 

Booléen

Le type est Boolean. La variable peut prendre la valeur True (Vrai) ou False (Faux) qui est sa valeur par défaut. Elle occupe deux octets.

Date

Le type est Date. La variable peut prendre les valeurs de date et d’heure du 1er janvier 100 au 31 décembre 9999. Elle occupe huit octets.

Variant

Les variables de type Variant peuvent contenir des données de toutes sortes ainsi que les valeurs spéciales Empty, Error et Null.

Utiliser le type de donnée Variant offre...

Les tableaux

1. Présentation

Les variables tableau permettent de stocker et de manipuler un ensemble de valeurs, appelées éléments. Une variable tableau se caractérise par un nombre de dimensions et une taille (nombre d’occurrences) pour chacune des dimensions. Le nombre total d’éléments du tableau est le produit des tailles de toutes les dimensions.

Un tableau à une dimension permet de stocker une liste de valeurs, un tableau à deux dimensions permet notamment de stocker les données d’une plage de cellules Excel : le premier argument représente les lignes, le deuxième argument représente les colonnes.

Le nombre d’éléments pour chaque dimension est défini :

  • soit par la valeur de l’indice le plus grand. Dans ce cas, l’indice du premier élément du tableau est déterminé par l’instruction Option Base dans la section de déclaration du module,

  • soit par les valeurs du premier et du dernier indice du tableau.

Un tableau dont la dimension et la taille sont spécifiées lors de sa déclaration est un tableau statique. Un tableau dont la taille peut être spécifiée et modifiée pendant l’exécution d’un programme est un tableau dynamique, ou tableau de dimension libre.

Exemples

'    Tableau statique à une dimension pouvant stocker  
'    13 valeurs de type chaînes de caractères (indice de 0 à 12) 
Option base 0  
Dim TabDepenses(12) as String  
 
 
'    Tableau statique à une dimension pouvant stocker   
'    12 valeurs entières (indice de 1 à 12)  
Option base 1  
Dim TabDepenses(12) As Integer   
 
'    Tableau statique à deux dimensions permettant de stocker  
'    les valeurs de 11 lignes et 11 colonnes  
Option base 0  
Dim TabDepenses (10, 10) As Double   
Dim TabDepenses (0 to 10, 0 to 10) as Double  
 
 
'    Tableau dynamique à deux dimensions   
Option base 1  
Dim TabDepenses() As Double  
Redim TabDepenses(11,11) 

2. Déclaration d’un tableau...

Les structures de décision

Il est souvent nécessaire de tester des conditions spécifiques avant d’exécuter des instructions.

Les structures de décision, appelées aussi alternatives ou branchements conditionnels, permettent, au terme d’une évaluation, d’opter pour un bloc de code ou un autre.

On distingue deux instructions de branchement conditionnel :

  • If ... Then ... Else

  • Select ... Case

La fonction IIf peut également être utilisée pour définir une valeur en fonction d’une condition. Exemple : Port = IIf(Quantité < 100, 100, 0).

1. L’instruction If

Elle permet d’exécuter des instructions en fonction du résultat d’une condition. 

If...Then

If <condition> Then <instruction> [:<instruction>] 

S’il y a plusieurs instructions, séparez-les par le signe de ponctuation : (deux-points). Cette syntaxe est surtout utilisée pour des tests courts et simples.

Exemple

Si la cellule A1 est vide, alors envoi d’un bip sonore et d’un message.

Sub Test_Cellule_A1() 
   If IsEmpty(Range("A1")) Then Beep: MsgBox "Oubli du titre" 
End Sub 

If...Then...End If

If <condition> Then 
   <instruction1> 
   <instruction2> 
...  
End If 

Exemple

Sub Test_Titre() 
' Si la cellule A1 est non vide 
' alors elle est mise en gras et coloriée en rouge 
   If Not IsEmpty(Range("A1")) Then 
       With Range("A1") 
           .Font.Bold = True 
 ...

Les structures en boucles

Les structures en boucles (ou répétitives) permettent de répéter l’exécution d’un ensemble d’instructions.

On distingue plusieurs types de structures en boucles :

  • Do...Loop

  • While...Wend

  • For...Next

  • For Each...Next

Do...Loop et While...Wend répètent un traitement jusqu’à ce qu’une certaine condition soit réalisée tandis que For...Next effectue un traitement un nombre de fois donné, en fonction d’un compteur.

For Each...Next permet de parcourir les éléments d’une collection.

1. L’instruction Do...Loop

Elle exécute un bloc d’instructions un nombre de fois indéterminé.

Syntaxe 1

Les instructions sont exécutées aussi longtemps que la condition renvoie True.

Do While <Condition> 
    <Instructions>  
Loop 

Syntaxe 2

Les instructions sont exécutées une première fois sans condition puis aussi longtemps que la condition renvoie True.

Do  
    <Instructions> 
Loop While <Condition> 

Exemple

Le code suivant demande à l’utilisateur de saisir un nombre tant que celui-ci n’est pas numérique ou n’est pas supérieur à 100.

Sub Saisie_Nombre() 
   Dim vReponse as Variant 
   Do 
      vReponse = InputBox("Entrez un nombre > 100") 
   Loop While (Not IsNumeric(vReponse) Or vReponse <= 100) 
End Sub 

Syntaxe 3

Les instructions sont exécutées jusqu’à ce que la condition renvoie True (aussi longtemps que la condition renvoie False).

Do Until <Condition> 
    <Instructions> 
Loop 

Syntaxe 4

Les instructions sont exécutées une première fois sans condition puis jusqu’à ce que la condition renvoie True.

Do 
    <Instructions> 
Loop Until <Condition> 

Exemple

Le code suivant demande à l’utilisateur de saisir un nombre jusqu’à ce que celui-ci soit numérique et supérieur à 100.

Sub Saisie_Nombre() 
   Dim vReponse as Variant...

Les opérateurs

Les opérateurs permettent d’effectuer des opérations arithmétiques sur des variables et/ou des constantes, de comparer des variables entre elles, de tester plusieurs conditions...

On distingue plusieurs types d’opérateurs :

  • Les opérateurs arithmétiques.

  • Les opérateurs de comparaison.

  • Les opérateurs logiques.

  • L’opérateur de concaténation.

L’opérateur d’affectation est le signe =. La valeur de l’expression située à droite du signe égal est affectée à la variable située à gauche du signe (exemple : IntA = 12, IntA = Intb * 12).

1. Les opérateurs arithmétiques

Ils permettent d’effectuer des calculs arithmétiques à partir de variables et/ou de constantes.

Opérateur

Calcul réalisé

+

Addition

-

Soustraction

/

Division avec comme résultat un nombre à virgule flottante

Mod

Reste de la division de deux nombres

\

Division avec comme résultat un entier

*

Multiplication

^

Élévation à la puissance

2. Les opérateurs de comparaison

Ils permettent de comparer deux valeurs ou deux chaînes de caractères.

Opérateur

Calcul réalisé

<

Inférieur à

<=

Inférieur ou égal à

>

Supérieur à

>=

Supérieur ou égal à

=

Égal à

<>

Différent de

L’instruction Option compare utilisée au niveau module permet de déclarer la méthode de comparaison par défaut qu’il convient d’utiliser lors de la comparaison de chaînes.

Elle peut prendre l’une de ces trois valeurs :

  • L’option Compare Binary (option par défaut) fournit des comparaisons de chaînes basées sur un ordre de tri dérivé de la représentation binaire interne des caractères : A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê...

  • L’option...

Les règles d’écriture du code

1. Les commentaires

Les commentaires permettent de documenter les codes VBA afin de les rendre plus lisibles.

REM commentaire 

ou

' commentaire 

Dès la validation de la ligne de commentaire, celui-ci s’affiche par défaut en vert.

2. Le caractère de continuation

Une instruction VBA peut être écrite sur plusieurs lignes en utilisant un trait de soulignement "_" précédé d’un espace.

Exemple

'   Demande la saisie d'un prix tant que celui-ci
'   n'est pas renseigné ou est incorrect 
Dim vPrix as Variant 
Do While IsEmpty(vPrix) Or Not IsNumeric(vPrix) _ 
   Or vPrix < 50 Or vPrix > 500 
   vPrix = InputBox("Saisir un montant compris entre " _ 
           & "50 et 500 ") 
Loop 

3. Les retraits

Les retraits (ou tabulations) permettent une meilleure lisibilité du code. Il est notamment important de les utiliser dans les structures de contrôles (surtout si plusieurs instructions If sont imbriquées) et les structures de décisions.

 Pour générer des retraits, utilisez la touche [Tab].

 Pour revenir à la tabulation précédente, utilisez les touches [Maj][Tab].

 Pour modifier la taille de la tabulation (quatre espaces par défaut), sélectionnez...