OVH Cloud OVH Cloud

macro au lancement d'un .csv

7 réponses
Avatar
Chris MICHEL
Bonjour,

on m'a pos=E9 une question int=E9ressante et je n'ai pas=20
encore de r=E9ponse, alors je vous fais participer:

comment faire pour qu'une macro se lance automatiquement =E0=20
l'ouverture de tout fichier en .csv??

meri d'avance,

Chris.

7 réponses

Avatar
Frédéric Sigonneau
Bonsoir,

Une petite bidouille avec un module de classe dans ton perso.xls.

'1- un module de classe nommé ExcelPerso

'==================code
Public WithEvents AppXl As Application

Private Sub AppXl_WorkbookOpen(ByVal Wb As Workbook)
If Right(Wb.Name, 4) = ".csv" Then 'ThisWorkbook.Name Then
MsgBox "coucou" 'ou la macro de ton choix
End If
End Sub
'=====================
'2- dans le module ThisWorkbook du perso.xls

'===================code
Dim MonXL As New ExcelPerso

Private Sub Workbook_Open()
Set MonXL.AppXl = Application
End Sub
'======================
Si ce genre de bidouille doit être distribuée, il vaudrait mieux le faire sous
la forme d'une macro complémentaire.

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

on m'a posé une question intéressante et je n'ai pas
encore de réponse, alors je vous fais participer:

comment faire pour qu'une macro se lance automatiquement à
l'ouverture de tout fichier en .csv??

meri d'avance,

Chris.


Avatar
Chris MICHEL
Hum! Ca ne marche pas.

Pour comprendre pourquoi, j'ai rajouté msgbox wb.name just
avant le IF du module de classe pour comprendre quel
fichier il associait à wb et il m'a renvoyé PERSO.xls

Je ne sais pas si c'est important mais je travaille sur
Excel 97 (désolé!) et surtout, j'ai un fichier caché (un
truc parlant de boutons Visio mais j'ai aucune idée de
l'utilité de ce truc), installé d'office sur tous les
ordis de la boite et qui ouvre un classeur vierge à chaque
fois que je lance Excel, même si c'est en double-cliquant
sur un fichier existant. Cela peut chambouler l'ordre dans
lequel les fichiers s'activent dans un ordi qui n'a pas
cette configuration (j'en sais rien: je t'avoue que je ne
suis pas très pointu sur le sujet).

Est-ce que tu as testé ta solution sur ton ordi? Si ça
marchait chez toi, c'est que le pb vient de moi, auquel
cas je peux quand même faire suivre ta solution à celui
que ça intéressait.

Merci,

Chris.
-----Message d'origine-----
Bonsoir,

Une petite bidouille avec un module de classe dans ton
perso.xls.


'1- un module de classe nommé ExcelPerso

'==================code
Public WithEvents AppXl As Application

Private Sub AppXl_WorkbookOpen(ByVal Wb As Workbook)
If Right(Wb.Name, 4) = ".csv" Then 'ThisWorkbook.Name
Then

MsgBox "coucou" 'ou la macro de ton choix
End If
End Sub
'======================

'2- dans le module ThisWorkbook du perso.xls

'===================code
Dim MonXL As New ExcelPerso

Private Sub Workbook_Open()
Set MonXL.AppXl = Application
End Sub
'=======================

Si ce genre de bidouille doit être distribuée, il
vaudrait mieux le faire sous

la forme d'une macro complémentaire.

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

on m'a posé une question intéressante et je n'ai pas
encore de réponse, alors je vous fais participer:

comment faire pour qu'une macro se lance
automatiquement à


l'ouverture de tout fichier en .csv??

meri d'avance,

Chris.



.




Avatar
Chris MICHEL
re-bonjour,

Je re-réponds car je viens de comprendre qq chose de plus:

Excel (97 en tous les cas), ne considère pas un csv comme
un workbook, d'où le fait que ta solution ne fonctionne
pas.

Tu vois une autre solution?

Chris.
-----Message d'origine-----
Bonsoir,

Une petite bidouille avec un module de classe dans ton
perso.xls.


'1- un module de classe nommé ExcelPerso

'==================code
Public WithEvents AppXl As Application

Private Sub AppXl_WorkbookOpen(ByVal Wb As Workbook)
If Right(Wb.Name, 4) = ".csv" Then 'ThisWorkbook.Name
Then

MsgBox "coucou" 'ou la macro de ton choix
End If
End Sub
'======================

'2- dans le module ThisWorkbook du perso.xls

'===================code
Dim MonXL As New ExcelPerso

Private Sub Workbook_Open()
Set MonXL.AppXl = Application
End Sub
'=======================

Si ce genre de bidouille doit être distribuée, il
vaudrait mieux le faire sous

la forme d'une macro complémentaire.

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

on m'a posé une question intéressante et je n'ai pas
encore de réponse, alors je vous fais participer:

comment faire pour qu'une macro se lance
automatiquement à


l'ouverture de tout fichier en .csv??

meri d'avance,

Chris.



.




Avatar
Alain CROS
Bonjour.

Essaye comme ça.
Dans le module de classe du PERSO.XLS.

Public WithEvents AppXl As Application
Private Fichier$

Private Sub AppXl_WorkbookActivate(ByVal Wb As Excel.Workbook)
If Right(Wb.Name, 4) = ".csv" Then
If Fichier = "" Then
MsgBox "coucou" 'ou la macro de ton choix
Fichier = Wb.Name
End If
End If
End Sub

Private Sub AppXl_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, Cancel As Boolean)
If Wb.Name = Fichier Then Fichier = ""
End Sub

Alain CROS.

"Chris MICHEL" a écrit dans le message de news: f14901c3f14d$694289d0$
re-bonjour,

Je re-réponds car je viens de comprendre qq chose de plus:

Excel (97 en tous les cas), ne considère pas un csv comme
un workbook, d'où le fait que ta solution ne fonctionne
pas.

Tu vois une autre solution?

Chris.
-----Message d'origine-----
Bonsoir,

Une petite bidouille avec un module de classe dans ton
perso.xls.


'1- un module de classe nommé ExcelPerso

'==================code
Public WithEvents AppXl As Application

Private Sub AppXl_WorkbookOpen(ByVal Wb As Workbook)
If Right(Wb.Name, 4) = ".csv" Then 'ThisWorkbook.Name
Then

MsgBox "coucou" 'ou la macro de ton choix
End If
End Sub
'===================== >
'2- dans le module ThisWorkbook du perso.xls

'===================code
Dim MonXL As New ExcelPerso

Private Sub Workbook_Open()
Set MonXL.AppXl = Application
End Sub
'====================== >
Si ce genre de bidouille doit être distribuée, il
vaudrait mieux le faire sous

la forme d'une macro complémentaire.

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

on m'a posé une question intéressante et je n'ai pas
encore de réponse, alors je vous fais participer:

comment faire pour qu'une macro se lance
automatiquement à


l'ouverture de tout fichier en .csv??

meri d'avance,

Chris.



.




Avatar
Chris MICHEL
Bravo! Ca marche nickel, merci à vous deux donc.

Est-ce que tu serais capable d'expliquer pourquoi ta
soluce marche et pas celle de Fred (pardonnezla
familiarité) Sigonneau?

Chris.
-----Message d'origine-----
Bonjour.

Essaye comme ça.
Dans le module de classe du PERSO.XLS.

Public WithEvents AppXl As Application
Private Fichier$

Private Sub AppXl_WorkbookActivate(ByVal Wb As
Excel.Workbook)

If Right(Wb.Name, 4) = ".csv" Then
If Fichier = "" Then
MsgBox "coucou" 'ou la macro de ton choix
Fichier = Wb.Name
End If
End If
End Sub

Private Sub AppXl_WorkbookBeforeClose(ByVal Wb As
Excel.Workbook, Cancel As Boolean)

If Wb.Name = Fichier Then Fichier = ""
End Sub

Alain CROS.

"Chris MICHEL" a
écrit dans le message de news: f14901c3f14d$694289d0

$
re-bonjour,

Je re-réponds car je viens de comprendre qq chose de plus:

Excel (97 en tous les cas), ne considère pas un csv comme
un workbook, d'où le fait que ta solution ne fonctionne
pas.

Tu vois une autre solution?

Chris.
-----Message d'origine-----
Bonsoir,

Une petite bidouille avec un module de classe dans ton
perso.xls.


'1- un module de classe nommé ExcelPerso

'==================code
Public WithEvents AppXl As Application

Private Sub AppXl_WorkbookOpen(ByVal Wb As Workbook)
If Right(Wb.Name, 4) = ".csv" Then 'ThisWorkbook.Name
Then

MsgBox "coucou" 'ou la macro de ton choix
End If
End Sub
'======================

'2- dans le module ThisWorkbook du perso.xls

'===================code
Dim MonXL As New ExcelPerso

Private Sub Workbook_Open()
Set MonXL.AppXl = Application
End Sub
'=======================

Si ce genre de bidouille doit être distribuée, il
vaudrait mieux le faire sous

la forme d'une macro complémentaire.

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

on m'a posé une question intéressante et je n'ai pas
encore de réponse, alors je vous fais participer:

comment faire pour qu'une macro se lance
automatiquement à


l'ouverture de tout fichier en .csv??

meri d'avance,

Chris.



.




.





Avatar
Alain CROS
Bonjour.

Comme tu l'a constaté, XL ne considère pas le .csv comme un WorkBook lors de son ouverture.
donc il l'ouvre mais l'évènement Open n'est pas généré puisque ce n'est pas un Workbook.
Il le transforme ensuite en Workbook mais ne déclanche pas l'événement New puisque
qu'il n'est pas nouveau, il existe déjà sous forme de csv.
Par contre, il l'active et c'est à ce moment là que l'on peut l'intercepter.

Alain CROS.

"Chris MICHEL" a écrit dans le message de news: f27d01c3f164$cb48b7f0$
Bravo! Ca marche nickel, merci à vous deux donc.

Est-ce que tu serais capable d'expliquer pourquoi ta
soluce marche et pas celle de Fred (pardonnezla
familiarité) Sigonneau?

Chris.
Avatar
Chris MICHEL
C'était donc ça...
Merci pour l'explication, c'était très clair.

Chris.

-----Message d'origine-----
Bonjour.

Comme tu l'a constaté, XL ne considère pas le .csv comme
un WorkBook lors de son ouverture.

donc il l'ouvre mais l'évènement Open n'est pas généré
puisque ce n'est pas un Workbook.

Il le transforme ensuite en Workbook mais ne déclanche
pas l'événement New puisque

qu'il n'est pas nouveau, il existe déjà sous forme de csv.
Par contre, il l'active et c'est à ce moment là que l'on
peut l'intercepter.


Alain CROS.

"Chris MICHEL" a
écrit dans le message de news: f27d01c3f164$cb48b7f0

$
Bravo! Ca marche nickel, merci à vous deux donc.

Est-ce que tu serais capable d'expliquer pourquoi ta
soluce marche et pas celle de Fred (pardonnezla
familiarité) Sigonneau?

Chris.


.