Afficher un message
Vieux 19/06/2005, 20h31   #4 (permalink)
_Thierry
XLDnaute Barbatruc
 
Date d'inscription: février 2005
Messages: 3 097
Par défaut Re:VBProject.Reference msoutl.olb Office 2003 => 2002

Re bonsoir le Forum, Olivier

Bon alors je me suis débrouillé... Mais je trouve que les explications de Microsoft sont assez ambigues quand même...

Dans le cas d'un développement pouvant circuler de versions Ultérieures vers des version Antérieures et vice/versa, en fait il ne faut jamais faire instance aux Objets Directement :
Dim OLApplication As Outlook.Application, OLMail As Outlook.MailItem

Mais il faut simplement faire une une liaison tardive au lieu d'une liaison anticipée comme ci-dessus...

Huum :whistle:

En fait Microsoft explique pour ceci contourner ce problème :

'Une liaison tardive est recommandée pour l'automatisation de plusieurs versions d'une application Office depuis un client hors processus. L'implémentation initiale du membre révisé est également dans la nouvelle version de Microsoft Office et se trouve à la même position par rapport au début de l'interface. C'est pourquoi, un client Automation compilé avec une bibliothèque de types Office 97 fonctionne avec l'application Office 2000 ou version ultérieure'....

Donc dans le sens 'montant' no problèmo...

Mais ensuite je lis ceci :
'Si vous développez un client Automation pour Microsoft Access 97 et 2000, vous ne devez pas utiliser une liaison anticipée : une liaison tardive est recommandée. Le modèle d'objet Access 2000 a été modifié de sorte à interrompre la compatibilité binaire (vtable) et Dispid. Toute application client qui utilise une liaison anticipée ou Dispid avec Access 97 peut cesser de fonctionner correctement en cas d'utilisation avec Access 2000....'


Enfin en bref il ne faut pas faire d'instance aux Objects directement si l'application est en circulation sur différentes version d'Office...

Par conséquent, je ne déclare aucune référence à la librairie Outlook, et mon code donne ceci :
Citation:
'Option Explicit'<<<<< NB DEVIENT INTERDIT

Const MailTo AsString = 'Toto@xld.com'
Const MailCC AsString = 'Zaza@xld.com; Titi@xld.com'

'================================================= ==========================
'&nbsp; &nbsp; &nbsp; &nbsp; 'NO Need reference to Microsoft Outlook xx Objects Library
'
'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; => AS USING LATE BINDING
' One problem with early binding is that most type library aware compilers
' will 'auto-update' your reference to the latest library that is available
' on the system. This means that if you need to use the earliest version
' of the library in order to work with multiple versions of an Office
' application, you must explicitly specify the older library in your project.
'
' MS Article :&nbsp; Q244167 /// words:&nbsp; kbinfo kbautomation KB244167
' support.microsoft.com/default.aspx?scid=kb;EN-US;244167
'================================================= ==========================

Sub SendingDailyMail()
Dim OLApplication As Object, OLMail AsObject
Dim Message AsString
Dim TheDay AsDate

TheDay =
Date

Message = 'Good Morning,' & vbCrLf & vbCrLf & _
= = = This is an automatic generated email = = = & vbCrLf & vbCrLf & _
Please find enclosed the Report for Transactions for&nbsp; & Format(TheDay, 'DDDD') & _
&nbsp; ' ' & Format(TheDay, 'DD/MM/YYYY') & vbCrLf & _
Best Regards & vbCrLf & '@+Thierry' & vbCrLf & vbCrLf


Set OLApplication = CreateObject('Outlook.Application')
Set OLMail = OLApplication.CreateItem(OLMailItem)
&nbsp;
With OLMail
&nbsp; .To = MailTo
&nbsp; .CC = MailCC
&nbsp; .Importance = olImportanceNormal
&nbsp; .Subject = 'Daily Transactions Summary Reports (' & _
&nbsp; &nbsp; Format(TheDay, 'YYYY-MM-DD') & ')'
&nbsp; .Body = Message
&nbsp;
'.Attachments.Add 'I:\\MC_PROD\\Reports\\Daily\\Test1.xls'
&nbsp;
'.Attachments.Add 'I:\\MC_PROD\\Reports\\Daily\\Test1.pdf'
&nbsp; .Categories = 'Daily'
&nbsp; .OriginatorDeliveryReportRequested =
True
&nbsp; .ReadReceiptRequested =
True
&nbsp;
'.Send '<<<<<<<<<<<<<<<TO SEND DIRECTLY
&nbsp; .Display
'<<<<<<<<<<<<<TO SEE THE MAIL FIRST
&nbsp;
EndWith
&nbsp; &nbsp; &nbsp;
Set OLApplication = Nothing
Set OLMail = Nothing
EndSub


C'est OK !!!!

Je viens de faire tourner ce code sur 97 / 2000 / 2002 et 2003 et en sens descendant aussi en sauvant le fichier entre chaque machine.

Ce que je suggère, lors d'un développement, faite quand même l'instance aux Objets dans les déclarations (liaison anticipée) pour pouvoir bénéficier de toutes les propriétés et méthodes s'afférant à l'objet ainsi que l'aide... Une fois que çà tourne sur votre configuration, 'saborder' les déclarations précises sur les Objets au profit de simples déclaration As Object... l'Option Explicit risque aussi d'avoir besoin d'être sabordé aussi... Et of course décochet la référence à la librairie de l'objet...

Voilà encore un sacré dimanche, et je n'ai pas du tout fini mon projet, mais au moins je suis moins bête qu'hier !!!

Bien à vous
@+Thierry

EDITION !!! Schmilblick avec l'URL de MS

La voilà à part :
http://support.microsoft.com/default...b;EN-US;244167

Message édité par: _Thierry, à: 19/06/2005 20:43
_Thierry est déconnecté   Réponse avec citation