J'ai un fichier Excel qui est ouvert par un programme tiers et qui s'ouvre uniquement dans une nouvelle instance. Ce fichier s'appelle "Classeur1". Il s'agit d'un fichier que je génère quotidiennement pour extraire des données de mon logiciel.
Je cherche à exécuter une macro automatiquement à l'ouverture de ce fichier et depuis un autre fichier. C'est à dire qu'il s'exécute dès qu'il détecte l'ouverture de "Classeur1".
Le problème, la macro fonctionne parfaitement si j'ouvre un fichier "Classeur1" qui s'exécute dans la même instance que le fichier ouvert qui permet de déclencher la macro mais dès que je génère mon fichier et qui s'ouvre dans une nouvelle instance, cela ne fonctionne plus.
J'ai essayé de chercher sur Internet, j'ai pu voir des idées de code avec GetObject mais je n'arrive pas à faire fonctionner.
Actuellement j'ai dans mon fichier vierge qui permet l'exécution de la macro :
Dans ThisWorkbook :
VB:
Option Explicit
Private Cl As ClassAppEvents
Private Sub Workbook_Open()
Set Cl = New ClassAppEvents
End Sub
Puis dans un module de classe appelé ClassAppEvents :
Code:
Option Explicit
Public WithEvents App As Application
Private Sub Class_Initialize()
Set App = Application
End Sub
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
If ActiveWorkbook.Name = "Classeur1" Then
Call Transfertdesdonnees
End If
End Sub
Comme vous pouvez le constater, le but est d'exécuter la macro "Transfertdesdonnees" dès détection d'ouverture du fichier Classeur1
Pour simplifier les choses, j'ai cherché s'il y avait possibilité d'interdire la multiplication des instances afin que mon fichier généré s'ouvre obligatoirement dans le même process que le fichier permettant de déclencher la macro mais je n'ai rien trouvé....
J'ai aussi essayé de trouver un moyen de fusionner les instances par un script que je pourrai exécuter mais je n'ai rien trouvé non plus...
J'ai remplacé Call par Application.run mais j'ai un message d'erreur à la ligne "Private Sub App_WorkbookOpen(ByVal Wb As Workbook)" avec "Fonction ou variable attendue".
J'ai remplacé Call par Application.run mais j'ai un message d'erreur à la ligne "Private Sub App_WorkbookOpen(ByVal Wb As Workbook)" avec "Fonction ou variable attendue".
Désolé, voici le fichier. J'ai l'impression qu'il y a un problème plus général sur la détection d'ouverture d'un fichier non enregistré. J'ai modifié le code pour afficher un message suivant si le fichier est reconnu ou pas.
Si j'ouvre un nouveau fichier par exemple "Classeur1" en faisant "Fichier" et Nouveau, je n'ai aucun msgbox qui apparait. Idem si je fais clique droit sur l'icone Excel et que j'ouvre un nouveau classeur, aucune détection.
Si par contre j'ouvre un fichier enregistré par exemple "Test.xlsx", j'ai bien le message indiquant "Ouverture NON détectée" (plutôt entendre mauvais nom de fichier).
Enfin si j'essaie de lancer un fichier dans une nouvelle instance "excel /x", l'ouverture n'est pas détectée non plus car je n'ai aucun msgbox
Désolé, voici le fichier. J'ai l'impression qu'il y a un problème plus général sur la détection d'ouverture d'un fichier non enregistré. J'ai modifié le code pour afficher un message suivant si le fichier est reconnu ou pas.
Si j'ouvre un nouveau fichier par exemple "Classeur1" en faisant "Fichier" et Nouveau, je n'ai aucun msgbox qui apparait. Idem si je fais clique droit sur l'icone Excel et que j'ouvre un nouveau classeur, aucune détection.
Si par contre j'ouvre un fichier enregistré par exemple "Test.xlsx", j'ai bien le message indiquant "Ouverture NON détectée" (plutôt entendre mauvais nom de fichier).
Enfin si j'essaie de lancer un fichier dans une nouvelle instance "excel /x", l'ouverture n'est pas détectée non plus car je n'ai aucun msgbox
Je n'ai pas encore assimilé les modules de classe.
Mais au vu de cette ligne: If ActiveWorkbook.Name = "Classeur1" Then
le classeur concerné par ce code est le classeur actif dont le nom est classeur1.
Or, tu ouvres un classeur dont le nom n'est pas classeur1 donc tous les autres ne sont pas concernés.