Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[vba] pilotage excel à partir de outllook et variable

6 réponses
Avatar
Oliv'
Bonjour,
J'ai une macro qui pilote excel à partir de outlook,
j'ouvre un classeur et execute une macro excel de ce classeur.
j'aimerai récupérer dans ma macro outllook une variable générée dans la sous
macro excel.
Comment puis-je faire ?
Je pensais la définir comme public mais j'ai du oublier quelque chose :-((

extrait du code
Public ref_novaxel

Sub EDIavecFichiers()
On Error Resume Next
...
If objAtt.FileName = "ficCompagnie_VE.xsv" Then

'Déclaration des variables
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel
Dim xlmacroBook As Excel.Workbook

'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("c:\temp\edi_attach\" &
objAtt.FileName)
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
appExcel.Visible = False
Set xlmacroBook = appExcel.Workbooks.Open("\\toto\MACRO_EDI.xls")

''' Run a macro in the workbook.
wbExcel.Activate
appExcel.Run xlmacroBook.Name & "!ouverture"
MsgBox ref_novaxel ' c'est cette variable qui est créée par la macro
excel ouverture !!!!!
...
End Sub

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

6 réponses

Avatar
-=lolol=-
Bonjour Oliv'

n'ayant que très peu peur du ridicule, je tente une(s) réponse(s) :-)

Si ta macro excel était une function au lieu d'être une sub, elle pourrait
faire la même chose que ce que fait la sub mais en plus te renvoyer une
valeur ... la variable voulue (?)

Notons que je ne sait pas si une function peut renvoyer son résultat d'une
application à l'autre (peut être le même problème que pour ta variable)

Une autre idée toute aussi saugrenue serait de passer par le presse papier
windows ... ta macro outlook lance la macro excel ... à la fin de cette
macro excel tu écris dans le presse papier le contenu de ta variable ...
puis lors du retour dans ta macro outlook tu peux récuperer le contenu du
presse papier ...

Dernière cartouche, poster ta question sur mpfe
(news://news.microsoft.com/microsoft.public.fr.excel) ou circulent quelques
fines lames sur vba ... j'espère qu' Isa ne me tiendra pas rigueur de cette
dernière remarque :-)

cordialement
@+lolo



Bonjour,
J'ai une macro qui pilote excel à partir de outlook,
j'ouvre un classeur et execute une macro excel de ce classeur.
j'aimerai récupérer dans ma macro outllook une variable générée dans
la sous macro excel.
Comment puis-je faire ?
Je pensais la définir comme public mais j'ai du oublier quelque chose
:-((
extrait du code
Public ref_novaxel

Sub EDIavecFichiers()
On Error Resume Next
...
If objAtt.FileName = "ficCompagnie_VE.xsv" Then

'Déclaration des variables
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel
Dim xlmacroBook As Excel.Workbook

'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("c:tempedi_attach" &
objAtt.FileName)
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
appExcel.Visible = False
Set xlmacroBook = appExcel.Workbooks.Open("totoMACRO_EDI.xls")

''' Run a macro in the workbook.
wbExcel.Activate
appExcel.Run xlmacroBook.Name & "!ouverture"
MsgBox ref_novaxel ' c'est cette variable qui est créée par la
macro excel ouverture !!!!!
...
End Sub


Avatar
Oliv'
Bonjour Oliv'

n'ayant que très peu peur du ridicule, je tente une(s) réponse(s) :-)


ca ne me semble pas ridicule du tout !!!

Si ta macro excel était une function au lieu d'être une sub, elle
pourrait faire la même chose que ce que fait la sub mais en plus te
renvoyer une valeur ... la variable voulue (?)

Notons que je ne sait pas si une function peut renvoyer son résultat
d'une application à l'autre (peut être le même problème que pour ta
variable)


Faut que je teste, mais je connais pas bien :-((

Une autre idée toute aussi saugrenue serait de passer par le presse
papier windows ... ta macro outlook lance la macro excel ... à la fin
de cette macro excel tu écris dans le presse papier le contenu de ta
variable ... puis lors du retour dans ta macro outlook tu peux
récuperer le contenu du presse papier ...


Oui j'y ai pensé mais si j'ai plusieurs variables ?
Peux t'on travailler en vba avec le presse papier OFFICE ?

Dernière cartouche, poster ta question sur mpfe
(news://news.microsoft.com/microsoft.public.fr.excel) ou circulent
quelques fines lames sur vba ... j'espère qu' Isa ne me tiendra pas
rigueur de cette dernière remarque :-)


Fait en même temps !
Il y a Une solution sur le site de Laurent LONGRE qui semble pas mal
http://xcell05.free.fr/pages/prog/hnamespace.htm#VBA
et qui utilise les noms masqués mais j'ai des erreurs 2029

Sinon en attendant de trouver une meilleure solution j'ai copié la variable
dans une cellule, que je viens relire dans ma macro principale.

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



Bonjour,
J'ai une macro qui pilote excel à partir de outlook,
j'ouvre un classeur et execute une macro excel de ce classeur.
j'aimerai récupérer dans ma macro outllook une variable générée dans
la sous macro excel.
Comment puis-je faire ?
Je pensais la définir comme public mais j'ai du oublier quelque chose
:-((
extrait du code
Public ref_novaxel

Sub EDIavecFichiers()
On Error Resume Next
...
If objAtt.FileName = "ficCompagnie_VE.xsv" Then

'Déclaration des variables
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel
Dim xlmacroBook As Excel.Workbook

'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("c:tempedi_attach" &
objAtt.FileName)
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
appExcel.Visible = False
Set xlmacroBook = appExcel.Workbooks.Open("totoMACRO_EDI.xls")

''' Run a macro in the workbook.
wbExcel.Activate
appExcel.Run xlmacroBook.Name & "!ouverture"
MsgBox ref_novaxel ' c'est cette variable qui est créée par la
macro excel ouverture !!!!!
...
End Sub




Avatar
-=lolol=-
Bonjour Oliv'

Si ta macro excel était une function au lieu d'être une sub, elle
pourrait faire la même chose que ce que fait la sub mais en plus te
renvoyer une valeur ... la variable voulue (?)


Faut que je teste, mais je connais pas bien :-((

Une autre idée toute aussi saugrenue serait de passer par le presse
papier windows ... ta macro outlook lance la macro excel ... à la fin
de cette macro excel tu écris dans le presse papier le contenu de ta
variable ... puis lors du retour dans ta macro outlook tu peux
récuperer le contenu du presse papier ...


Oui j'y ai pensé mais si j'ai plusieurs variables ?


une function peut renvoyer un array de valeur

tu peux concatener avant de mettre dans le presse papier et "déconcatener"
après ou même passer par des fichiers txt écrits à la volée et effacés juste
derrière

Peux t'on travailler en vba avec le presse papier OFFICE ?


application.cut
application.copy
application.paste

hth
@+lolo


Avatar
Alain CROS
Bonjour.

Dans la macro Outlook :

''' Run a macro in the workbook.
wbExcel.Activate
appExcel.Run xlmacroBook.Name & "!ouverture", ref_novaxel
MsgBox ref_novaxel ' c'est cette variable qui est créée par la macro excel ouverture !!!!!

Et dans la macro Excel

Sub ouverture(MaVar)
'Le code de ta macro
mavar = La valeur que tu veux récupérer
end sub

Alain CROS

"Oliv'" <(supprimerceci) a écrit dans le message de news:
Bonjour,
J'ai une macro qui pilote excel à partir de outlook,
j'ouvre un classeur et execute une macro excel de ce classeur.
j'aimerai récupérer dans ma macro outllook une variable générée dans la sous
macro excel.
Comment puis-je faire ?
Je pensais la définir comme public mais j'ai du oublier quelque chose :-((

extrait du code
Public ref_novaxel

Sub EDIavecFichiers()
On Error Resume Next
...
If objAtt.FileName = "ficCompagnie_VE.xsv" Then

'Déclaration des variables
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel
Dim xlmacroBook As Excel.Workbook

'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("c:tempedi_attach" &
objAtt.FileName)
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
appExcel.Visible = False
Set xlmacroBook = appExcel.Workbooks.Open("totoMACRO_EDI.xls")

''' Run a macro in the workbook.
wbExcel.Activate
appExcel.Run xlmacroBook.Name & "!ouverture"
MsgBox ref_novaxel ' c'est cette variable qui est créée par la macro
excel ouverture !!!!!
...
End Sub

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




Avatar
Oliv'
Alain CROS que je salut a écrit dans
%
Bonjour.

Dans la macro Outlook :

''' Run a macro in the workbook.
wbExcel.Activate
appExcel.Run xlmacroBook.Name & "!ouverture", ref_novaxel
MsgBox ref_novaxel ' c'est cette variable qui est créée par la
macro excel ouverture !!!!!

Et dans la macro Excel

Sub ouverture(MaVar)
'Le code de ta macro
mavar = La valeur que tu veux récupérer
end sub

Alain CROS


Alain j'ai essayé ta méthode mais ca ne marche pas, j'ai du me tromper :-(

c'est en sortie de la procédure excel que je veux récupérer une de ses
variables dans la procédure outlook

n'est ce pas réservé aux Function comme me le précisé lolo ?


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


"Oliv'" <(supprimerceci) a écrit dans le
message de news:
Bonjour,
J'ai une macro qui pilote excel à partir de outlook,
j'ouvre un classeur et execute une macro excel de ce classeur.
j'aimerai récupérer dans ma macro outllook une variable générée dans
la sous macro excel.
Comment puis-je faire ?
Je pensais la définir comme public mais j'ai du oublier quelque
chose :-((

extrait du code
Public ref_novaxel

Sub EDIavecFichiers()
On Error Resume Next
...
If objAtt.FileName = "ficCompagnie_VE.xsv" Then

'Déclaration des variables
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel
Dim xlmacroBook As Excel.Workbook

'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("c:tempedi_attach" &
objAtt.FileName)
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
appExcel.Visible = False
Set xlmacroBook = appExcel.Workbooks.Open("totoMACRO_EDI.xls")

''' Run a macro in the workbook.
wbExcel.Activate
appExcel.Run xlmacroBook.Name & "!ouverture"
MsgBox ref_novaxel ' c'est cette variable qui est créée par la
macro excel ouverture !!!!!
...
End Sub

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




Avatar
Oliv'
-=lolol=- que je salut a écrit dans
%
Bonjour Oliv'

Si ta macro excel était une function au lieu d'être une sub, elle
pourrait faire la même chose que ce que fait la sub mais en plus te
renvoyer une valeur ... la variable voulue (?)


Faut que je teste, mais je connais pas bien :-((

Une autre idée toute aussi saugrenue serait de passer par le presse
papier windows ... ta macro outlook lance la macro excel ... à la
fin de cette macro excel tu écris dans le presse papier le contenu
de ta variable ... puis lors du retour dans ta macro outlook tu peux
récuperer le contenu du presse papier ...


Oui j'y ai pensé mais si j'ai plusieurs variables ?


une function peut renvoyer un array de valeur


OK, testé cela marche !

tu peux concatener avant de mettre dans le presse papier et
"déconcatener" après ou même passer par des fichiers txt écrits à la
volée et effacés juste derrière


EXCELLENT !!

Peux t'on travailler en vba avec le presse papier OFFICE ?


application.cut
application.copy
application.paste


je pensais au presse papier qui contient + d'1 élément. que l'on active dans
édition/presse papier office

Sinon j'ai réussi AUSSI avec les nom masqués de Laurent LONGRE il faut
juste faire attention à la syntaxe avec les guillemets "
cela donne dans excel
novaxel = """" + ref_novaxel + """"
Application.ExecuteExcel4Macro "SET.NAME(""Nom_Test""," + novaxel + ")"

et dans outlook
résult=appExcel.ExecuteExel4Macro("nom_Test").

Cela fait donc 4 solutions à mon problème si c'est pas génial ca !!!
Merci encore !
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~