Icône de la ressource

VBA - Fusionner les Instances Excel - Forcer Excel à n'utiliser qu'une seule instance V5b

Le fichier à télécharger contient:
  1. Le Module_MergeExcelInstances,
  2. Le Module_LockProcess,
  3. Le Module_SettingPerso,
  4. La Class_MergeExcelInstancesAppli,
qui gèrent la fusion des instances Excel.​
Le fichier est à installer comme in Complément (AddIn) Excel et gère automatiquement la fusion des instances.​
Les 3 Modules et le Module de Classe peuvent être intégrés dans un Projet VBA Complément (AddIn).​
Il faudra juste modifier l'Argument de Compilation Conditionnelle (Propriétés du VBAProject) CCA_STANDALONE_ADDIN = 0.
Voir les commentaire sur la feuille:​
1750741193776.png
Notes:​

Principe:
Lors de l'ouverture d'un deuxième classeur ou plus, Excel regroupe les classeurs en une seule instance ou créé différentes instances en fonction de critères seulement connus d'Excel pouvant être la source du fichier Excel ou d'autres éléments.​
Cela a été initialement conçu pour les applications Office 32 bits limitées à 3 Go de mémoire pour permettre de gérer plusieurs classeurs volumineux.​
Mais la multiplication des instances pose problème lorsqu'une Macro doit, par exemple, avoir une visibilité sur tous les classeurs ouverts ou permettre l'utilisation du collage spécial, la liaison entre différents fichiers, la copie de grandes quantités de données, etc...​
Ce code, installé en tant que Complément, permet de détecter la création d'une instance #2 et de la fusionner dans l'instance #1.​
S'il y a plusieurs instances créées successivement dont la création est détectée, le processus de fusion est sérialisé, chacune devenant l'instance #2 après avoir attendu son tour.​
-> Le(s) classeur(s) de l'instance #2 sont fermés (sans enregistrement, ils viennent juste d'être ouverts) .​
-> L' instance #2 est arrêtée.​
-> Tous les classeurs fermés sont ré-ouverts dans l'instance #1.​
Ce processus est relativement rapide et n'a que peu d'effet visuel.​
Dans le cas ou plusieurs instances sont créées simultanément, toutes les instances additionnelles sont traitées ensembles comme l'est l'instance #2 dans le cas ci-dessus.​
Noter qu'à l'ouverture d'un classeur, Excel crée toujours une nouvelle instance temporaire.​
Excel fusionnera normalement (*) cette nouvelle instance temporaire avec la dernière créée.​
Dans le cas contraire Excel en fera une instance indépendante candidate pour le processus de fusion de cette Macro.​
L'instance temporaire n'est pas détectée comme instance par la macro car la détection des instances attend qu'Excel ait terminé son processus de lancement et décidé du sort de l'instance temporaire (*).​
(*) Dépend de:​
1 - Le choix d'Excel de fusionner ou non les instances (critères inconnus).​
2 - La clé de registre HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Options\DisableMergeInstance​
Mise en œuvre très simple:
  • Enregistrer le fichier en tant que Complément (AddIn) d'extension .xlam et l'activer (Options / Compléments / Atteindre / Cocher la case correspondante).

  • Fermer tous les classeurs (pour être sûr de ne démarrer qu'avec une seule Instance qui doit être identifiée par la Macro).
Versions:
  • V1 - Initiale
  • V2 - Correction déclaration API non VBA7
  • V3 - Remplacement du mécanisme de boucle de surveillance des instances par un artifice sur l'évènement Application.WindowResize() pour provoquer la fusion des instances par l'instance #1.
    Gestion de la création d'instances multiples simultanées.
  • V4 - Fermeture des instances résiduelles actives persistantes sans classeur à la création d'une ou plusieurs instances simultanées et modif du nettoyage de la dernière instance si elle persiste après la désactivation du dernier classeur.
  • V5 - Ajout des Arguments de Compilation Conditionnelle:
    1750741210230.png
  • V5b - Modification pour clarté de 2 commentaires dans le code
Retour