Créer une macro simple VBA dans Excel pour automatiser une tâche

Evaluez cet article !
[Total: 0 Moyenne : 0]


Créer une macro simple VBA dans Excel pour automatiser une tâche

Vous avez une tâche répétitive dans Excel — mettre en forme un tableau, supprimer des lignes vides, appliquer des formats ou consolider des données — et vous en avez assez de répéter les mêmes manipulations. Une macro VBA permet d’automatiser ces gestes en quelques secondes. Cet article vous guide pas à pas pour créer une macro simple, comprendre le code généré, l’adapter à vos besoins et éviter les pièges courants, sans présupposer que vous êtes développeur.

En bref

🔧 Objectif : automatiser une tâche répétitive dans Excel via une macro VBA simple — enregistrer l’action, corriger le code, puis l’exécuter quand nécessaire.

⚙️ Étapes clés : activer l’onglet Développeur, sauvegarder le classeur (.xlsm), enregistrer ou écrire le code, tester et sécuriser la macro.

📁 Données sources : si vos données viennent d’un fichier CSV, vérifiez les formats avant d’automatiser pour éviter les erreurs de type ou de séparateur.

💡 Astuce pratique : préférez une macro courte et lisible ; commentez le code pour pouvoir le reprendre facilement six mois plus tard.

Pourquoi automatiser avec une macro VBA ?

Automatiser, ce n’est pas seulement gagner du temps ; c’est aussi réduire les erreurs humaines et uniformiser le rendu. Quand une tâche suit toujours les mêmes règles (sélectionner une plage, trier, appliquer des formats, copier-coller des résultats), la répétition engendre des oublis : une colonne non formatée, une ligne oubliée lors du tri. Une macro exécute la séquence de façon identique à chaque fois. On pourrait croire que l’enregistrement est suffisant, mais souvent il faut comprendre et ajuster le code pour le rendre robuste face aux variations de données.

Avant de commencer : précautions et préparation

Sauvegarde et format du fichier

Sauvegardez votre classeur au format .xlsm (classeur macro-enabled) avant d’enregistrer ou de coller un code VBA. Cela évite de perdre des macros et permet une reprise aisée en cas de problème. Travaillez sur une copie si vous automatisez des opérations destructrices (supprimer des lignes, écraser des cellules).

Activer l’onglet Développeur et la sécurité

L’onglet Développeur n’est pas visible par défaut dans Excel : activez-le via les options > Personnaliser le ruban. Côté sécurité, ajustez le centre de gestion des macros : préférez « Désactiver toutes les macros avec notification » pour pouvoir activer les macros fiables au besoin, et évitez d’autoriser automatiquement toutes les macros provenant de sources inconnues.

Vérifier les données sources

Avant d’automatiser, examinez vos données : types de colonnes (texte, nombre, date), séparateurs décimaux, cellules fusionnées. Si vos données proviennent d’un fichier CSV, importez-les proprement et corrigez les erreurs courantes — un mauvais séparateur peut transformer un nombre en texte et faire échouer la macro.

Choix de la méthode : enregistrer ou coder ?

Deux approches coexistent : utiliser l’enregistreur de macros ou écrire directement du code VBA. L’enregistreur est rapide pour capturer des actions simples et apprendre la syntaxe, mais il produit souvent du code verbeux et dépendant d’adresses précises. Écrire le code à la main demande un peu de réflexion mais donne une macro plus propre, adaptable et maintenable.

Méthode Avantages Inconvénients
Enregistrer la macro Rapide, accessible aux débutants Code verbeux, fragile aux changements de structure
Écrire le code Flexible, optimisable, plus robuste Courbe d’apprentissage plus élevée

Exemple pratique : macro pour nettoyer et formater un tableau

Nous allons créer une macro simple qui :

  • sélectionne la plage utilisée ;
  • supprime les lignes vides ;
  • met en forme l’en-tête (gras, fond) ;
  • applique un format numérique aux colonnes détectées comme nombres ;
  • autoadapte la largeur des colonnes.

Cette suite d’actions est typique d’un prétraitement avant génération de rapports ou export. Voici le code, que vous pouvez coller dans l’éditeur VBA (ALT+F11) dans un module standard :

Sub NettoyerEtFormaterTableau()
    Dim ws As Worksheet
    Dim plage As Range
    Dim derniereLigne As Long, derniereCol As Long
    Set ws = ActiveSheet

    ' Déterminer la plage utilisée
    With ws
        If Application.WorksheetFunction.CountA(.Cells) = 0 Then Exit Sub
        derniereLigne = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        derniereCol = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
        Set plage = .Range(.Cells(1, 1), .Cells(derniereLigne, derniereCol))
    End With

    ' Supprimer les lignes entièrement vides
    Dim i As Long
    For i = derniereLigne To 1 Step -1
        If Application.WorksheetFunction.CountA(ws.Rows(i)) = 0 Then ws.Rows(i).Delete
    Next i

    ' Mettre en forme l'en-tête (première ligne)
    With plage.Rows(1).Font
        .Bold = True
    End With
    plage.Rows(1).Interior.Color = RGB(220, 230, 241)

    ' Appliquer un format numérique aux colonnes qui paraissent numériques
    Dim col As Long, sampleVal As Variant
    For col = 1 To derniereCol
        sampleVal = Application.WorksheetFunction.Index(ws.Columns(col).Value, 2, 1)
        If IsNumeric(sampleVal) Then
            ws.Columns(col).NumberFormat = "#,##0.00"
        End If
    Next col

    ' Ajuster les colonnes
    plage.Columns.AutoFit
End Sub

Explication détaillée du code

Les lignes initiales définissent la feuille et déterminent la plage utilisée via la méthode Find, plus fiable que UsedRange pour ignorer les cellules formatées sans contenu. La suppression des lignes vides se fait en boucle inversée pour éviter les décalages d’index. Le format de l’en-tête utilise Interior.Color pour un fond léger ; vous pouvez remplacer RGB par une constante Excel si vous préférez. L’identification des colonnes numériques repose sur un échantillon (ici la cellule de la deuxième ligne), une technique simple mais efficace pour éviter d’appliquer un format numérique à une colonne d’identifiants contenant des zéros en tête.

Adapter la macro à d’autres contextes

La robustesse vient de petites protections : vérifier que la feuille n’est pas vide, traiter les erreurs possibles, documenter le code. Pour faire évoluer la macro vers un usage multi-feuilles, ajoutez une étape demandant à l’utilisateur de choisir la feuille ou parcourez toutes les feuilles du classeur. Si vos données sont importées automatiquement, insérez la procédure d’import avant le nettoyage.

Boîte de dialogue et exécution sur bouton

Pour rendre la macro accessible à des utilisateurs non techniques, vous pouvez l’associer à un bouton sur la feuille (Insertion > Formes, puis affecter la macro) ou créer un petit formulaire utilisateur (UserForm) pour saisir des paramètres (plage, inclure/decocher suppression des lignes vides, etc.).

Bonnes pratiques et pièges à éviter

  • Commenter votre code : deux ou trois mots suffisent pour expliquer chaque bloc logique. Vous vous remercierez plus tard.
  • Tester sur un jeu d’essai avant d’exécuter sur des données critiques.
  • Gérer les erreurs : un simple On Error GoTo GestionErreur et un message clair évitent des plantages incompréhensibles pour l’utilisateur.
  • Éviter les références absolues : utilisez des méthodes dynamiques (Find, CurrentRegion, Tables nommées) plutôt que Range(« A1:Z100 »).

Tableau récapitulatif : erreurs fréquentes et solutions

Symptôme Cause fréquente Solution
Macro s’arrête avec erreur 13 (Type mismatch) Valeur inattendue (texte vs nombre) Vérifier les types avec IsNumeric / IsDate ; ajouter des conversions
Résultat différent selon la feuille Référence à ActiveSheet non prévue Spécifier ws = ThisWorkbook.Worksheets(« Nom ») ou demander la feuille
Colonnes non ajustées Format conditionnel ou cellules fusionnées Retirer les fusions, gérer les formats conditionnels avant AutoFit
Exemple d’éditeur VBA et feuille Excel montrant une macro pour nettoyer et formater un tableau

FAQ

Comment lancer une macro automatiquement à l’ouverture du fichier ?

Placez un sub nommé Workbook_Open() dans le module ThisWorkbook. Cette procédure s’exécutera automatiquement à l’ouverture du classeur. Attention : évitez d’exécuter des actions risquées sans confirmation utilisateur.

Quelle différence entre Sub et Function en VBA ?

Un Sub exécute une série d’instructions sans renvoyer de valeur ; une Function renvoie une valeur et peut être utilisée dans une cellule comme une formule personnalisée ou appelée depuis un Sub.

La macro supprime des données, puis-je annuler ?

Excel ne permet pas d’annuler une macro (Ctrl+Z ne fonctionne pas après l’exécution d’un script). Pour prévenir les pertes, faites une copie de sauvegarde automatique au début de la macro ou utilisez la fonctionnalité Versioning de votre environnement (OneDrive, SharePoint).

Peut-on exécuter une macro sur plusieurs fichiers ?

Oui, en ouvrant chaque fichier via VBA et en appliquant la même procédure. Créez une macro « mère » qui parcourt un dossier, ouvre chaque fichier, exécute la macro de nettoyage et sauvegarde le fichier.

Evaluez cet article !
[Total: 0 Moyenne : 0]
Lire aussi  Ajouter des segments (slicers) à un TCD Excel pour le rendre interactif
Julie - auteure Com-Strategie.fr

Julie – Auteure & Fondatrice

Étudiante en journalisme et passionnée de technologie, Julie partage ses découvertes autour de l’IA, du SEO et du marketing digital. Sa mission : rendre la veille technologique accessible et proposer des tutoriels pratiques pour le quotidien numérique.

1 réflexion au sujet de « Créer une macro simple VBA dans Excel pour automatiser une tâche »

  1. C’est tellement utile de pouvoir automatiser des tâches dans Excel ! Merci pour ces conseils, cela va vraiment me faire gagner du temps au travail et réduire mes erreurs.

    Répondre

Répondre à Zoé Castor Annuler la réponse