Blog ENI : Toute la veille numérique !
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
  1. Livres et vidéos
  2. VBA Excel (versions 2021 et Microsoft 365)
  3. Le langage VBA
Extrait - VBA Excel (versions 2021 et Microsoft 365) Programmer sous Excel : macros et langage VBA
Extraits du livre
VBA Excel (versions 2021 et Microsoft 365) Programmer sous Excel : macros et langage VBA
2 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 du menu Affichage ou utilisez le raccourci-clavier [Ctrl] R.

images/N02RI01.png

Pour afficher le code associé à un module, double cliquez sur le nom du module. 

Les éléments du langage VBA décrits dans ce chapitre peuvent être utilisés dans les différents modules.

2. Accès aux modules

Pour insérer un nouveau module à partir de l’environnement VBE, utilisez l’option Module du menu Insertion, ou ouvrez la liste images/02RI02N.png dans la barre...

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...

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...

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  ...

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 
           .Interior.ColorIndex = 3 
       End With 
   End If 
End Sub 

If...Then...Else...End If

If <condition> Then 
   <instructions> 
Else 
   <instructions> 
End If 

Exemple

Lors du changement de la devise (Euro ou US) située dans la cellule C3, modification du format de la plage de cellule D6:F11.

Private Sub Workbook_SheetChange(ByVal Sh As Object, _ 
ByVal Target As Range) 
' Modifie la cellule C3 de la feuille Articles 
If Sh.Name = "Articles" And Target.Address = "$C$3" Then 
   Applique_Format 
End If 
End Sub 

Cette procédure modifie le format des cellules en fonction de la devise choisie.

Sub Applique_Format() 
'   Format € ou $ 
Range("D6:F11").NumberFormat = "0.00" 
If UCase(Range("C3")) = "EURO" Then 
   Range("D6:F11").NumberFormat = "0.00 €" 
Else ...

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> 
   ...

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é...

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 Options à partir du menu Outils, cliquez sur l’onglet Éditeur et modifiez la zone Largeur de la tabulation.

4. Les noms des procédures, variables et constantes

Les noms des procédures, des constantes, des variables et des arguments doivent respecter les règles suivantes :

  • Le premier caractère doit être une lettre.

  • Les minuscules et majuscules ne sont pas différenciées (les lettres accentuées sont...