Détecter fermeture d'un classeur Excel

Signaler
Messages postés
176
Date d'inscription
mercredi 5 mai 2004
Statut
Membre
Dernière intervention
25 septembre 2006
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
Bonjour,


j'ouvre un fichier Excel par un bouton sur un form VBA et je voudrais, lorsque l'utilisateur a lu et peut-être modifié ce fichier, l'importer dans une table ACCESS.


J'aimerais dc juste savoir comment détecter la fermeture du classeur pour lancer mon import. J'ai entendu parler du BeforeClose du Workbook mais je n'arrive pas à l'implémenter.


Merci

7 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Lorsque tu es dans l'éditeur VBA

Tu vas dans le code relatif a ThisWorkBook Et la Dans la liste ou il y a marquer (Général) tu choisis WorkBook

Cela aura pour effet de te mettre automatiquement l'événement Open

Toi ensuite tu as juste a cherche dans la liste de droite.BeforeClose

ce qui te donnera:




Private Sub Workbook_BeforeClose(Cancel As Boolean) 

End Sub 
 







<small> Coloration syntaxique automatique [AFCK]</small>

       







 






@+,   Ju£i?n
Messages postés
176
Date d'inscription
mercredi 5 mai 2004
Statut
Membre
Dernière intervention
25 septembre 2006

Ouais mais nan c'est pas ça le problème. Jsuis sous ACCESS. J'ai pas ThisWorkbook ds l'explorateur.Ce que jveux c'est un genre de boucle qui vérifie l'ouverture du fichier et à la sortie de celle-làa ben jfais mon import. Le pb c'est de savoir la condition de la boucle.
Merci
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Est-ce que ton programme Access ouvre toujours le même fichier Excel ou
est-ce que ça peut être n'importe quel fichier xls selon les besoins de
l'utilisateur ?


Personnellement, j'utilise la méthode inverse, je travaille sous Excel
et j'exporte vers Access qui lui n'a pas besoin d'être ouvert.


Je t'aurais suggérer d'utiliser les API et vérifier les processus, mais
si le programme Excel se ferme, le processus n'y est plus et indique
qu'Excel est déjà fermé, donc trop tard pour importer. À moins de
demander à l'utilisateur s'il veut le faire. Si oui, tu le rouvres à
nouveau (invisible au besoin) et importe.


Tu pourrais aussi implémenter la procédure Workbook_BeforeClose à
partir d'Access, je pense. Tu pourrais y mettre un msgbox demandant si
oui ou non le programme doit importer les données et mettre une
variable Global Boolean dans le programme Excel.

À ce moment Access regarde cette variable et lorsqu'elle est True, il importe...


Des idées comme ça...

MPi
Messages postés
176
Date d'inscription
mercredi 5 mai 2004
Statut
Membre
Dernière intervention
25 septembre 2006

Ouais merci.


L'idée du BeforeClose jl'avais déjà mais j'arrive pas à le faire fonctionner. J'ai bien cette procédure dans mon code mais je me demande comment le VBA pourrait savoir qu'il s'agit de ce WorkBook. J'ai tenté de l'activer mais sans aucune réussite. En fait j'aimerais bien savoir si il y a une propriété d'un Workbook ou d'une Excel.Application du style "isOpen".


Ca me permettrait de tester son ouverture dans une boucle.


Merci
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Ça dépend comment tu ouvres Excel. Si tu ouvres avec Shell ou ShellExecute, tu auras un processus, c'est tout.


Si tu crées des objets du genre xlApp as Excel.Application, xlBook as
Excel.Workbook, ... à ce moment tu peux utiliser toutes de sortes de
possibilités, comme les Windows

For each Fenêtre in Objet.Windows

...

Next

MPi
Messages postés
176
Date d'inscription
mercredi 5 mai 2004
Statut
Membre
Dernière intervention
25 septembre 2006

Et je fais comment stp pour savoir que c'est bien ma fenêtre Excel ? Je peux avoir le nom du classeur ?
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Tu peux récupérer le handle de la fenêtre excel avec l'api FindWindow.
Il faut que tu connaisses le caption de cette fen^tre.

@++


  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--