4.4 · Macros & programmation VBA

Niveau 4 · Expert : Power Query, modèle de données & VBA

4.4Macros & programmation VBA

Objectif : Automatiser une tâche répétitive avec une macro et comprendre les bases (et risques) de VBA.
Temps estimé : 14 min · lecture autonome · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

L'essentiel en 30 secondes

  • Enregistrer, puis relire : une macro mémorise une suite d'actions en VBA — on rejoue en un clic le rapport hebdo mis en forme à l'identique.
  • Lire l'éditeur (Alt+F11) pour progresser : changer une plage, une valeur, une couleur dans le code généré — macros courtes et ciblées, testées sur une copie.
  • Réflexe de Wassim : une macro ne s'annule pas (Ctrl+Z inopérant) et peut être malveillante — classeur en .xlsm, sources fiables uniquement.

Mini-cas filé — Wassim rejoue sa mise en forme du lundi en un clic

Wassim, comptable à Alger, met en forme le même rapport chaque lundi (volets figés, en-têtes en gras, montants en dinars, filtre automatique). Il enregistre une macro « MiseEnFormeRapport », ouvre le code en Alt+F11, repère les lignes et ajuste la plage. Enregistré en .xlsm, un clic rejoue tout — testé d'abord sur une copie, car une macro ne s'annule pas. Quatrième jalon du fil rouge : le répétitif d'interface est automatisé, prudemment.

Suite des cas 4.1-4.3 — Wassim automatise ce que ni Power Query ni les formules ne font : les gestes d'interface.

1. Enregistrer une macro

Une macro mémorise une suite d'actions pour les rejouer. Développeur ▸ Enregistrer une macro : on effectue les gestes (mettre en forme, filtrer, coller…), on arrête l'enregistrement. Excel génère du code VBA. Rejouer la macro reproduit tout instantanément — idéal pour le rapport hebdomadaire de Wassim, mis en forme à l'identique.

On garde des macros courtes et ciblées : une tâche = une macro. Les monstres qui font tout sont illisibles et cassent au premier changement de structure.

2. Lire et adapter le VBA

Le code s'ouvre dans l'éditeur VBA (Alt+F11). Même sans être développeur, on peut le lire et l'adapter : changer une valeur, une plage, une couleur. C'est la meilleure façon d'apprendre : enregistrer, puis comprendre le code produit — Wassim y repère vite les lignes de gras et de format monétaire.

Le VBA manipule des objets (classeur, feuille, plage) avec des propriétés et des méthodes : Worksheets, Range, Font.Bold, NumberFormat… Comprendre ce vocabulaire suffit pour adapter 80 % des macros enregistrées.

3. Précautions

Un classeur avec macros s'enregistre en .xlsm — en .xlsx, les macros sont perdues. Les macros peuvent être un vecteur de virus : n'activez que celles de sources fiables, en connaissance de cause. Autre limite : une macro ne « s'annule » pas (Ctrl+Z ne défait pas ses actions) — on teste sur une copie.

Enfin, pour de la simple transformation de données, Power Query est souvent préférable à VBA : sans code, actualisable, plus sûr. VBA reste pertinent pour automatiser des actions d'interface variées (mise en forme, boîtes de dialogue, interactions entre feuilles).

Erreur d'interprétation fréquente : « Les macros s'annulent avec Ctrl+Z, on peut les activer de n'importe où, et VBA remplace Power Query partout ». Non sur les trois points. Une macro modifie le classeur sans possibilité d'annulation — d'où le test sur copie. Une macro de source inconnue peut être malveillante — d'où l'activation en connaissance de cause, sources fiables uniquement. Et pour transformer des données, Power Query (sans code, actualisable) bat VBA ; VBA brille sur les gestes d'interface variés.
De la macro au code Enregistrer les gestes, lire le VBA produit, l'adapter, puis le rejouer Enregistrer Lesgestes du lundiCode VBA Généré seulRelire / adapter Plageset formatsRejouer En un clic(.xlsm)
Enregistrer les gestes, lire le VBA produit, l'adapter, puis le rejouer
Version texte du schéma (SEO / lecteurs d'écran / traduction) : 1) Wassim enregistre sa mise en forme hebdomadaire via Développeur ▸ Enregistrer une macro. 2) Il ouvre le code en Alt+F11 et repère les lignes de gras, de format et de filtre. 3) Il adapte une plage et une couleur, enregistre en .xlsm, puis rejoue sur une copie pour vérifier. 4) Le lundi suivant, un clic rejoue tout à l'identique. Leçon : enregistrer des gestes, lire le VBA, adapter prudemment, rejouer — jamais sans copie de test ni source fiable.

🔎 Exemple concret — 🔎 Exemple concret — Automatiser une mise en forme hebdo

Chaque lundi, Wassim met en forme le même rapport ; l'enregistreur produit ce VBA :

Sub MiseEnFormeRapport()
    ' Figer les volets + en-têtes en gras (Wassim : rapport hebdo)
    Range("A2").Select
    ActiveWindow.FreezePanes = True
    Rows("1:1").Font.Bold = True
    ' Montants en dinars + filtre automatique
    Columns("C:C").NumberFormat = "#,##0 DZD"
    Range("A1").AutoFilter
End Sub

Lecture : l'enregistreur transforme des clics en code réutilisable et lisible.

Leçon : on automatise le répétitif ET reproductible ; on teste sur une copie (pas d'annulation).

Vocabulaire de la section

Macro
Suite d'actions enregistrée pour être rejouée en un clic.

Exemple simple : La MiseEnFormeRapport de Wassim rejoue sa mise en forme du lundi.

Ce que ce n'est pas : une formule qui se recalcule seule.

Réflexe : geste hebdo identique : l'enregistrer en macro.

VBA
Visual Basic for Applications : le langage des macros Excel (objets, propriétés, méthodes).

Exemple simple : Wassim lit Range et Font.Bold dans son code enregistré.

Ce que ce n'est pas : le langage M de Power Query (préparation de données).

Réflexe : adapter une macro : repérer objets et propriétés.

.xlsm
Format de classeur prenant en charge les macros ; .xlsx les perd.

Exemple simple : Wassim enregistre son rapport automatisé en .xlsm.

Ce que ce n'est pas : un classeur .xlsx qui conserverait les macros.

Réflexe : macro créée : enregistrer aussitôt en .xlsm.

Sécurité des macros
Les macros peuvent être malveillantes : activer en connaissance de cause, sources fiables.

Exemple simple : Wassim n'active que ses propres macros et celles validées du cabinet.

Ce que ce n'est pas : un code inoffensif par nature, activable sans réfléchir.

Réflexe : macro reçue : vérifier la source avant d'activer.

En pratique — En pratique — Enregistrer et relire une macro

  1. Activez l'onglet Développeur, puis Enregistrer une macro.
  2. Effectuez une mise en forme simple, arrêtez l'enregistrement.
  3. Ouvrez le code (Alt+F11) et repérez les lignes correspondantes.
  4. Changez une valeur (ex. couleur), enregistrez en .xlsm, rejouez sur une copie.
Vous automatisez une tâche répétitive et savez lire/adapter le code généré, prudemment.

Script prêt à dire — annoncer la macro à l'équipe (30 s)

« C'est Wassim : la mise en forme du rapport du lundi est enregistrée en macro — un clic rejoue tout : volets, gras, format dinars, filtre. Le classeur est en .xlsm, je l'ai testée sur une copie car une macro ne s'annule pas. N'activez que nos macros validées. »

À dire avant de diffuser le fichier : rappelez le .xlsm et la source fiable.

Modèle copier-coller — Boucle VBA sûre sur une plage (avec copie de test)

Sub NormaliserMontants()
    Dim c As Range
    Application.ScreenUpdating = False
    For Each c In Worksheets("Ventes").Range("C2:C500")
        If IsNumeric(c.Value) Then c.Value = Round(c.Value, 2)
    Next c
    Application.ScreenUpdating = True
    MsgBox "Montants normalisés (testé sur copie)."
End Sub

Mise en forme hebdo

Comme Wassim : enregistrer volets, gras, format DZD et filtre — un clic chaque lundi.

Adapter le code

Changer la plage C2:C500 ou le format dans l'éditeur : la macro suit la nouvelle structure.

Macro reçue par mail

Source inconnue : ne pas activer — demander validation, analyser en connaissance de cause.

Données à transformer

Préférer Power Query (sans code, actualisable) plutôt qu'une macro fragile.

Prudence : Les macros s'activent en connaissance de cause et uniquement depuis des sources fiables : un classeur piégé peut exécuter du code malveillant. Enregistrez en .xlsm (sinon macros perdues) et testez toujours sur une copie, car une macro ne s'annule pas avec Ctrl+Z.

✓ Bonnes pratiques

  • Enregistrer d'abord, lire le code ensuite pour apprendre.
  • Macros courtes et ciblées.
  • Tester sur une copie (une macro ne s'annule pas).

✗ Pièges fréquents

  • Activer des macros de sources inconnues (virus).
  • Oublier d'enregistrer en .xlsm (macros perdues).
  • Utiliser VBA là où Power Query ferait mieux (transformation de données).

Points clés à retenir

  • Une macro rejoue une suite d'actions ; le code est du VBA.
  • On enregistre, puis on lit/adapte dans l'éditeur (Alt+F11).
  • Classeur avec macros = .xlsm ; macros = risque de sécurité.
  • Une macro ne s'annule pas : tester sur une copie.

Défi 48h — appliquez demain

Sur une copie d'un vrai rapport : enregistrez votre mise en forme, relisez le code en Alt+F11, changez une valeur, enregistrez en .xlsm et rejouez.

Checklist sortie de section
  • Je sais enregistrer et rejouer une macro ciblée.
  • Je sais lire et adapter le VBA généré (plage, valeur).
  • Je connais les précautions (.xlsm, copie de test, sources fiables).
Auto-évaluation 1-5 : saurais-je adapter une ligne de VBA sans aide ?ai-je testé ma dernière macro sur une copie avant de la diffuser ?

Questions fréquentes

Macro (VBA) ou Power Query ?

Pour transformer/consolider des données : Power Query (sans code, actualisable, plus sûr). Pour automatiser des actions d'interface variées (mise en forme, boîtes de dialogue, interactions), VBA reste pertinent.

Faut-il savoir programmer pour utiliser des macros ?

Non pour enregistrer et rejouer ; un peu pour adapter le code. C'est justement une bonne porte d'entrée vers la programmation : enregistrer une action et lire le VBA correspondant.

Vérifiez votre compréhension

Quelle précaution est propre aux macros ?

Ressources supplémentaires (optionnel, pour aller plus loin)

Examen du niveau 4Questions inédites et durcies pour valider vos acquis