[VBA] Macro "*.mso"

Macro "*.mso" [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 09-11-2004 à 13:29:40    

Bonjour,
 
Je dois faire un fichier Word généré dynamiquement depuis un site web.
Pour faire le fichier Word, je n'ai aucun problème, ça fonctionne.
 
Par contre, je dois lier une macro à ce fichier.
 
Un collègue (qui n'est plus ici, et qui n'a pas laissé de doc) a déjà fait ceci, et ça fonctionne bien.
 
Depuis le document généré dynamiquement, il appelle un fichier "*.mso" contenant la macro.
 
Ca lève une chiée de warning à l'ouverture, mais c'est pas très dérangeant, et ça marche.
 
Seulement, depuis l'éditeur de macro de Word, impossible de mettre la main sur une fonction permettant d'exporter une macro sous ce format.
 
Savez-vous comment faire ?
 
Depuis Word, je n'arrive même pas à intégrer cette macro manuellement dans un document [:spamafote]
 
Par contre, dynamiquement, aucun problème, il suffit de mettre le lien dans la partie header du fichier Word (au format HTML) :
 

Code :
  1. <link rel=Edit-Time-Data href="http://gemseas.euro.med.ge.com/sales/autotext/mailing/editdata.mso">


 
Comment on fait ça ? :sweat:

Reply

Marsh Posté le 09-11-2004 à 13:29:40   

Reply

Marsh Posté le 09-11-2004 à 13:30:51    

PS: c'est un format apparement "compilé".
Il n'est pas lisible.
 
Par contre, quand on ouvre un fichier généré qui fait appel à ce fichier, les macro à l'intérieur sont lisibles :pt1cable:

Reply

Marsh Posté le 09-11-2004 à 13:40:38    

Désolé pour la question con...
 
Il suffit de créer un fichier Word tout bête avec une Macro, puis de faire "Enregistrer sous" et choisir "HTML".
Un fichier "*.mso" est alors automatiquement créé dans le répertoire "nomdufichier_files"
 
http://www.blonnet.com/ew/2003/01/ [...] 310400.htm


Message édité par Arjuna le 09-11-2004 à 13:40:48
Reply

Marsh Posté le 09-11-2004 à 13:47:42    

non c'est cool jviens d'apprendre qque chose ;)

Reply

Marsh Posté le 09-11-2004 à 15:12:53    

Sinon, j'ai un souci...
 
J'ai plusieurs macros.
 
Lorsque j'ouvre le fichier depuis un lien internet, j'obtiens un message comme quoi le fichier contient des macros, et que je ne dois pas le charger parceque c'est pas sûr. (normal)
J'ignore le message pour charger les macros.
Par contre, je n'ai pas le second avertissement pour activer ou non les macros.
 
Lorsque je prends le fichier sur lequel je me suis basé, j'ai rigoureusement le même code au niveau du fichier word lui-même, et pour la macro, je ne vois pas de différence (en fait, j'ai fait un copier/coller de tous les modules et j'ai shooté/remplacé les parties concernées).
Par contre, ce fichier m'ouvre le premier message 5 fois de suis (un peu chiant :D) et ensuite me propose d'activer les macros !
 
Le pire de tout, c'est que mon fichier, même sans ce message contient les macros. Les macros automatiques (document_open, document_new, document_close) sont inutilisables (mais le code est présent) alors que la macro "à la main" "autosave" peut être appelée en faisant ALT+F8, et tourne normalement !!!
 
Personne ne sais d'où ça peut venir ?
Ca fait 25 fois que je refais le document, que je le tortille dans tous les sens, mais pas moyen. :cry:
 
Voici le code de la macro, tel qu'il est chargé depuis mon lien :
 

Code :
  1. Private Const PassiveConnection As Boolean = True
  2. Private Const FtpServer As String = "garlic"
  3. Private Const strLogon As String = "integre"
  4. Private Const strPwd As String = "integre"
  5. Option Explicit
  6. Sub RemoteSave()
  7.     Dim DocType, Login, Customer As String
  8.     Dim Today As Date
  9.     Dim DispDate, DispHour As String
  10.     Dim Temp, usr As String
  11.     Dim FileName, FilePath, TempPath As String
  12.     Dim hOpen, hConnection As Long
  13.     Dim bRet As Boolean
  14.     Dim WSHShell, fso
  15.     Dim inet As InternetExplorer
  16.     Set inet = New InternetExplorer
  17.  
  18.     DocType = ActiveDocument.BuiltInDocumentProperties(wdPropertyTitle)
  19.     Login = ActiveDocument.BuiltInDocumentProperties(wdPropertyAuthor)
  20.     If Login = "" Then
  21.         Login = Environ("username" )
  22.     End If
  23.     Customer = ActiveDocument.BuiltInDocumentProperties(wdPropertySubject)
  24.     ActiveDocument.BuiltInDocumentProperties("Subject" ) = ""
  25.     Today = Now
  26.     DispDate = Right("20" & Year(Today), 4) & Right("00" & Month(Today), 2) & Right("00" & Day(Today), 2)
  27.     DispHour = Hour(Today) & "h" & Right("00" & Minute(Today), 2)
  28.     Set WSHShell = CreateObject("Wscript.Shell" )
  29.     usr = WSHShell.Regread("HKEY_CURRENT_USER\Volatile Environment\HOMEPATH" )
  30.     Set WSHShell = Nothing
  31.  
  32.     Temp = Environ("TEMP" )
  33.    
  34.     FileName = DocType & "_" & Customer & "_" & Replace(Login, " ", "-" ) & "_" & DispDate & "-" & DispHour & ".doc"
  35.     FilePath = Temp & "\" & FileName
  36.     TempPath = Replace(FilePath, ".doc", "_tmp.doc" )
  37.     ActiveDocument.SaveAs FilePath, wdFormatDocument, True
  38.     ActiveDocument.SaveAs TempPath, wdFormatDocument, True
  39.        
  40.     hOpen = InternetOpen("Template", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
  41.     hConnection = InternetConnect(hOpen, FtpServer, INTERNET_DEFAULT_FTP_PORT, strLogon, strPwd, INTERNET_SERVICE_FTP, IIf(PassiveConnection, INTERNET_FLAG_PASSIVE, 0), 0)
  42.     FtpSetCurrentDirectory hConnection, "/opt/generix/interface/crm/template/"
  43.     FtpPutFile hConnection, FilePath, FileName, FTP_TRANSFER_TYPE_UNKNOWN, 0
  44.     InternetCloseHandle hConnection
  45.     InternetCloseHandle hOpen
  46.    
  47.     ActiveDocument.SaveAs FilePath, wdFormatDocument, True
  48.     Set fso = CreateObject("Scripting.FileSystemObject" )
  49.     fso.DeleteFile (fso.GetFile(TempPath))
  50.     Set fso = Nothing
  51.    
  52.     inet.Visible = False
  53.     inet.Navigate "http://gemseas-devl.euro.med.ge.com:8081/sales/autotext/registerdoc.asp?cus=" & Customer & "&usr=" & Login & "&typ=" & DocType & "&tps=" & DispDate & Replace(DispHour, "h", "" ) & "&fic=" & FileName
  54.     Do While Not inet.ReadyState = READYSTATE_COMPLETE
  55.         DoEvents
  56.     Loop
  57.     Set inet = Nothing
  58. End Sub
  59. Private Sub Document_Close()
  60.     On Error Resume Next
  61.     CustomizationContext = NormalTemplate
  62. ' Cancel the keyboard shortcut "Ctrl+Shift+A"
  63.     KeyBindings.Key(KeyCode:=BuildKeyCode(wdKeyControl, _
  64.         wdKeyShift, wdKeyS)).Clear
  65. ' Remove the "Save Document" command from the right-click menu
  66.     Application.CommandBars("Text" ).Controls("Save Document" ).Delete
  67.     If MsgBox("Do you want to save your job before closing the file ?", vbYesNo, "Save changes" ) = vbYes Then
  68.         RemoteSave
  69.     End If
  70. End Sub
  71. Private Sub Document_Open()
  72.     MsgBox ("Ca va marcher un jour ?" )
  73.     Dim NewControl As CommandBarControl
  74. ' Assign the keyboard shortcut "Ctrl+Shift+A"
  75.     CustomizationContext = NormalTemplate
  76.     KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, _
  77.         wdKeyShift, wdKeyS), KeyCategory:=wdKeyCategoryMacro, _
  78.         Command:="ThisDocument.RemoteSave"
  79. ' Add the "Insert Date" command to the right-click menu
  80.     Set NewControl = Application.CommandBars("Text" ).Controls.Add
  81.     With NewControl
  82.         .Caption = "Save Document"
  83.         .OnAction = "ThisDocument.RemoteSave"
  84.         .BeginGroup = False
  85.     End With
  86. End Sub
  87. Private Sub Document_New()
  88.     Dim NewControl As CommandBarControl
  89. ' Assign the keyboard shortcut "Ctrl+Shift+A"
  90.     CustomizationContext = NormalTemplate
  91.     KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, _
  92.         wdKeyShift, wdKeyS), KeyCategory:=wdKeyCategoryMacro, _
  93.         Command:="ThisDocument.RemoteSave"
  94. ' Add the "Insert Date" command to the right-click menu
  95.     Set NewControl = Application.CommandBars("Text" ).Controls.Add
  96.     With NewControl
  97.         .Caption = "Save Document"
  98.         .OnAction = "ThisDocument.RemoteSave"
  99.         .BeginGroup = False
  100.     End With
  101. End Sub


 
PS: J'ai évidement essayé de me mettre en sécurité minimale, ça ne change rigoureusement rien (mise à part qu'en minimum, je n'ai plus du tout de message d'alerte)


Message édité par Arjuna le 09-11-2004 à 15:13:26
Reply

Marsh Posté le 09-11-2004 à 15:14:44    

Vous noterez le :
 

Code :
  1. Private Sub Document_Open()
  2.     MsgBox ("Ca va marcher un jour ?" )


 
:D
 
Evidement, il ne s'affiche jamais !
 
Je pète les plombs :cry:

Reply

Marsh Posté le 09-11-2004 à 15:32:49    

Ha, et j'ai oublié de préciser : Si j'enregistre le document avec les macro foireuses sur mon PC, et que je le réouvre, hop ! Comme par magie les macros fonctionnent normalement :fou:

Reply

Marsh Posté le 10-11-2004 à 12:08:04    

Hallucinant...
 
J'ai repris le code d'une macro qui marche déjà comme il faut.
 
J'ai remplacé le MSO du fichier par le mien.
Ca marche.
 
Plus qu'à modifier le layout du fichier word...
 
Je pars de ça (après pas mel de nettoyage)
 
Maintenant, j'ai ça : (c'est pas du tout ce que je veux, moi je veux un document vide avec deux colonnes)
 

Code :
  1. <html xmlns:v="urn:schemas-microsoft-com:vml"
  2. xmlns:o="urn:schemas-microsoft-com:office:office"
  3. xmlns:w="urn:schemas-microsoft-com:office:word"
  4. xmlns="http://www.w3.org/TR/REC-html40">
  5. <head>
  6. <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
  7. <meta name=ProgId content=Word.Document>
  8. <meta name=Generator content="Microsoft Word 9">
  9. <meta name=Originator content="Microsoft Word 9">
  10. <link rel=File-List href="./labels/filelist.xml">
  11. <link rel=Edit-Time-Data href="http://gemseas-devl.euro.med.ge.com:8081/sales/crm/labels/editdata.mso">
  12. <title>LABELS</title>
  13. <!--[if gte mso 9]>
  14. <xml>
  15. <o:DocumentProperties>
  16.  <o:Subject><%=Request.QueryString("cus" )%></o:Subject>
  17.  <o:Author><%=session("USER" )%></o:Author>
  18.  <o:LastAuthor>GE Medical Systems</o:LastAuthor>
  19.  <o:Company>GE Medical Systems</o:Company>
  20. </o:DocumentProperties>
  21. <w:WordDocument>
  22.  <w:View>Print</w:View>
  23.  <w:Zoom>100</w:Zoom>
  24. </w:WordDocument>
  25. </xml>
  26. <![endif]-->
  27. <style>
  28. <!--
  29. /* Font Definitions */
  30. @font-face
  31. {font-family:SimSun;
  32. panose-1:2 1 6 0 3 1 1 1 1 1;
  33. mso-font-alt:\5B8B\4F53;
  34. mso-font-charset:134;
  35. mso-generic-font-family:auto;
  36. mso-font-format:other;
  37. mso-font-pitch:variable;
  38. mso-font-signature:1 135135232 16 0 262144 0;}
  39. @font-face
  40. {font-family:"\@SimSun";
  41. panose-1:2 1 6 0 3 1 1 1 1 1;
  42. mso-font-charset:134;
  43. mso-generic-font-family:auto;
  44. mso-font-pitch:variable;
  45. mso-font-signature:3 135135232 16 0 262145 0;}
  46. /* Style Definitions */
  47. p.MsoNormal, li.MsoNormal, div.MsoNormal
  48. {mso-style-parent:"";
  49. margin:0in;
  50. margin-bottom:.0001pt;
  51. mso-pagination:widow-orphan;
  52. font-size:12.0pt;
  53. font-family:"Times New Roman";
  54. mso-fareast-font-family:SimSun;
  55. mso-fareast-language:ZH-CN;}
  56. h1
  57. {mso-style-next:Normal;
  58. margin:0in;
  59. margin-bottom:.0001pt;
  60. mso-pagination:widow-orphan;
  61. page-break-after:avoid;
  62. mso-outline-level:1;
  63. font-size:14.0pt;
  64. mso-bidi-font-size:10.0pt;
  65. font-family:"Times New Roman";
  66. mso-fareast-font-family:"Times New Roman";
  67. mso-font-kerning:0pt;
  68. mso-ansi-language:DE;
  69. mso-fareast-language:DE;
  70. mso-bidi-language:AR-SA;
  71. mso-bidi-font-weight:normal;}
  72. h2
  73. {mso-style-next:Normal;
  74. margin:0in;
  75. margin-bottom:.0001pt;
  76. mso-pagination:widow-orphan;
  77. page-break-after:avoid;
  78. mso-outline-level:2;
  79. tab-stops:right 198.45pt left 212.65pt right 6.3in;
  80. font-size:12.0pt;
  81. mso-bidi-font-size:10.0pt;
  82. font-family:"Times New Roman";
  83. mso-fareast-font-family:"Times New Roman";
  84. mso-ansi-language:DE;
  85. mso-fareast-language:DE;
  86. mso-bidi-language:AR-SA;
  87. mso-bidi-font-weight:normal;}
  88. p.MsoHeader, li.MsoHeader, div.MsoHeader
  89. {margin:0in;
  90. margin-bottom:.0001pt;
  91. mso-pagination:widow-orphan;
  92. tab-stops:center 3.15in right 6.3in;
  93. font-size:12.0pt;
  94. mso-bidi-font-size:10.0pt;
  95. font-family:"Times New Roman";
  96. mso-fareast-font-family:"Times New Roman";
  97. mso-ansi-language:DE;
  98. mso-bidi-language:AR-SA;
  99. layout-grid-mode:line;}
  100. a:link, span.MsoHyperlink
  101. {color:blue;
  102. text-decoration:underline;
  103. text-underline:single;}
  104. a:visited, span.MsoHyperlinkFollowed
  105. {color:purple;
  106. text-decoration:underline;
  107. text-underline:single;}
  108. @page Section1
  109. {size:595.3pt 841.9pt;
  110. margin:19.85pt 51.05pt 14.2pt 68.05pt;
  111. mso-header-margin:0in;
  112. mso-footer-margin:0in;
  113. mso-paper-source:0;}
  114. div.Section1
  115. {page:Section1;}
  116. -->
  117. </style>
  118. <!--[if gte mso 9]><xml>
  119. <o:shapedefaults v:ext="edit" spidmax="2050"/>
  120. </xml><![endif]--><!--[if gte mso 9]><xml>
  121. <o:shapelayout v:ext="edit">
  122.   <o:idmap v:ext="edit" data="1"/>
  123. </o:shapelayout></xml><![endif]-->
  124. </head>
  125. <body lang=EN-US link=blue vlink=purple style='tab-interval:.5in'>
  126. <div class=Section1>
  127. <h1 style='tab-stops:right 474.9pt'>
  128. <u>
  129.  <span lang=DE>Antwort per FAX 040 / 65 88 65 99 oder Brief
  130.   <span style='mso-tab-count:1'></span>
  131.   <o:p></o:p>
  132.  </span>
  133. </u>
  134. </h1>
  135. <p class=MsoNormal style='tab-stops:right 474.9pt'><span lang=DE style='mso-ansi-language:DE'>GE Medical Systems</span><b style='mso-bidi-font-weight:normal'><span lang=DE style='font-size:16.0pt;mso-bidi-font-size:12.0pt;mso-ansi-language:DE'><span style='mso-tab-count:1'>                                                 </span>Aufgepasst!</span></b><b style='mso-bidi-font-weight:normal'><span lang=DE style='font-size:14.0pt;mso-bidi-font-size:12.0pt;mso-ansi-language:DE'> </span></b><b style='mso-bidi-font-weight:normal'><span style='font-size:14.0pt;mso-bidi-font-size: 12.0pt'></span></b><b style='mso-bidi-font-weight:normal'><span lang=DE style='font-size:14.0pt; mso-bidi-font-size:12.0pt;mso-ansi-language:DE'><o:p></o:p></span></b></p>
  136. <p class=MsoNormal style='tab-stops:right 474.9pt'><span lang=DE style='mso-ansi-language:DE'>Accessories &amp; Supplies GmbH<span style='mso-tab-count:1'>                                                                   </span><b style='mso-bidi-font-weight:normal'>Hier ist mehr für Sie drin...</b><o:p></o:p></span></p>
  137. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  138. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  139. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  140. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  141. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  142. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  143. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  144. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  145. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  146. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  147. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  148. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  149. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  150. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  151. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  152. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  153. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  154. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  155. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  156. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  157. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  158. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  159. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  160. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  161. <p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>
  162. </div>
  163. </body>
  164. </html>


 
Ben vous le croirez ou non, mais si je vire une ligne "<p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>" ou bien que je supprime un mot dans le texte, ça marche plus ! :ouch:
 
PS: Nan, c'est pas une histoire de checksum ou je ne sais quoi. Le MSO n'est pas l'original lié à la macro, mais le mien, créé dans un autre document, et avant d'en arriver là, j'ai viré plein de trucs (le pied de page et des images)
 
Là, je comprends plus :sweat:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed