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


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 travailer avec une nouvelle instance?

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 "crashe" ou son code VBA est bloqué (par ex. par une itération infinie), les autres instances restent opérationnelles.
  • 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).

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.

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.

 

Explications concernant le 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 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 égal à False.

 

9 0

Pourrait vous intéresser

Partagez cette page...
Share on FacebookShare on Google+Share on LinkedInTweet about this on TwitterShare on RedditShare on TumblrDigg thisEmail this to someone

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

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

  • E. Gatto

    Bonjour,

    Je me suis servie de ce code pour gérer des problèmes de mémoire. Néanmoins, quand je ferme un classeur sur une autre instance, Excel reste ouvert. Je voudrais savoir comment fermer une instance en VBA Excel. Si vous avez une idée, elle serait la bienvenue !

    • excel-malin.com Auteur du billet

      Bonjour Madame (Mademoiselle?),
      la solution est heureusement très simple. Pour fermer une instance d'Excel, il faut utiliser la propriété .Quit de l'Objet (= instance) approprié.

      1) Si vous voulez fermer l'instance crée par le code sur cette page, vous devez ajouter la ligne objExcel.Quit à l'endroit ou l'instance doit se fermer (donc je supposes après la fermeture du fichier).

      2) Si vous voulez fermer l'instance originale en laissant la nouvelle instance ouverte, il faut la ligne suivante Application.Quit

      3) Si vous voulez fermer Excel complètement, vous devez utiliser les deux instructions consécutivement (et commencer par la nouvelle instance). Le code à ajouter serait donc:
      objExcel.Quit
      Application.Quit

      J'espère que ceci répond à votre question.
      Cordialement,
      Martin Hudec