Qu'est-ce qu'une macro ?

  Si vous effectuez fréquemment une série de commandes ou de tâches, Excel vous permet de l'automatiser à l'aide d'une macro. Concrètement, la macro est une suite d'instructions indiquant à Excel une suite d'opérations à réaliser. Effectuer une série de calculs, copier, vérifier, modifier, supprimer le contenu de cellules... tout est possible avec les macro.

Créez votre première macro avec l'enregistreur d'Excel,
Exécutez les macro et créez des raccourcis pour y accéder,
Apprenez à les modifier et à créer vos propres macro.


L'enregistreur de macro

 

  Pour débuter, nous n'effectuerons que des opérations simples afin de vous familiariser avec l'enregistreur de macro. Ouvrez un classeur vide et lancez l'enregistreur de macro : menu Outils / Macro /  Nouvelle macro.

enregistreur de macros Excel

  Attention : le nom de la macro ne doit pas contenir d'espaces. Vous pouvez les supprimer ou les remplacez par des caractères autorisés (le tiret bas par exemple). Cliquez sur OK, l'enregistrement commence. A partir de ce moment, toutes vos manipulations dans Excel sont traduites et enregistrées. Effectuez donc quelques manipulations dans le tableur :

  C'est tout ce que l'on cherche à enregistrer ici... il faut donc demander à Excel d'arrêter l'enregistrement, en utilisant le menu Outils / Macro /  Arrêter l'enregistrement (qui remplace l'ancienne fonction "Nouvelle macro". Notez que ce même bouton a dû s'ouvrir dans les barres d'outil). Votre première macro est enregistrée !


Exécutez votre macro

 

  Votre première macro est enregistrée, voyons maintenant comment l'exécuter. Il y a diverses façons d'accéder à une macro, nous avons d'ailleurs déjà vu plus haut qu'il était possible de leur associer un raccourci lors de l'enregistrement. Avant de l'exécuter, effacez la valeur de la cellule B1. Pour lancer la macro, ouvrez le menu Outils / Macro / Macros... vous devriez la retrouver dans la liste (ici sous le nom "ma_premiere_macro"). Sélectionnez la puis cliquez sur "Exécuter" : la cellule B1 doit à nouveau contenir le texte "bonjour" puisque les actions enregistrées ont été répétées.

Ca n'est pas plus compliqué ! L'intérêt est maintenant de savoir la modifier et de créer vos propres macros .


Modifier et créer une macro

 

  Nous l'avons vu, l'enregistreur de macros d'Excel est très utile pour la création de macros sans connaissances particulières. Mais la puissance du langage utilisé ne se limite pas à la reconstitution de simples tâches répétitives. Vous allez maintenant découvrir ce qu'est la programmation et tous les avantages qu'elle peut apporter à vos classeurs Excel.

Vous avez enregistré et exécuté une macro, voyons maintenant où est comment elle est stockée... toujours dans le menu Outils / Macro, sélectionnez l'option  Visual Basic Editor. Un nouveau logiciel s''exécute : l'éditeur Visual Basic. Visual Basic ? Il s'agit du langage de programmation utilisé par excel pour les macros. La macro enregistrée doit être stockée dans le Module1. Faites un double-clic sur ce module pour afficher son contenu et découvrir à quoi ressemble réellement votre macro !

Visual Basic Editor pour les macros


Etude de la macro générée par Excel

 
Sub ma_premiere_macro()

  Une macro commence toujours par Sub nom_de_la_macro(). Nous verrons plus loin que les parenthèses ont une utilité spécifique... mais chaque chose en son temps.

' ma_premiere_macro
' Macro enregistrée le 11/02/2005 par Cédric MICHEL

  Vous pouvez insérer des commentaires dans vos macros en commençant la ligne par une apostrophe ( ' ). Les commentaires sont très utiles pour détailler votre code. Ils ne sont bien sûr pas interprétés lorsque le code est exécuté ! Ils vous permettent simplement d'y voir plus clair lorsque vous revenez sur un code que vous avez créé depuis longtemps (ou à une autre personne de comprendre votre raisonnement).

    Range("A1").Select

  Lors de la création de la macro, nous avons commencé par sélectionner la cellule A1. Range("A1") indique la (ou les) cellule(s) et .select indique qu'il faut selectionner les cellules spécifiées. Remarquez au passage : vous utilisez ici un terme Anglais ! Ce n'est pas parce que votre logiciel est en Anglais ou qu'il est mal configuré, mais parce que tout langage de programmation utilise l'Anglais...

    ActiveCell.FormulaR1C1 = "bonjour"

  La cellule A1 a été sélectionnée. ActiveCell indique que l'on va effectuer une action sur la cellule en cours, et .FormulaR1C1 indique quelle action nous allons effectuer, c'est à dire définir la formule de la cellule : "bonjour".

    Range("A1").Select

  Nous revenons à la cellule A1 (en validant la saisie par Entrée, Excel est automatiquement passé à la cellule A2... il a donc fallu resélectionner la cellule A1).

    Selection.Font.Bold = True

  Ensuite, nous avons mis en gras la cellule A1 : Selection (cellule sélectionnée) .font (police... en Anglais) .Bold (Gras... encore un mot Anglais) = True (= Vrai, et oui, l'Anglais est vraiment utile ;-)

    Selection.Cut

  Nous avions coupé la cellule A1 : selection.cut (cut = couper).

    Range("B1").Select

  Nous avons sélectionné la cellule B1 : Range("B1").select

    ActiveSheet.Paste

  Pour y coller le contenu de la cellule A1 sélectionnée : ActiveSheet (Feuille en cours) .Paste (coller).

End Sub

Une fonction commence par Sub (voir plus haut)... et se termine par End Sub !


Optimisation de la macro générée par Excel

 

  La programmation est donc surtout une question de logique. Il faut bien sûr avoir certaines connaissances des fonctions à utiliser, mais après quelques exercices, vous finirez par en connaître les principales. Plus vous aurez utilisé les macro, plus vous connaîtrez de formules, et plus vous pourrez optimiser vos formules. En examinant bien le code de la macro générée par l'enregistreur d'Excel, on s'aperçoit en effet qu'il contient des lignes inutiles :

Notre macro de 7 lignes tiend donc maintenant sur 3 lignes...

Sub ma_premiere_macro()
'
' ma_premiere_macro Macro
' Macro enregistrée le 11/02/2005 par Cédric MICHEL

    Range("A1").FormulaR1C1 = "bonjour"
    Range("A1").Font.Bold = True
    Range("A1").Cut Destination:=Range("B1")
End Sub

Si vous avez besoin d'aide pour une fonction, pensez à poser vos questions sur le forum !