VBA: Ouvrir un Classeur dans une nouvelle instance d’Excel

Dans cet article, vous apprendrez pourquoi travailler (ou pas) avec des différentes instances d'Excel et comment on peut gérer les instances dans VBA…

Qu'est-ce qu'une "instance" d'Excel?

Une "instance" d'Excel est une notion qui peut paraitre un peu abstraite. En fait, à chaque fois que vous ouvrez Excel (ici, on parle d'ouverture de logiciel, pas d'ouverture d'un fichier Excel), une nouvelle instance est créé. L'instance n'a pas de lien direct avec les fichiers ouverts et le nombre d'instances d'Excel ne correspond pas au nombre de fichiers.

Cette notion est plus importante pour un développeur en VBA que pour un utilisateur qui souvent ne remarquera pas s'il travaille avec une ou plusieurs instances (et il n'a d'ailleurs pas besoin de le savoir).

Généralement, l'utilisateur utilise une seule instance avec un certain nombre de fichiers ouverts dans cette instance. Une instance Excel peut contenir un, deux, cinq mais aussi zéro fichier ouverts.

Pourquoi vouloir travailler avec une nouvelle instance d'Excel?

Travailler avec plusieurs instances d'Excel a plusieurs avantages, notamment:

  • La possibilité de lancer des procédures VBA séparément et en parallèle – par exemple: Classeur_1 dans Instance_1 ouvre dans une nouvelle instance (Instance_2) un Classeur (Classeur_2) qui contient du code dans l'événement Workbook_Open. Ainsi, le procédure dans le Classeur_1 continue à tourner après l'ouverture du Classeur_2. Et, parallèlement, la procédure lancée dans Workbook_Open du Classeur_2 peut tourner dans l'Instance_2 indépendamment du Classeur_1.
  • Si, pour une raison ou une autre une instance "plante" ou son code VBA est bloqué (par ex. par une itération infinie), les autres instances restent opérationnelles Vous ne perdez pas votre travail et vous ne perdez pas le temps à devoir rouvrir tous les fichiers qui étaient ouverts…
  • Il est possible d'avoir plusieurs fichiers avec le même nom ouverts en même temps (chaque fichier dans une instance séparée). Cela peut servir notamment pour faire des comparaisons entre des fichiers (par exemple entre des versions différentes d'un même Classeur). Par comparaison, ceci n'est pas possible à l'intérieur d'une seule instance – dans une instance, chaque fichier ouvert doit avoir un nom différent.

Il est donc relativement intéressant d'utiliser différentes instances pour un utilisateur intensif ou pour des procédures qui permettent/nécessitent de fonctionner simultanément.

Le prix à payer pour ces avantages est l'utilisation plus importante de la mémoire de l'ordinateur (ce qui peut ralentir les autres applications) et une gestion de code VBA plus complexe au cas où les différentes instances séparées doivent communiquer entre elles. Cependant, ces deux cas ne concernent que des applications vraiment complexes et seuls les experts en VBA pourraient en être impactés.

Si vous souhaitez ouvrir une nouvelle instance d'Excel directement dans Excel sans devoir passer par VBA, suivez les instructions de ce tutoriel: Ouvrir plusieurs instances d’Excel (2013, 2016, 2019 et 365)

Code VBA: Ouvrir un Classeur dans une nouvelle instance d'Excel

Et voici le code VBA qui vous permettra d'ouvrir un Classeur dans une instance séparée. Comme vous pouvez le constater, avant d'ouvrir un Classeur Excel, on crée un nouvel objet (objExcel qui est une nouvelle instance de l' Application.Excel)

 

Explications concernant ce code VBA

L'idée est de créer un nouveau Object qui est défini comme Application / Excel. On ouvre le Classeur déterminé à l'intérieur de ce nouveau Object.

Il est également possible de créer la nouvelle instance d'Excel en mode caché (l'utilisateur ne verra pas qu'une nouvelle instance a été créée). Pour cela, l'instruction objExcel.Visible doit être égale à False.

Pour aller plus loin en VBA

Et pour terminer, une petite sélection des articles sur VBA qui pourraient vous être utiles…

 

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

9 commentaires sur “VBA: Ouvrir un Classeur dans une nouvelle instance d’Excel”