Lancer du VBA depuis du VBScript

Résolu
cs_Piksou Messages postés 7 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 30 juillet 2007 - 27 juil. 2007 à 10:56
cs_Piksou Messages postés 7 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 30 juillet 2007 - 30 juil. 2007 à 11:33
Bonjour à tous,

Je cherche à lancer depuis un formulaire Outlook une macro qui rapatrie des informations vers le formulaire. Cette macro est donc bien sûr en VBA.
L'idée est de lancer la macro non pas depuis un bouton de la barre d'outils mais depuis le formulaire lui-même donc depuis du VBScript.

Actuellement, je fais la chose suivante:
<li>La macro d'appelle InsertionInfos</li><li>Dans CetteSessionOutlook, j'ai ajouté:</li>Public Sub InserInfos()
    Call InsertionInfos
End Sub

<li>Le code utilisé dans le formulaire est :</li>Sub CommandButton1_Click()
    Application.InserInfos
End Sub

Ainsi le Bouton appelle InserInfos qui lance la macro.

Malheureusement, ça ne semble marcher que si ma macro a déjà été exécutée ! Quand j'ouvre le formulaire, le bouton est inopérant. Il me faut d'abord lancer la macro "à la main" ou lancer VB Editor et là ça marche.
A note que si je mets des MsgBox, une MsgBox placée  dans le code du bouton avant l'appel à InserInfos fonctionne, alors que celle placée dans InserInfos ne marche pas, c'est donc l'appel à InserInfos depuis le VBS qui est foireux.

Des idées ?

Merci

10 réponses

cs_Piksou Messages postés 7 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 30 juillet 2007
30 juil. 2007 à 09:29
VBA s'exécute, oui, mais si on l'appelle comme du VBA, par ex par un item de la barre d'outils. VBS lui, s'exécute dans les forms. Le fond du pb c'est que je veux lancer du VBA depuis le VBS or d'après Microsoft (voir plus haut http://support.microsoft.com/kb/221827 ) ça ne marche que si le composant VBA a été initialisé au préalable. Mais j'ai ptet trouvé une astuce: passer par une macro pour créer le nouveau mail et de la sorte lancer VBA.
3
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
27 juil. 2007 à 12:12
 Bonjour à tous

Il y a la possiblité d'écrire et d'activer la macro par un script vbs.

Exemple:

Set sh = WScript.CreateObject("WScript.Shell")
on error resume next
sh.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security\accessVBOM",1,"REG_DWORD"
on error goto 0

Set exl = WScript.CreateObject("excel.Application")
exl.Visible = True 'false
set fichxl=exl.workbooks.add

Set mdle = fichxl.VBProject.VBComponents.Add(1)

num=0
num=num+1:mdle.CodeModule.InsertLines num, "Declare Function GetDC Lib ""user32"" (ByVal hwnd As Long) As Long"
num=num+1:mdle.CodeModule.InsertLines num, "Declare Function TextOut Lib ""gdi32"" Alias ""TextOutA"" ( _ "
num=num+1:mdle.CodeModule.InsertLines num, "     ByVal hdc As Long, _ "
num=num+1:mdle.CodeModule.InsertLines num, "ByVal x As Long, _ "
num=num+1:mdle.CodeModule.InsertLines num, "ByVal y As Long, _ "
num=num+1:mdle.CodeModule.InsertLines num, "ByVal lpString As String, _ "
num=num+1:mdle.CodeModule.InsertLines num, "ByVal nCount As Long) As Long"
num=num+1:mdle.CodeModule.InsertLines num, "Declare Function SetTextColor Lib ""gdi32"" ( _ "
num=num+1:mdle.CodeModule.InsertLines num, "ByVal hdc As Long, _ "
num=num+1:mdle.CodeModule.InsertLines num, "ByVal crColor As Long) As Long"
num=num+1:mdle.CodeModule.InsertLines num, "Declare Function SetBkMode Lib ""gdi32"" ( _ "
num=num+1:mdle.CodeModule.InsertLines num, "ByVal hdc As Long, _ "
num=num+1:mdle.CodeModule.InsertLines num, "ByVal nBkMode As Long) As Long"
num=num+1:mdle.CodeModule.InsertLines num, "Declare Function SetRect Lib ""user32"" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long"
num=num+1:mdle.CodeModule.InsertLines num, "Declare Function DrawText Lib ""user32"" Alias ""DrawTextA"" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long"
num=num+1:mdle.CodeModule.InsertLines num, "Private Type RECT"
num=num+1:mdle.CodeModule.InsertLines num, "    Left As Long"
num=num+1:mdle.CodeModule.InsertLines num, "    Top As Long"
num=num+1:mdle.CodeModule.InsertLines num, "    Right As Long"
num=num+1:mdle.CodeModule.InsertLines num, "    Bottom As Long"
num=num+1:mdle.CodeModule.InsertLines num, "End Type"

num=num+1:mdle.CodeModule.InsertLines num, "Sub ecriture_en_rouge_sur_fond_transparent()"
'num=num+1:mdle.CodeModule.InsertLines num, "Msgbox now"
num=num+1:mdle.CodeModule.InsertLines num, "Dim rct As RECT"
num=num+1:mdle.CodeModule.InsertLines num, "fen = GetDC(0)"
num=num+1:mdle.CodeModule.InsertLines num, "SetRect rct, 250, 250, 500, 500"
num=num+1:mdle.CodeModule.InsertLines num, "Call SetBkMode(fen, 1) "
num=num+1:mdle.CodeModule.InsertLines num, "Call SetTextColor(fen, vbRed)"
num=num+1:mdle.CodeModule.InsertLines num, "txt = ""Avec les fonctions API, on peut écrire n'importe où sur l'écran. On peut utiliser les API en VBScript en les lançant sous VBA Excel"""
num=num+1:mdle.CodeModule.InsertLines num, "Call DrawText(fen, txt, Len(txt), rct, &H10)"
num=num+1:mdle.CodeModule.InsertLines num, "End Sub"

exl.Run "ecriture_en_rouge_sur_fond_transparent"
fichxl.close(false)
exl.quit

Set fichxl=nothing
set mdle=nothing
set exl=nothing
set sh=Nothing

jean-marc
0
cs_Piksou Messages postés 7 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 30 juillet 2007
27 juil. 2007 à 12:26
Mais là tu lances ton code dans Excel non ? Moi je suis dans Outlook et le code doit être lancé dans Outlook pour pouvoir travailler sur le mail actuellement en cours d'édition.

J'ai au passage trouvé la raison de mon pb:
http://support.microsoft.com/kb/221827

The reasons to not use this functionality include, but are not necessarily limited to:
<li>By default, Outlook Visual Basic for Applications is not initialized, for performance reasons, when you start Outlook. This means that if you start Outlook, open an item, and run the VBScript code, it will produce an error because Visual Basic for Applications is not available at that time.</li>Donc mon pb c'est d'initialiser le VBA d'Outlook depuis Outlook et je vois pas comment faire...
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
27 juil. 2007 à 12:34
Bonjour
Dans un formulaire Outlook l'objet message c'est "Item" et l'événement décelchant le lancement de script à l'ouverture c'est "Open"

Donc , je verrai bien une routine du type

Sub Item_Open()
Set objSession = CreateObject("mapi.session")

'le code pour ajouter des données dans les champs du formulaire
....
End sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Piksou Messages postés 7 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 30 juillet 2007
27 juil. 2007 à 12:52
Oui oui, ma macro commence d'ailleirs par:

Dim myMail As MailItem
Set myMail = ActiveInspector.CurrentItem

et après je joue avec et ça marche bien, tu as accès à toutes les propriétés de tous les composants.

Mais je ne veux pas lancer la macro direct, ça doit être à la demande, avec un bouton. Si j'utilise un bouton dans la barre d'outils, pas de pb mais c'est ch**nt à déployer et en plus petit et moins logique, je préfèrerais nettement un bouton dans le form, donc en VBScript et c'est là que je dois lancer le VBA depuis le VBS. Genre instancier un objet pour VBA et l'activer ?
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
27 juil. 2007 à 16:13
Je n'ai pas beaucoup d'expérience sur les formulaires Outlook alors peut-être
pourquoi " Application.InserInfos", Et plus simplement, un simple "call"

Sub CommandButton1_Click()
    Call InserInfos()
End Sub
0
cs_Piksou Messages postés 7 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 30 juillet 2007
27 juil. 2007 à 16:17
Je suis pas expert non plus en fait, je pompe les exemples Microsoft :-D
Si j'ai bien pigé tu ne peux pas appeler direct le VBA depuis le VBS, il faut "tricher" en utilisant le Outlook Objetct Model, tu crées une mini macro qui devient un membre de l'objet ThisOutlookSession et celui là semble partagé entre VBA et VBS.
Sauf que pour ça il faut que le moteur VBA soit démarré :-/
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
27 juil. 2007 à 16:44
On ne va pas avancé car pour moi je me reconnecterai lundi matin..

VBA s'exécute toujours dans Outlook sauf si me le paramétrage de la sécurité des Macros est Elevé sinon en sécruité basse ou moyenne pas de problème.
VBScript est un sous ensemble de VBA à peu près le niveau de VB dans une version antérieure à la 6 (soit 4 ou 5) ou les variable ne sont pas typées. Sauf peut être que certaines fonctions inclusent dans des bibliothèques chargés en référence dans VB ou VBA doivent être chargé par une méthode spécifique en VBS mais c'est sûr au niveau du code tout n'est pas identique, VBScript est un sous-ensemble de VB6 comme VBA en est un.
0
cs_Piksou Messages postés 7 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 30 juillet 2007
30 juil. 2007 à 09:45
Eh m***e ça marche toujours pas :-/
Une macro me crée mon nouveau mail, ça devrait suffire si j'en juge par l'article de la KB Microsoft :-/
0
cs_Piksou Messages postés 7 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 30 juillet 2007
30 juil. 2007 à 11:33
J'avais fait n'importe quoi, c'est bon, ça marche
Merci à tous pour votre aide
0
Rejoignez-nous