Dans cet article nous allons voir deux méthodes qui vont permettre de versionner du code VBA avec Git (à noter que la première méthode marchera également avec SVN, Mercurial ou autre…). Grâce à cet article, vous aurez des outils simples à utiliser pour versionner votre code VBA ! 😊
Sommaire
Pourquoi utiliser un logiciel de version de contrôle ?
Un logiciel de version de contrôle va vous permettre de collaborer efficacement avec d’autres personnes sur un projet (vous allez par exemple pouvoir en une ligne de commande envoyer/recevoir des modifications effectuées). Chaque modification sera historisée, vous pourrez donc à tout moment revenir à une version précédente ou voir ce que vous aviez fait.
La difficulté à utiliser un logiciels de gestion de version (VCS en anglais) vient du fait qu’un fichier Excel contenant des macros (.xslm, .xslb …) est une archive contenant de multiples fichiers.C’est en quelque sorte une boîte noire. On ne peut donc pas suivre directement ses modifications. Une façon de contourner ce problème est d’extraire les modules et les feuilles de tout le projet automatiquement vers un dossier (qui servira à la version de contrôle). L’autre façon de faire est d’installer une extension git qui nous permettra de voir individuellement les modules contenus dans le classeur.
Remarques sur les deux méthodes
Il n’est pas possible de modifier un fichier Excel local qui est déjà ouvert. Pour appliquer les modifications dans les deux méthodes, il faudra impérativement fermer votre classeur.
Si vous activez le partage du fichier, vous pourrez récupérer les modifications sans fermer votre fichier mais la modification du fichier qui s’en suivra ne sera pas prise en compte. Voilà vous êtes prévenus 😊
Comparatif des deux solutions
La liste de ces solutions n’est pas exhaustive, ce sont simplement 2 solutions fonctionnelles que j’ai testé et qui m’ont apporté satisfaction.
Solution
Exporter les fichiers via VBSync
Utiliser l’extension Git : Git Excel
Principe
On va installer un outil Open Source : VBA Sync Tool pour pouvoir extraire le code dans un dossier à part puis versionner ce dossier comme on le souhaite.
On va installer l’extension Git : Git XL. Elle nous permet de versionner un document Excel sans exporter ses modules.
Facilité de mise en place
Très facile, quelques minutes suffisent
Très facile également.
Avantages
Compatible avec tous les logiciels de gestion de version. Ne nécessite aucun code tier ni configuration Excel. Fonctionne avec tous types de documents office. Solution Open Source.
Pas besoin d’exporter le fichier en modules, on n’a pas à exécuter les étapes d’extraction et d’import de module. On peut versionner plusieurs classeurs Excel en même temps. Solution Open-Source
Inconvénients
Nécessite des actions supplémentaires : Il faut exporter le code vers le dossier qui servira au suivi avant de commit. Il faut importer le code vers le fichier lorsqu’on veut récupérer des modifs. On ne peut exporter et importer le code qu’un fichier à la fois, il faut donc un repo git par fichier Risque de faire une mauvaise manipulation en mélangeant l’import de module au lieu de l’export..
Il n’est pas possible d’ajouter à un commit certains fichiers uniquement : c’est tout ou rien.
Remarques
A priori, on peut se passer de VBA Sync Tool et faire l’export via du code VBA qui s’exécute après le trigger « worksheet on save » mais je n’ai pas testé la solution.
Conclusion
Cette méthode, bien que fastidieuse à utiliser au quotidien convient parfaitement pour des projets courts que vous voulez versionner sans passer du temps à devoir configurer la solution.
Cette méthode est selon moi plus aboutie que la première, le seul point négatif est l’incapacité de sélectionner précisément les fichiers qui seront dans le commit.
Tableau comparatif des deux solutions de versioning VBA testées
Première solution VBA Sync Tool
Marche à suivre
On va tout d’abord télécharger un outil qui va nous permettre en un clic d’exporter tout notre code comme des fichiers textes dans un dossier et qui nous permettra aussi facilement d’importer tout ce qui se trouve dans ce dossier.
J’ai choisi d’utiliser VBA Sync Tool, un projet OpenSource qui répond parfaitement à ce besoin. L’avantage principal que j’y ai trouvé est qu’il ne nécessite aucune configuration dans Excel et aucun code supplémentaire. En effet une solution courante consiste à faire cette action d’export grâce au trigger « workbook.aftersave » mais cela implique que cette portion de code soit éditée pour chaque personne avec qui vous allez collaborer.
On va ensuite créer notre Dossier qui fera office de repository puis nous allons procéder comme n’importe quel dossier qui contiendrait uniquement des fichiers textes. Personnellement, j’ai créé le dossier « Solution1 – VBSYNC »
Je lance VBA Sync Tool en indiquant bien où se trouve mon fichier et où se trouve mon dossier de gestion des sources :
Il faut ensuite cliquer sur le bouton « Rafraichir » et les modifications apparaîtront dans la zone orange :
On vérifie ensuite que l’option « Extraire le VBA du fichier Office » est bien cochée puis on clique sur « appliquer ».
Résultat
Il n’y a plus qu’à ouvrir un « invite de commande » et initialiser le repo git.
Pour récupérer des modifications
J’initialise mon repository git, je fais mon premier commit et je crée une branche « develop » sur laquelle je viens me placer :
Je fais une modification dans mon code puis, avant de commit, je refais les opérations d’export des modules comme précédemment.
Mes modifications ont bien été publiées :
Je commit et je récupère mes modifications sur ma branche Master :
Dans le cas où quelqu’un veut récupérer mes modifications :
Il n’aura qu’à pull mes modifications et les importer dans son classeur avec VBA Sync Tool via l’action suivante :
Il faut bien s’assurer de cocher « Publier les modifications VBA vers le fichier office » et que le classeur soit fermé..
Remarques
Vous pouvez ajouter d’autres fichiers comme un readme ou un gitignore dans votre dossier, ça n’explose pas à l’import 😉
Si le fonctionnement de VBA Sync Tool vous rebute comme c’est relativement fastidieux à utiliser, des macros peuvent se charger de l’import et de l’export de code de façon automatique. Cependant je n’ai pas testé cette solution. (Solution évoquée ici : https://www.xltrail.com/blog/auto-export-vba-commit-hook).
De la même manière, on peut apparemment Importer/Exporter son code de façon automatique (lors de la sauvegarde) via l’outil VBA Developer ( https://github.com/hilkoc/vbaDeveloper )
Conclusion sur cette méthode
Le point négatif c’est que je ne devrais jamais oublier d’extraire le VBA vers le dossier avant de commit ni de Publier les modifications vers mon document Excel après avoir pull. Cette méthode est néanmoins très simple à mettre en place et peut servir de solution temporaire lorsqu’on n’a pas envie de passer de temps sur de la configuration.
Seconde solution extension Git XL
Marche à suivre
L’installation consiste à lancer un exécutable et taper une ligne de commande, vous trouverez les instructions à cette adresse : https://www.xltrail.com/git-xl
Une fois fait, rendez vous dans le dossier qui contient votre classeur et initialisez votre repo .
On va modifier le fichier Excel sur une branche appelée « develop » et on va publier la modification sur notre branche « master ».
On est à présent sur develop, j’ajoute un commentaire à mon code. Je le commit, je me replace sur master et je fusionne, tout simplement 😊
Lorsque le message Unlink of file … failed apparait, fermez votre fichier Excel et appuyez sur « y ».
Conclusion sur cette méthode
On regrettera simplement le fait de ne pas pouvoir choisir quels fichiers ajouter et le fait de devoir fermer le classeur pour récupérer des modifications.
Remarques sur cet article
Les solutions proposées ci-dessus sont seulement le reflet de leurs possibilités à un instant T et il se peut qu’elles viennent à évoluer. Si vous connaissez des méthodes plus pertinentes, si une information dans l’article n’est plus d’actualité ou si vous avez une méthode pour appliquer une modification à un classeur sans le fermer, n’hésitez pas à laisser un commentaire ou prendre contact avec nous. Nous modifierons l’article avec plaisir pour qu’il soit le plus utile à tous ! 😊
Avant .Net 8, tester du code qui utilise DateTime.Now() n’était pas trivial, on devait faire en sorte de mocker la Clock dans nos tests. Depuis .Net 8, c’est beaucoup plus facile grâce à TimeProvider inclut par défaut !
En deux mots, TimeProvider est une classe abstraite et on va pouvoir injecter dans nos tests une implémentation “Fake” qui va nous permettre de changer la date actu...
La gestion des erreurs de son API est très importante pour que les consommateurs puissent avoir une description claire du problème mais c’est souvent fastidieux à maintenir.
On va voir comment avoir des statuts de réponse cohérent et des messages d’erre...
On va voir comment avoir en quelques minutes des assertions qui vont vérifier les endpoints de notre API avec des scénarios de ce genre:
Feature: Create a new account
As a visitor,
I can create an account to access the game
Scenario: A visitor c...
Depuis .NET 9, le le support d’OpenAPI est directement inclus dans .NET et ne passe plus par les librairies Swagger par défaut (plus d’info sur ce choix ici si jamais ça vous intéresse).
De façons simplifiée, la librairie Swashbuckle.AspNetCore.Sw...