Lancement de macro a l'ouverture

[Résolu/Fermé]
Signaler
-
 matthieu560 -
Bonjour,

j'aimerais que excel exécute une macro automatiquement si il détecte une certaine extension de fichier.

Je bute sur la détection de fichier.
J'ai placé ça dans un module :

Sub auto_open()
Dim Extension As String
Extension = IIf(Mid(StrReverse(ThisWorkbook.name), 4, 1) = ".", Right(ThisWorkbook.name, 3), Right(ThisWorkbook.name, 4))
MsgBox Extension
End Sub

Mais ça sort "XSLB" quelque soit le fichier ouvert... on dirait que c'est exécuté une fois excel ouvert mais avant le classeur.

Si vous avez une idée, merci bien.

Matthieu
A voir également:

8 réponses

Messages postés
16506
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 septembre 2021
3 220
bonjour

j'vois pas trop l'intérêt du truc mais....
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
MsgBox fso.GetExtensionName(ThisWorkbook.Name)

Bonjour,

Merci de la réponse, mais j'obtiens encore "XLSB" quelque soit le fichier.

En fait, j'ai une machine qui me génère un fichier *.machine et j'essaie de créer un outil pour surveiller les constantes de la machine en gros.

J'ai déjà fait les macros pour le traitement des données, mais je voudrais économiser des clics en traitant automatiquement ces données à l'ouverture.

Merci
Messages postés
7531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2021
655
Bonjour,

J'ai pas tout compris, mais quand je met ton code dans ThisWorkbook comme ceci cela fonctionne, il détecte bien l'extension. J'ai essayé avec xls et xlsm:

Option Explicit
Sub auto_open()
Dim Extension As String
Extension = IIf(Mid(StrReverse(ThisWorkbook.Name), 4, 1) = ".", Right(ThisWorkbook.Name, 3), Right(ThisWorkbook.Name, 4))
MsgBox Extension
End Sub
Private Sub Workbook_Open()
auto_open
End Sub



Re-bonjour,

Tout d'abord, merci pour le temps passé à me répondre.

J'ai manqué de précision, je suis désolé.

En effet la fonction marche dans ThisWorkbook mais elle n'a aucun intérêt à cet endroit (pour moi en tout cas).

J'ai plus de 500 rapports en .machine et 4 de plus chaque jour.
Je cherche à placer la macro dans le PERSONAL.xslb (tiens, mon résultat doit venir de la d'ailleurs).
Le but étant d'analyser mes données si c'est un fichier .machine ou d'utiliser Excel normalement si c'est un autre fichier.

Merci
Messages postés
7531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2021
655
Voilà un programme qui te liste tout un répertoire par ordre décroissant. Si cela peut faire ton affaire:

http://www.cjoint.com/c/FBvr4McFAOQ
Merci pour les réponses. ça avance !

Bon, excusez mon manque de connaissance, pour moi le menu "This Workbook" était uniquement lié au classeur ouvert.
J'ai vu qu'il y a le même menu dans le PERSONAL.XLSB et mettre la macro à cet endroit permet en effet d'être lancé quelque soit le fichier ouvert.

Les 2 macros proposées fonctionnent correctement à l'ouverture pour mes fichiers *.machine avec ActiveWorkbook.Name.

Par contre, j'ai une erreur 91 "Variable objet ou variable de bloc With non définie" quand je veux ouvrir un *.xls, je ne comprends pas pourquoi.

Et la macro ne se lance pas si on a déjà un classeur d'ouvert. Pourtant Workbook_Open est sensé fonctionner à l'ouverture du fichier et non d'Excel, je me trompe?

Merci :)
Messages postés
24177
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2021
6 883
Bonjour,

Workbook_Open() de ThisWorkbook se lance uniquement à l'ouverture du fichier le contenant.

Maintenant tu as aussi l'événement d'application App_WorkbookOpen(ByVal Wb As Workbook) qui se lance à l'ouverture de n'importe quel classeur (avec ou sans macro) et qui te passe en paramètre le Workbook qui vient de s'ouvrir.
Mais les événements App ne sont pas accessibles directement. Il faut faire qq manip avant de les avoir.
Voir ici : http://www.cpearson.com/excel/AppEvent.aspx
eric
Merci beaucoup !

Résolu avec ce code


Private WithEvents App As Application

Private Sub Workbook_Open()
Set App = Application

End Sub
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
If Wb.name <> "PERSONAL.XLSB" Then

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
MsgBox fso.GetExtensionName(Wb.name)

End If
End Sub
Messages postés
24177
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2021
6 883
Bonjour,

Si tu utilises ThisWorkbook c'est normal qu'il te ramène l'extension de ThisWorkbook...
Ce n'est pas plutôt celle de ActiveWorkbook que tu veux ?
Sinon tu as aussi l'événement d'application WorkbookOpen qui se produit lors de l'ouverture d'un classeur.
eric

PS: on n'utilise plus auto_open() depuis un moment mais Workbook_Open() comme dans l'exemple de cs_le pivert

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci