[Résolu] Lancer une macro à l'ouverture de tout classeur

Racc00n

XLDnaute Nouveau
Bonjour à tous,

Je me permets de poster ici cette question à laquelle je n'ai pas trouvé de réponse compréhensible (pour moi en tout cas...) en parcourant ce forum ou d'autres dédiés à Excel.

Voici la situation :

J'utilise dans mon métier une application qui crée des rapports au format ODS. Je n'ai pas la main sur cette application et ne peux donc pas enregistrer une macro dans ces classeurs.

Ces rapports doivent être convertis au format XLS avant d'être transmis aux clients.

J'ai donc réalisé une macro qui
- vérifie que le fichier ouvert est bien un rapport au format ODS, et quitte sinon.
- puis enregistre au format XLS le fichier en question au même endroit
- supprime enfin le fichier ODS d'origine si l'opération précédente a réussi

Bref, cette macro fonctionne, elle est enregistrée dans "%APPDATA%\Microsoft\Excel\XLSTART\PERSONNAL.XLSB" et est appelée par un raccourci clavier.

Ainsi, lorsque j'ouvre un rapport au format ODS, le classeur PERSONNAL.XLSB s'ouvre à l'arrière plan et quand j'appuie sur le raccourci clavier et le fichier ODS est "converti" en XLS.

Ce que je voudrais changer :
Je souhaiterais que cette macro soit exécutée à l'ouverture de n'importe quel classeur sans avoir à taper le raccourci clavier.

Ce que j'ai déjà esssayé :
1°) Créer une macro Auto_open dans PERSONNAL.XLSB qui appelle simplement cette macro
2°) Renommer ma macro en Auto_open
Dans les deux cas ci-dessus, à l'ouverture de mon document ODS, le PERSONNAL.XLSB s'ouvre en arrière plan et la macro est exécutée SUR LE CLASSEUR PERSONNAL.XLSB, ce qui me renvoie bien sûr le message prévu en cas d'exécution sur un classeur autre qu'un rapport au format ODS ("ce fichier n'est pas un rapport, abandon de la macro") Le classeur ODS est ensuite ouvert, mais la macro ne lui est pas appliquée.

Donc ma question finale est :
Comment faire pour que cette macro ne se lance pas à l'ouverture de PERSONNAL.XLSB mais à l'ouverture de tout autre classeur ? Même si plusieurs classeurs sont ouverts à la suite dans une même instance Excel ?

Ou à défaut comment faire pour que cette macro se lance à l'ouverture de tout classeur, PERSONNAL.XLSB compris (auquel cas je désactive le message) ?

D'avance merci pour vos lumières...
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Lancer une macro à l'ouverture de tout classeur

Bonjour,

peut être avec un module de classe.... tous les codes qui suivent à placer dans ton classeur de macros personnelles...

dans le module "thisworkbook" :
Code:
Option Explicit
Private Sub Workbook_Open()
Set e.MonExcel = Application
End Sub

dans un module standard :
Code:
Option Explicit
Public e As New Classe1

dans un module de classe nommé "classe1" :
Code:
Option Explicit
Public WithEvents MonExcel As Application
Private Sub MonExcel_WorkbookOpen(ByVal Wb As Workbook)
If Wb.Name Like "NomClasseur*" Then 
'ton code
End If
End Sub

S'exécutera à l'ouverture de tous classeurs dès l'instant ou ton classeur de macros personnelles est ouvert et ce dans la même instance d'Excel....
bonne journée
@+
 
Dernière édition:

Racc00n

XLDnaute Nouveau
Re : Lancer une macro à l'ouverture de tout classeur

Bonjour Pierrot et grand merci de t'occuper de mon cas !
J'ai recopié scrupuleusement dans mon PERSONAL.XLSB les trois étapes que tu décris, en insérant mon code dans le module de classe comme indiqué. (Scrupuleusement, à défaut de comprendre exactement ce que je faisais)

A la première ouverture, un message d'erreur dû à mon code s'est affiché, concernant une variable mal définie. Ce qui montre que mon code avait bien été lancé...

J'ai corrigé cette erreur, (étonné que cela ait marché auparavant, d'ailleurs), puis relancé Excel, et là plus rien ne s'est passé à l'ouverture.
J'ai donc viré tout mon code en le remplaçant par une simple MsgBox "Coucou" pour vérifier, ... et toujours rien.
Pas plus de résultat en supprimant PERSONAL.XLSB et en le recréant "propre", toujours avec une simple MsgBox.
ni en remettant mon code dans un module à part et en lançant la macro depuis le module de classe...
Si je remets mon code contenant une erreur dans le module de classe, l'erreur est bien indiquée au démarrage, mais si je mets du code sans erreur ou une simple MsgBox il ne se passe rien...

Le PERSONAL.XLSB s'ouvre bien en arrière plan, mais c'est comme si le code contenu dans le module de classe n'était exécuté que s'il contient des erreurs :p C'est une protection anti-moi ?!

Quelle bêtise ai-je pu faire ?
 

Racc00n

XLDnaute Nouveau
Re : Lancer une macro à l'ouverture de tout classeur

J'ai trouvé ma bêtise !

Dans le module de classe, j'avais laissé If Wb.Name Like "NomClasseur*" en l'état ! La macro ne se serait donc pas lancée tant que je n'avais pas ouvert de classeur nommé "NomClasseur"...

Quel boulet je fais, voilà ce que c'est que de faire mumuse avec des lignes de codes qu'on ne comprend pas...

Encore un grand merci à toi Pierrot93 pour ta réponse efficace et rapide, le sujet est résolu.
 

Discussions similaires

Réponses
15
Affichages
427

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T