Comment installer et réutiliser une macro ?

mug developpeur vba

Devenez développeur : notre initiation à VBA en 5 parties

  1. Découvrez la face cachée d'Excel : l'interface de programmation
  2. Créez votre première macro sans aucun code : enregistrez-la
  3. Installez et réutilisez une macro existante
  4. Prudence : sauvegardez vos fichiers avec macros !
  5. Relancez une procédure enregistrée ou installée

 

Dans cette série d’articles, nous détaillons un tutoriel complet pour faire nos premiers pas avec VBA. Ce n’est pas parce que vous ne connaissez rien aux macros et à VBA que vous ne pouvez pas les utiliser. Après avoir créé notre première macro avec l’enregistreur, nous allons voir comment installer une macro à partir du code récupéré. En fonction de son contenu, le mode opératoire peut changer quelque peu.


 

Présentation du contexte

Vous vouliez accélérer votre travail et après recherche sur Internet, vous avez récupéré un morceau de code VBA. C’est un ami ou un collègue à qui vous en avez parlé qui vous l’a envoyé sans plus d’explications. Et vous ne savez pas quoi en faire...
Pas de panique, si ce n’est pas déjà fait, commencez par lire notre premier article pour débuter avec la programmation.
Ensuite procédons par étape pour être sûr de pouvoir utiliser notre code correctement.

 

Identifier une procédure VBA

Une procédure bornée

Un code VBA doit commencer par une ligne d’initialisation qui indique le type de procédure à exécuter. Il existe 2 catégories :

  • Sub : il s’agit d’une procédure classique qui exécute des commandes et agit sur un ou plusieurs classeurs
  • Function : il s’agit d’une fonction personnalisée, qui réalise des calculs et donne un résultat comme une fonction classique. On peut la réutiliser dans une autre procédure VBA ou même dans la feuille de calcul.

Comment les reconnaître ? En regardant la première ligne du code. Il se peut qu’elle commence par Public ou Private, nous ne traiterons pas de la différence entre les deux dans ce tutoriel. Nous cherchons simplement à identifier un des 2 ‘mots-clés’ Sub ou Function.

Exemples procedures Sub Function VBA

Chaque procédure se termine par une ligne End : End Sub ou End Function selon l’initialisation qui a été faite. L’intégralité d’une procédure est donc définie entre ces deux lignes de commandes.

Commandes fin end sub function VBA

Les procédures Function, ainsi que la plupart des Sub, portent un nom libre. A l’exception de quelques caractères interdits, on peut leur attribuer le nom qu’on veut.

Exemples : une procédure pour afficher les couleurs correspondant aux 56 codes ColorIndex et une fonction pour inverser l’ordre des caractères d’un texte

Sub ColorIndexVBA()
For i = 1 To 56 Step 1
Cells(i, 1).Interior.ColorIndex = i
Next i
End Sub

Function INVTXT(ByVal Text As String) As String
INVTXT = StrReverse(Text)
End Function

 

Les procédures liées à des événements

Il existe aussi des procédures déclenchées par des événements sur le classeur ou la feuille de calcul Excel. On les reconnait à leur nom spécifique non modifiable. Il commence par ‘Worksheet_’ ou ‘Workbook_’ pour les événements liés respectivement à la feuille de calcul et au classeur, ces deux termes en étant la traduction anglaise.
Elles sont généralement précédées du préfixe ‘Private Sub’.

Procedures declenchement evenements workbook worksheet VBA

Si leur nom n’est pas modifiable, c’est parce qu’Excel a besoin d’une syntaxe précise pour savoir à quel événement se rapporte chaque procédure : Worksheet_SelectionChange pour un changement de sélection dans la feuille de calcul, Workbook_Open pour l’ouverture du classeur…

Exemples : une procédure Worksheet qui affiche l’adresse de la dernière cellule modifiée et une procédure Workbook pour protéger la feuille 1 à l’ouverture en la laissant accessible à VBA

Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox Target.Address
End Sub

Private Sub Workbook_Open()
With Worksheets(1)
.Protect "1234", Contents:=True, UserInterfaceOnly:=True
End With
End Sub

 

Et si on a rien de tout ça ?

Si nous n’avons qu’un bout de code sans initialisation de procédure avec un Sub ou un Function, c’est plus difficile à déterminer.

Une fonction personnalisée nécessite une ligne de définition pour les variables. Idem avec les événements personnalisés que nous venons de voir.
Donc sans instruction spécifique, il est toujours préférable d’ajouter un code à un Sub ‘standard’ sans événement lié.

Exemple : extrait de la procédure d’affichage des couleurs vue ci-dessus

For i = 1 To 56 Step 1
Cells(i, 1).Interior.ColorIndex = i
Next i

 

Maintenant que nous avons déterminé à quel type de procédure nous avons affaire, voyons la marche à suivre pour la réinstaller convenablement.

 

Où placer le code ?

Installer le code est très facile, un simple copier-coller suffit. La difficulté est de savoir où l’insérer pour un bon fonctionnement. Détaillons au cas par cas en reprenant les exemples de codes fournis dans la section précédente.

Commençons par ouvrir la fenêtre Visual Basic Editor puis dans le volet de gauche, nous repérons le projet VBA lié à notre classeur.

 

Installer une procédure Function ou Sub ‘classique’

Ce type de procédure n’étant pas lié à un objet Excel, classeur ou feuille de calcul, on les insère dans un objet propre à VBA : un module. Excel en fait de même lorsqu’on enregistre une macro. Pour ça, on sélectionne le projet du classeur dans l’explorateur puis on clique sur le menu Insertion > Module.

La page de code ajoutée est pour le moment vide mais c’est ici que nous insérons notre macro. On clique simplement à l’intérieur puis on colle le texte récupéré.

Insertion Sub Function module VBA installer macro
 

Installer une procédure liée à un événement

Les procédures liées aux événements de feuille ou de classeur doivent être insérées dans les objets du même type.

Pour l’objet classeur, c’est simple, il y en a un seul par fichier. Il est identifié par une feuille blanche avec un logo Excel et le nom ThisWorkbook. Cette fois, nous double-cliquons dessus pour ouvrir la page de code associée. Il suffit alors de coller le code.

Insertion procedure workbook feuille code ThisWorkbook installer macro

Une procédure Worksheet est propre à une seule feuille de calcul, il faut donc choisir celle où on veut l’installer.
Elles sont symbolisées par une feuille blanche avec un quadrillage. On repère celle qui nous intéresse à l’aide du nom entre parenthèses. De nouveau, on double-clique pour ouvrir la page de code et on y colle la procédure copiée.

Insertion procedure worksheet feuille code installer macro
 

Créer une procédure pour un morceau de code isolé

Si notre morceau de code n’est pas initialisé, sans Sub ou Function pour l’introduire, nous allons le placer dans un Sub créé par nos soins.
Comme pour la 1ème manipulation, on clique sur le menu Insertion et on choisit un module. A l’intérieur, on crée un Sub et on lui attribue un nom. Ci-dessous, j’ai introduit la procédure Sub ProcedureTest.

Creation procedure Sub module VBA

En validant, les parenthèses et la ligne de fin ‘End Sub’ sont ajoutées automatiquement. On se place alors entre les deux lignes et c’est ici que nous insérons le code récupéré.

Insertion code partiel Sub module VBA
 

L’installation se termine ici, c’est très rapide. Le plus long c’est finalement de trouver dans quel contexte on se trouve.
La plupart du temps, nous sommes confrontés au premier cas : une procédure Sub indépendante à placer dans un module. Dans le doute, il vaut mieux procéder de cette manière. C’est la méthode la moins bloquante pour l’exécution d’une procédure.

Notre code installé, ne reste plus qu’à voir comment l’exécuter, c’est l’objet de notre prochain article.

 

Abonnez-vous à la newsletter

Illustration couverture ebook 100 trucs et astuces pour Excel-ler au travail

Et recevez gratuitement l'ebook 100 trucs et astuces pour Excel-ler au travail (5€ sur Amazon)

Votre adresse mail ne sera pas communiquée et vous pourrez vous désabonner à tout moment.

Taggé , , .Mettre en favori le Permaliens.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.