Accueil | Ce site | CV | Excel | Livre d’or | Macros XL4 | Modèles | VBA

 L’enregistrement automatique du code VBA

Présentation

La façon la plus simple de découvrir VBA est l’enregistrement automatique d’une macro, accessible grâce à l’icône de la barre d’outils VBA (figure 1).


Fig. 1 - La barre d’outils VBA

Un clic sur cette icône provoque l’enregistrement automatique d’une macro : tout ce qui est réalisé, création d’un classeur, entrée de formules dans les cellules, formatage, … est traduit en code VBA. Cela sert à réaliser des macros très simples, ou à examiner le code généré, pour comprendre comment fonctionne VBA et se familiariser avec le vocabulaire et la syntaxe.

L’enregistrement automatique peut également servir de pense-bête pour retrouver les noms, les méthodes et les propriétés des objets d’Excel : quelqu'un ne se rappelant pas les propriétés permettant de formater une cellule, peut déclencher l’enregistrement automatique et effectuer ce formatage manuellement.

Pour générer l’exemple de code ci-après, les opérations suivantes ont été réalisées :

  1. Sélection des cellules D11 à D13.
  2. Dans le menu “Format”, commande “Cellule”.
  3. Dans le dialogue affiché, sélection de l’onglet “Police”.
  4. Choix d’une police en taille 12, “Geneva”, avec le style “Gras” et la couleur rouge.
  5. Fermeture du dialogue.
  6. Dans la barre d’outils “Mise en Forme”, clic sur l’option d’alignement “Centré”.

Voici le code généré (avec Excel 98) :

Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 28/01/2003 par Michel Gaboly
'
    Range("D11:D13").Select
    With Selection.Font
        .Name = "Geneva"
        .FontStyle = "Gras"
        .Size = 12
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 3
    End With
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .ShrinkToFit = False
        .MergeCells = False
    End With
End Sub

Le code paraît étonnamment long pour le peu d’opérations réalisées. En négligeant les commentaires affichés en vert, il se décompose en 3 blocs.

Sub Macro1()
    Range("D11:D13").Select
    With Selection.Font
        ...
    End With
    With Selection
        ...
    End With
End Sub

La première ligne correspond à la sélection des cellules concernées.

Le premier bloc, With Selection.Font ... End With définit les propriétés relatives à la police (Font en anglais). Ce bloc affecte une valeur non seulement aux éléments mis à jour manuellement, mais aussi aux autres éléments accessibles dans le même onglet (figure 2).


Fig. 2 - L’onglet “Police” du dialogue “Format de cellule.

Outre les 4 propriétés modifiées (police, taille, style et couleur), le code généré a également affecté une valeur à la propriété Underline (soulignement) et aux 5 attributs proposés dans le dialogue (Barré, Exposant, Indice, Relief et Ombré).

Le second bloc, With Selection ... End With définit les propriétés relatives à l’alignement. Lors de l’enregistrement de la macro, c'est le bouton “Centré” d’une barre d’outils qui a été utilisé, mais cette façon de procéder est considérée par l’enregistreur comme un raccourci, et la macro comporte les mêmes lignes que si on était passé par l’onglet “Alignement” (figure 3).


Fig. 3 - L’onglet “Alignement” du dialogue “Format de cellule.

Retraitement

Il est en général possible de simplifier le code obtenu :

La première méthode consiste à ne conserver que les lignes correspondant à l’une des propriétés que l’on souhaitait explicitement modifier. Les autres propriétés resteront invariantes.

Il existe un second aspect, beaucoup plus important, car il est lié à la compréhension de VBA : il est superflu de sélectionner des cellules pour modifier leurs propriétés.

Compte tenu de ces éléments, voici une version simplifiée de la macro obtenue par enregistrement.

Sub Macro1Bis()
    With Range("D11:D13").Font
        .Name = "Geneva"
        .FontStyle = "Gras"
        .Size = 12
        .ColorIndex = 3
    End With
    Range("D11:D13").HorizontalAlignment = xlCenter
End Sub

Cette version de la macro réalise exactement les opérations effectuées pour générer la macro précédente, à l’exception de la sélection des cellules D11 à D13. Nous avons vu en effet que cette sélection, inévitable pour modifier manuellement le formatage de ces cellules, est superflue en VBA.

Conclusion

Il faut considérer l'enregistrement automatique comme un outil d’apprentissage ou, nous l’avons déjà évoqué, comme un pense-bête.

Par ailleurs, le code ainsi obtenu est en général inutilement long, car il modifie des propriétés auxquelles on ne souhaitait pas toucher. L’importance du code généré peut désorienter, mais il ne faut surtout pas se laisser décourager pour si peu !