Forums | Contact | Plan du site Menu Accueil » Excel et Visual Basic
 
Présentation
Utilité d'Excel
Présentation des menus
 
Manipulation des macros
Qu'est-ce qu'une macro ?
Création de macros
Se déplacer dans les tableaux
Macros et barres d'outils
 
Personnalisez vos classeurs
Créer votre splash screen
Fermer

Etude de votre première macro

  Nous allons maintenant étudier votre première macro générée par Excel (si vous arrivez directement sur cette page, revenez à la fiche précédente qu'est-ce qu'une macro). Nous verrons également un point important : l'optimisation de cette macro.


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. Pour vous familiariser avec le langage Visual Basic, nous vous conseillons de vous documenter et de suivre les exemples d'ouvrages tels que celui-ci. 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 :

  • le code contient deux lignes pour définir la formule de la cellule A1 : une ligne pour sélectionner la cellule et une seconde pour définir la formule. Excel n'a fait que coder les manipulations exactement comme elles ont été effectuées, donc l'une après l'autre. C'est également possible en une ligne :

    Optimiser une formule VBA

  • même chose pour mettre en gras une cellule : on rassemble le tout sur une ligne.

  • faites une recherche de la fonction cut dans l'aide du logiciel Visual Basic Editor. En s'intéressant de plus près à cette fonction, on voit qu'il est possible de définir directement la cellule de destination (voir l'aide).

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 !


© Cédric MICHEL - conseil & création ( 2003 / 2019 )