Macros du tableur : enregistrement, modèle d'objets, procédures, fonctions et variables (langage VBA)
À retenir
Cadre programme : DCG, programme 2025 (arrêté du 4 août 2025, première session 2027), UE 8 « Systèmes d'information de gestion », partie 2 « Gérer des données du système d'information », sous-partie 2.2.3 « Mettre en œuvre des programmes au sein du tableur » (enregistrer une macro-commande ; exécuter, modifier ou compléter le code d'une macro-commande, fonction ou procédure ; modèle d'objets associé à un tableur ; familles d'instructions : affectation de valeurs, d'objets, de variables et de paramètres ; instructions d'entrée, de calcul, de cumul et de sortie).
Pourquoi c'est central à l'examen : l'énoncé donne un programme écrit dans le langage de macros du tableur (VBA) et demande de l'interpréter (quel est le résultat ?), de le modifier ou de le compléter. Le programme limite l'étude aux concepts de base : objets fondamentaux (classeur, feuille, colonne, ligne, plage), sans classes personnalisées, ni application complexe, ni optimisation. Le candidat doit pouvoir lire chaque ligne et dérouler le programme à la main.
À retenir
Ce cours et les cours 33 et 34 : le programme ne demande ni pseudo-code ni algorithmique abstraite. La programmation s'apprend ici directement dans le langage de macros du tableur (VBA), sur des problèmes de gestion.
01Les macros-commandes
1.1 Définition
Une macro-commande (ou macro) est une suite d'instructions enregistrée sous un nom, qui automatise des gestes répétitifs (mise en forme, copie, calcul, impression). On la déclenche par un raccourci clavier, un bouton ou la commande d'exécution.
1.2 Enregistrer une macro
- Lancer l'enregistreur de macros.
- Donner un nom (sans espace, commençant par une lettre) et, si l'on veut, un raccourci clavier ; choisir où stocker la macro (dans ce classeur).
- Effectuer les gestes à automatiser : l'enregistreur les traduit en instructions.
- Arrêter l'enregistrement.
- Tester sur d'autres données, lire le code produit et le corriger si nécessaire.
Choix à connaître : l'enregistrement en références absolues (la macro agit toujours sur les mêmes cellules) ou relatives (la macro agit à partir de la cellule active, par exemple pour traiter la ligne en cours).
Un classeur qui contient des macros doit être enregistré dans un format qui les conserve. À l'ouverture d'un classeur reçu, on n'active jamais des macros dont on ignore l'origine : une macro peut effacer des données ou propager un logiciel malveillant (cours 10 et 11).
1.3 Lire le code produit par l'enregistreur
Après avoir mis en forme une ligne d'en-têtes (gras, fond gris, centrage, largeur des colonnes ajustée), le code enregistré ressemble à ceci :
Sub MiseEnFormeEntetes()
'
' MiseEnFormeEntetes Macro
'
Range("A1:E1").Select
Selection.Font.Bold = True
Selection.Interior.Color = 14277081
Selection.HorizontalAlignment = xlCenter
Columns("A:E").EntireColumn.AutoFit
Range("A2").Select
End Sub
| Ligne | Signification |
|---|---|
Sub MiseEnFormeEntetes() ... End Sub | Début et fin de la procédure |
Lignes commençant par ' | Commentaires : ignorés à l'exécution |
Range("A1:E1").Select | Sélectionne la plage A1:E1 |
Selection.Font.Bold = True | Met en gras la police de la sélection |
Selection.Interior.Color = 14277081 | Applique une couleur de fond (un nombre représente la couleur) |
Selection.HorizontalAlignment = xlCenter | Centre le contenu (xlCenter est une constante du langage) |
Columns("A:E").EntireColumn.AutoFit | Ajuste la largeur des colonnes A à E |
Range("A2").Select | Replace le curseur en A2 |
Les défauts du code enregistré :
- il est verbeux (il sélectionne avant d'agir :
SelectpuisSelection) : on peut l'écrire plus directement, par exempleRange("A1:E1").Font.Bold = True; - il est figé sur des adresses (
A1:E1) : pour traiter une liste de longueur variable, il faut un programme (cours 34) ; - il enregistre tout ce qu'on fait, y compris les gestes inutiles ou erronés.
02Le modèle d'objets du tableur
2.1 La hiérarchie
Le tableur est représenté par des objets emboîtés. On les désigne en partant du plus général, avec un point entre chaque niveau.
| Objet | Représente | Exemples d'expressions |
|---|---|---|
| Application | Le tableur lui-même | Application |
| Workbook (classeur) | Un fichier ouvert | ThisWorkbook (le classeur qui contient la macro), Workbooks(1) (le premier classeur ouvert) |
| Worksheet (feuille) | Une feuille d'un classeur | Worksheets("Ventes"), ActiveSheet (feuille active) |
| Range (plage) | Une ou plusieurs cellules | Range("A1"), Range("A1:E1") |
| Cells | Une cellule désignée par numéros | Cells(2, 4) désigne la ligne 2, colonne 4, soit D2 |
| Rows, Columns | Une ligne, une colonne | Rows(3), Columns("B") |
Deux règles de lecture :
Cells(ligne, colonne): la ligne d'abord, puis la colonne (Cells(2, 4)estD2, et nonB4). Avec cette notation, on peut faire varier la ligne ou la colonne par un calcul ou une variable (cours 34) ;- une expression complète se lit de gauche à droite :
Worksheets("Ventes").Range("D2").Valuesignifie « la valeur de la cellule D2 de la feuille Ventes ». Sans le nom de feuille, le programme agit sur la feuille active.
2.2 Propriétés et méthodes
| Notion | Définition | Syntaxe | Exemples |
|---|---|---|---|
| Propriété | Une caractéristique de l'objet, que l'on lit ou modifie | Objet.Propriété = valeur | Range("A1").Value = 100 ; Range("A1").Font.Bold = True ; Worksheets("Ventes").Name |
| Méthode | Une action que l'objet sait exécuter | Objet.Méthode (avec ou sans arguments) | Range("A1:E1").ClearContents ; Range("A1").Select ; Worksheets("Ventes").Activate |
Propriétés fréquentes : Value (contenu), Formula (formule), Name (nom), Count (nombre d'éléments), Row et Column (position), Address (adresse). Méthodes fréquentes : Select, Clear, ClearContents (efface le contenu), Copy, Delete, Activate.
03Procédures et fonctions
Procédure (Sub) | Fonction (Function) | |
|---|---|---|
| Rôle | Exécuter une suite d'actions (mise en forme, copie, écriture de cellules) | Renvoyer une valeur à partir de paramètres |
| Se termine par | End Sub | End Function |
| Valeur de retour | Aucune | Oui : on affecte le résultat au nom de la fonction |
| Déclenchement | Bouton, raccourci, commande d'exécution, appel par une autre procédure | Utilisation dans une cellule (=PrixTTC(B5;Taux_TVA)) ou dans le code |
Exemple de fonction personnalisée :
Function PrixTTC(prixHT As Double, taux As Double) As Double
PrixTTC = prixHT * (1 + taux) ' le résultat est affecté au nom de la fonction
End Function
prixHTettauxsont les paramètres (ou arguments) ;As Doubledonne leur type ;- le
As Doublefinal est le type de la valeur renvoyée ; - dans une cellule, les arguments sont séparés par un point-virgule (comme dans les formules, cours 25) :
=PrixTTC(B5;Taux_TVA); - dans le code, les arguments sont séparés par une virgule :
PrixTTC(250, 0.2).
Une fonction appelée depuis une cellule peut calculer et renvoyer une valeur ; elle ne peut pas modifier d'autres cellules. Pour modifier la feuille, on utilise une procédure.
3.1 Passer des paramètres
Les paramètres sont des variables locales de la procédure qui les reçoit. Par défaut, ils sont passés par référence (ByRef) : la procédure appelée travaille sur la variable de l'appelant, qu'elle peut modifier. Avec ByVal, elle reçoit une copie : la variable de l'appelant n'est jamais modifiée. En cas de doute, on écrit ByVal pour les paramètres que l'on ne veut pas voir changer.