Histoire de recentrer la discussion sur ses aspects techniques.
Devoir créer un lanceur qui ouvre 22 fichiers (le nombre n'a pas d'importance ici) pour lancer des macros contenues dans ces fichiers révèle un défaut de conception (ce n'est pas une attaque personnelle, c'est un constat technique). Il serait plus logique et stable que le code soit placé dans le "lanceur" qui deviendrait ainsi "l'application" qui piloterait les fichiers. Elle pourrait alors ouvrir les fichiers de données et y effectuer des traitements, en extraire des données, ... Bref, faire son boulot d'application.
Il serait pertinent de se poser la question "pourquoi 22 fichiers". Une conception nécessitant ce genre de montage ne se rencontre pas tous les jours "dans la vraie vie". Je doute qu'elle soit nécessaire à une gestion de données généalogiques. Si vraiment les données sont contenues dans x fichiers, les bonnes pratiques enseignent de rapatrier les données des x fichiers dans le fichier applicatif puis de travailler en local.
Pour faire référence à la remarque de Patrick sur les multi-instances, il me semble inintéressant d'ouvrir le fichier applicatif dans une autre instance que les fichiers de données. Ca complique inutilement une tâche qui est déjà trop complexe à l'heure actuelle. Donc, il est inutile d'en parler ici et de mettre en place cette solution.
Si l'on doit ouvrir un fichier, une bonne pratique à mettre en oeuvre par l'apprenti est de créer une variable qui contient ce classeur.
set wb = workbooks.open(...). Ca permet de manipuler plus facilement le fichier. Il faut également noter que lorsque l'on ouvre un classeur, il devient le classeur actif. Il faut bien entendu tenir compte de cela dans la gestion du code. C'est notamment pour cela que l'on essaie de travailler en local autant que possible. Ca évite de se mêler les pinceaux entre activeworkbook, thisworkbook, et de devoir être attentif à quel classeur est actif lors de l'exécution du code.
Il faut sortir absolument les noms de fichiers du code et les stocker dans une feuille de l'applicatif. Idéalement, surtout vu l'arborescence, il serait intéressant de regrouper les fichiers de données dans le même dossier que l'applicatif. Ca permettrait de limiter les problèmes de déplacement de fichiers (au sens large, ce qui veut dire que renommer un fichier ou un dossier dans l'arborescence revient à déplacer) car on pourrait alors travailler avec ThisWorkbook.Path pour simplifier le code et limiter les erreurs de saisie au strict minimum.
Il est extrêmement rare de devoir, d'un fichier, lancer du code se trouvant dans un autre fichier. Ca doit de suite interpeller sur le défaut de conception. Perso, en plus de 25 ans d'Excel, je n'ai jamais eu besoin de créer un montage pareil.
Partager