Lancer macro lors de la fermeture d'un autre classeur

Ewigefrost

XLDnaute Junior
Bonjour à tous,

J'aimerais savoir s'il est possible de faire une macro qui se lancerait quand un classeur Excel (autre que celui contenant la macro à effectuer) se ferme.

En effet, j'ai un programme qui m'exporte un fichier Excel toutes les heures (il l'ouvre et le ferme de suite) et j'aimerais en fait récupérer les valeurs contenues dans ce fichier (sur un range("A1: D25") disons) à chaque nouvelle exportation (càd dès que ce fichier se ferme) et les coller dans le classeur qui exécutera la macro.

Est-ce possible ?

L'événement "Workbook_close" irait bien, mais il ne s'applique qu'au classeur contenant la macro, et ce n'est pas ce que je souhaite.

Je suis preneur de toutes idées ;)

Merci beaucoup, à+ !

PS: j'ai déjà pensé à exécuter une macro qui serait placé sur le fichier exporté et qui s'éxécuterait à chaque ouverture de celui-ci, mais ce fichier ne supporte pas les macros, impossible de faire comme ça donc ...
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Lancer macro lors de la fermeture d'un autre classeur

Bonjour Ewigefrost,

A priori, il faut gérer les évènements au niveau application, dans la mesure où la création de ton classeur toutes les heures se fait dans le même Excel que ton code qui veut intercepter sa fermeture (il peut y avoir plusieurs Excel ouverts en même temps)

L'aide VBA explique comment gérer les événements au niveau application
Il faut créer un module de classe pour les évènements, je te laisse chercher dans l'aide...

Bing, Bonjour Pierrot ;)

Edit : à noter que ce que te propose Pierrot n'est pas de mettre le code dans le fichier exporté, mais dans la macro qui le remplit et l'exporte, qui elle doit bien se trouver quelque part...
 
Dernière édition:

Ewigefrost

XLDnaute Junior
Re : Lancer macro lors de la fermeture d'un autre classeur

Bonjour tototiti,

A priori, il faut gérer les évènements au niveau application, dans la mesure où la création de ton classeur toutes les heures se fait dans le même Excel que ton code qui veut intercepter sa fermeture (il peut y avoir plusieurs Excel ouverts en même temps)

Je ne suis pas sûr d'avoir compris, mais en fait le classeur contenant les données exportées se fait remplacer (écraser) toutes les heures, et c'est un classeur différent de celui sur lequel je veux placer ma macro (en fait, le classeur exporté contient des données brutes, et il faudrait que je ramène ces données brutes dans l'autre classeur, qui lui traitera ces données our en tirer quelque chose d'intéressant).

De plus, les données exportées proviennent de SAP, je n'ai donc aucun moyen de configurer l'exportation ou d'y placer du code ;)
 

tototiti2008

XLDnaute Barbatruc
Re : Lancer macro lors de la fermeture d'un autre classeur

Re,

Donc c'est SAP qui ouvre Excel ?
Connais pas SAP, mais si tu n'as pas un Excel vraiment ouvert par SAP, rien ne garantit que SAP passe vraiment par Excel pour produire ses fichiers bruts
D'autre part SAP tourne sur le même poste qu'Excel pour produire les fichiers ?
S'il fait ça sur un serveur, ça risque de ne pas être facile d'intercepter sa mise à jour... déjà pas facile si sur le même poste
 

Ewigefrost

XLDnaute Junior
Re : Lancer macro lors de la fermeture d'un autre classeur

Merci pour vos réponses.

Oui c'est bien SAP qui ouvre Excel. Je clique sur "Exportation Excel", ça crée un fichier XLS (pas XLSM) dans un répertoire donné, puis Excel s'ouvre avec ces données.

Pour que le remplacement des données (qui sont dynamiques) puisse se faire toutes les heures, le fichier XLS contenant les données brutes doit être fermé lors du renouvellement. C'est pour ça que SAP (et à l'aide d'un logiciel d'automatisation) ferme ce fichier quelques dizaines de secondes après l'avoir ouvert.

Les fichiers sont produits en local, donc pas de problème concernant le serveur ;)

@sousou : c'est SAP qui ouvre le fichier XLS créé juste après avoir cliqué sur "Exportation Excel".
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Lancer macro lors de la fermeture d'un autre classeur

Bonjour
J'ai un peu connu SAP ... il y 13 14 ans ( un peu comme TOLAS, Bahn .....) pour ceux qui ne connaissent pas c'est un MRP ( Material Requesting Planning en fait la gestion de Prod) , Normalement tous ces progiciels générent des fichiers, suite à des requêtes, en .TXT , puis on peut les convertir vers Excel
Ne peux tu pas demander a tes collègues informaticien de récupérer ces .txt ? ( c'est ce que faisais) ensuite tu en fais ce que tu veux
 

sousou

XLDnaute Barbatruc
Re : Lancer macro lors de la fermeture d'un autre classeur

Re
Pensez-vous que cela serait jouable?
une appli VBS lancée en tâche de fond qui surveille le répertoire en question et qui toutes les heures par exemple lance excel, et la macro de traitement sur le fichier.
il est possible en vbs d'utiliser les dates de créations ou de modifications pour voir si l'action doit être lancée....
 

sousou

XLDnaute Barbatruc
Re : Lancer macro lors de la fermeture d'un autre classeur

Re
Pour compléter:
Voici un répertoire avec un fichier ouvre une appli.vbs
Dans l'état, il controle pendant dix minutes et toutes les 20 secondes si le fichier à été modifié ou pas.
Il suffirai de lancer une macro excel (code en commentaire et un peu plus.) pour traiter le fichier...
 

Pièces jointes

  • contolefichier.zip
    2.1 KB · Affichages: 61
  • contolefichier.zip
    2.1 KB · Affichages: 67
  • contolefichier.zip
    2.1 KB · Affichages: 63

Ewigefrost

XLDnaute Junior
Re : Lancer macro lors de la fermeture d'un autre classeur

(Re)bonjour à tous et merci beaucoup pour vos réponses.

@tototiti : non, SAP ouvre un fichier "à part". Il ouvre en fait le XLS (sans macro donc) contenant les données brutes, et ce sont ces données que je veux récupérer dans mon autre fichier pouvant lui contenir des macros.

@herve62 : reprendre les données contenues dans le TXT serait très difficile et long (enfin je pense), vu que j'ai absolument besoin de la mise en forme que SAP effectue dans le XLS qu'il crée, donc je préférerais éviter.

@sousou : cette solution serait excellente. J'avais pensé à faire une macro qui s'exécuterait toutes les 10 minutes par exemple (que le fichier ait été modifié ou pas), mais ta solution serait bien plus pratique et astucieuse.
J'ai plus qu'à me lancer dans le VBS pour compléter le programme !

Merci encore à vous tous pour votre aide, bonne journée !
 

sousou

XLDnaute Barbatruc
Re : Lancer macro lors de la fermeture d'un autre classeur

Bonjour à tous
Un peu plus loin...
Ici le vbs dans les mêmes délais, et périodes lance la macro deb du fichier Traitements si le fichier toto à été modifié.
(Avec visibilité d'excel sachant que tout peut être invisible)

Le lien pour tous sur le vbs!
JCB site
 

Pièces jointes

  • contolefichier.zip
    8.7 KB · Affichages: 74
  • contolefichier.zip
    8.7 KB · Affichages: 74
  • contolefichier.zip
    8.7 KB · Affichages: 82

Discussions similaires