Il est souvent inutile de réinventer la roue.
Lorsque c’est possible, reprendre des éléments (code générique, formulaire, feuille de classeur, …) ou installer une bibliothèque nous fera gagner un temps précieux en création comme en maintenance.
À travers ce billet, nous allons nous pencher sur des moyens de réutiliser du code.
Exports et imports
Pour commencer, nous pouvons réutiliser des fichiers sources ainsi que des feuilles.
C’est une solution intéressante pour reprendre de petits éléments d’un projet à un autre.
Exporter et importer des fichiers sources
Il est donc possible d’exporter et d’importer des fichiers sources, que ce soit un UserForm (extension .frm
), un module de classe (extension .cls
) ou tout simplement un module (extension .bas
).
Exporter
Pour exporter, il faut sélectionner l’élément dans l’arborescence du projet et cliquer sur "Exporter un fichier…" depuis le menu contextuel ou depuis le menu "Fichier", ou encore via le raccourci CTRL + E.
![Exporter le fichier depuis le menu contextuel (CTRL + E).](/media/galleries/24402/56b6b148-e5bc-44cf-9433-0f68d7d1ecf2.png)
Nous pouvons ensuite choisir où et sous quel nom stocker le fichier.
![Écriture du fichier à exporter.](/media/galleries/24402/6288c10f-b34e-4661-8fe5-96f4b5e24bde.png)
Importer
Pour importer, il faut cliquer sur "Importer un fichier…" depuis le menu contextuel ou depuis le menu "Fichier", ou encore via le raccourci CTRL + M.
![Importer le fichier depuis le menu Fichier (CTRL + M).](/media/galleries/24402/dfa80d1a-7db3-4069-9509-67b98e61b172.png)
Un explorateur de fichiers s’ouvre alors, nous permettant de sélectionner le fichier souhaité.
![Sélection du fichier à importer.](/media/galleries/24402/5080b432-e6a2-4da0-b984-4b49ddbb9950.png)
Nous pouvons constater que le fichier à importer a été ajouté dans l’arborescence du projet.
Dans le cas où le projet contient déjà un fichier source du type et du nom indiqué, VBE numérotera automatiquement le fichier importé de manière à éviter un conflit de nommage.
Exporter et importer des feuilles
Le cas des feuilles est un peu particulier et ne fonctionne pas avec la méthodologie vue ci-dessus.
Pour cet exemple, nous partirons d’une feuille de calcul contenant le code suivant :
Option Explicit
Private Sub Worksheet_Activate()
MsgBox "Bonjour !"
End Sub
Private Sub Worksheet_Deactivate()
MsgBox "Au revoir !"
End Sub
Pour réutiliser cette feuille, il faut la déplacer (en veillant à cocher la case "Copie" dans ce cas) dans le classeur souhaité.
![Choix "Déplacer ou copier..." pour la feuille voulue.](/media/galleries/24402/bf379a43-20d6-4118-8827-170aa526e844.png)
Il faut ensuite choisir la destination (cadre orange ci-dessus) et choisir l’option de copie (cadre rouge ci-dessous) afin d’éviter de retirer la feuille du classeur d’origine.
![Fenêtre déplacer ou copier.](/media/galleries/24402/6c8866ec-23d6-415d-b39a-62e4f763618f.png)
Cela fait, nous pouvons vérifier que l’onglet est bien présent dans notre nouveau classeur et que le code fonctionne.
Dans le cas où le projet contient déjà une feuille du nom indiqué, la feuille sera automatiquement numérotée pour éviter un conflit de nommage.
À travers cette première section, nous avons vu comment exporter et importer des fichiers VBA et comment copier des feuilles.
Bibliothèques
Les bibliothèques sont un autre moyen de réutiliser du code.
Elles servent à étendre un projet en installant des fonctionnalités.
Références du projet VBA
Nous avons eu l’occasion de parler de la fenêtre des références au fur et à mesure de ces pages, en particulier pour les dictionnaires en liaison anticipée. Pour rappel, cette fenêtre est accessible via le menu "Outils" du VBE.
Durant nos projets, nos recherches peuvent nous mener à devoir installer telle ou telle référence. C’est donc ici que ça se passe !
Lors du partage d’un classeur avec macros, les références cochées ne sont pas toujours disponibles pour certaines versions d’Excel. Il y a donc parfois une adaptation à faire pour le destinataire (cocher une référence plus ancienne par exemple).
Macros complémentaires Excel
C’est une solution intéressante pour des éléments plus conséquents ou pour persister. Par contre, il n’est pas possible de reprendre des feuilles de cette manière.
Il existe différentes natures de complément (Excel, COM, …), mais nous nous concentrerons sur celles d’Excel.
Ajouter et retirer une macro complémentaire
Pour ajouter et retirer des compléments Excel, nous devons passer par la fenêtre adéquate. Cela se fait soit par le bouton "Compléments Excel" du ruban "Développeur", soit par le bouton "Atteindre" du menu "Compléments" dans les options du fichier.
![Fenêtre compléments.](/media/galleries/24402/432285ba-685e-4455-be04-cc66fe77bdfc.png)
L’installation d’un complément peut s’accompagner d’une modification de l’interface Excel (ruban, menu contextuel, …), permettant son usage.
Créer une macro complémentaire
Pour créer une macro complémentaire, il faut suivre différentes étapes.
Créer un nouveau classeur
Nous commençons en créant un nouveau classeur correspondant à notre macro complémentaire.
Développer le contenu de la macro complémentaire
Ensuite, nous devons développer nos fonctionnalités.
Pour cet exemple, j’ai ajouté un UserForm
dont j’ai changé la propriété Caption
par "Macro complémentaire" ainsi que la propriété Name
par "UserForm_MacroComplementaire"
![UserForm titré pour la macro complémentaire.](/media/galleries/24402/b2a8a6e1-5692-4255-b2fe-9ffbcecd27e5.png)
Ensuite, j’ai ajouté un peu de code :
Module MacroComplementaire
Option Explicit
Public Function Operation(ByVal dNombre1 As Double, ByVal dNombre2 As Double) As Double
Operation = dNombre1 + dNombre2
End Function
Public Function Ouvre_UserForm_MacroComplementaire()
UserForm_MacroComplementaire.Show
End Function
ThisWorkbook
Option Explicit
Private Sub Workbook_AddinInstall()
MsgBox "Merci d'avoir ajouté l'AddIn"
End Sub
Private Sub Workbook_AddinUninstall()
MsgBox "À une prochaine !"
End Sub
Protéger le code VBA (optionnel)
Cette étape est optionnelle, mais selon les cas nous pouvons vouloir protéger le code de la macro complémentaire avec un mot de passe robuste.
Il suffit de passer par l’onglet "Protection" de la fenêtre "Propriétés du projet" (menu "Outils" du VBE) pour cela.
![Verrouillage du projet VBA.](/media/galleries/24402/f0c3d5d2-5156-4273-88f0-504fa5426be1.png)
Renseigner les informations du document
Maintenant, nous allons renseigner un titre et une description pour notre macro complémentaire.
Depuis Excel, il faut cliquer sur "Fichier" puis "Informations" et lister toutes les informations possibles en cliquant sur "Afficher toutes les propriétés".
![Renseigner un titre et une description dans les informations du fichier.](/media/galleries/24402/2f65bd1d-334c-4ba5-bbb3-aafb7c053ee0.png)
Le titre se met dans la propriété Titre
et la description dans la propriété Commentaires
.
Mettre la propriété IsAddin à True
Une fois le code écrit et validé, nous pouvons passer la propriété IsAddin
de l’objet Workbook à True
depuis la fenêtre des propriétés.
![Propriété IsAddin pour l'objet Workbook.](/media/galleries/24402/16ae47dc-1e25-44d0-b54b-64089fb07894.png)
Cela va permettre de démarquer le classeur de type macro complémentaire des autres. Il fera alors parti de la collection AddIns
et non plus de Workbooks
.
En conséquence, nous ne voyons plus les feuilles de ce classeur et il n’est plus possible d’accéder aux informations du classeur, d’où la nécessité de faire cette étape à la fin.
Enregistrer le résultat via le VBE avec l’extension .xlam
Il est temps d’enregistrer le résultat final via le VBE avec le type "Complément Excel" (extension .xlam
). L’explorateur de fichiers nous propose par défaut un emplacement dédié aux compléments.
Nous pouvons observer la spécificité de l’icône.
![Icône macro complémentaire.](/media/galleries/24402/88ad6f06-5f46-4f24-b92d-1f2d134bab7d.png)
J’ai placé cette étape à la fin ici, mais il est préférable d’enregistrer régulièrement (avant de basculer le classeur en macro complémentaire) au risque de perdre son travail malencontreusement.
Une fois le résultat enregistré, nous sommes en mesure de l’ajouter dans nos classeurs comme étudié précédemment. Remarquez le déclenchement de l’événement lorsque nous ajoutons et retirons notre macro complémentaire.
Si nous effectuons des modifications dans notre macro complémentaire, celles seront alors répercutées. Par exemple, si nous changeons la somme en soustraction dans notre fonction Operation
, le résultat sera modifié en relançant la fonction. Autre exemple, si nous modifions notre UserForm
, nous aurons bien accès à la nouvelle version :
![Notre UserForm de macro complémentaire après modifications.](/media/galleries/24402/dbd6a838-9c06-4099-b578-5ab7ae6b3345.png)
Au fil de cette section, nous avons vu comment nous servir des bibliothèques pour gagner en simplicité et en temps.
Classeur de macros personnelles
Le classeur de macros personnelles, aussi appelé PERSONAL.XLSB
, est comme son nom l’indique, personnel.
Il permet de stocker du code (donc pas de réutilisation de feuilles par ce biais) pour tous ses classeurs. C’est en quelque sorte une bibliothèque à soi.
Enregistrer des macros dans le classeur personnel
Durant l’enregistrement d’une macro, il est possible de choisir le classeur de macros personnelles comme destination.
![Enregistrer une macro pour le classeur personnel.](/media/galleries/24402/0f809822-d4e8-4a54-8c2e-a736f8ef0ba5.png)
L’enregistrement lancé, nous effectuons quelques opérations et y mettons fin.
Nous pouvons constater qu’un fichier PERSONAL.XLSB
a bien été ajouté dans l’arborescence (si ce n’était pas déjà votre cas) avec notre code :
![Fichier PERSONAL.XLSB avec le code ajouté.](/media/galleries/24402/f9d8f629-633d-4561-8360-214f5b42affa.png)
Éditer le classeur personnel
Nous pouvons éditer ce classeur directement dès qu’existant (enregistrez une macro comme expliqué juste au-dessus pour le créer sinon).
Pour l’édition, nous pouvons le trouver dans l’arborescence de projet de l’éditeur VBE ou l’ouvrir via le chemin suivant (attention aux éléments masqués dans l’explorateur de fichiers) : C:\Users\VotreNomUtilisateur\AppData\Roaming\Microsoft\Excel\XLSTART.
Voilà tout pour ce classeur spécial.
Pendant ce billet, nous avons étudié la réutilisation de code par le biais des exports/imports, des bibliothèques et du classeur PERSONAL.XLSB
.
Pour des raisons de sécurité, soyez vigilant sur l’origine du code que vous souhaitez utiliser lorsque vous n’en êtes pas l’auteur.
Quelques ressources :
- La documentation pour l’installation de références
- Livre Programmation VBA pour Excel pour les nuls (Excel 2010, 2013 et 2016), de John Walkenbach
- Cette page