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

Bonsoir à tous et toutes

Tiens me voilà dans un truc qui me fait perdre un certain temps, si ce n'est pas un temps certain !

Je résume, je peux travailler sous Office 2003 et Office 2002... Rien de bien fracassant...

J'ai un Programme qui fait ce genre de Chose :

Citation:
OptionExplicit

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

'================================================= ========================
'        'Need reference to Microsoft Outlook xx Objects Library
'
'        'C:\\Program Files\\Microsoft Office\\OfficeXX\\msoutl.olb
'================================================= ========================

Sub SendingDailyMail()
Dim OLApplication As Outlook.Application, OLMail As Outlook.MailItem
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  & Format(TheDay, 'DDDD') & _
  ' ' & Format(TheDay, 'DD/MM/YYYY') & vbCrLf & _
Best Regards & vbCrLf & '@+Thierry' & vbCrLf & vbCrLf


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

Jusque là rien de bien extraordinaire.... J'ai développé ceci sous Excel 2003...

Puis j'ai la bonne idée de faire des tests depuis un LapTop en réseau Wifi avec Office 2002 et Win XP Pro...

Paf !! la référence est manquante 'MISSING Microsoft Outlook 11.0 Objects Library...

Qu'à cela ne tienne je bascule manuellement sur la bonne référence (Microsoft Outlook 10.0 Objects Library) et je sauve mon Workbook, le ré-ouvre depuis ce LapTop, pas de soucis...

Je ré-ouvre depuis une autre machine avec Office 2003... Je fais tourner ma Sub 'SendingDailyMail'... No souci, je ferme, no souci, je ré-ouvre depuis 2002... No Souci...

Mais si jamais je sauve quand j'ai ce fichier sous 2003 et bien fini !! Ré_ouverture sous 2002 PAF !!! => MISSING Microsoft Outlook 11.0 Objects Library...

Cette satanée référence bascule vers la version la Plus haute à la sauvegarde et devient manquante sur une version Inférieure ensuite...

Donc à grand coup de renfort de Frédérique Sigonneau et Laurent Longre et tout ce que j'ai pu trouver sur le Net... j'ai écrit ceci :

Citation:
OptionExplicit

Sub ExcelVersionAnalysorForMSoutl()
Dim XLVersion AsByte
Dim OLLibraryPath AsString
Dim LoadOutlookDLL AsBoolean
Dim i AsByte

XLVersion = Val(Application.Version)

SelectCase XLVersion
Case 9
&nbsp; &nbsp; OLLibraryPath = 'C:\\PROGRAM FILES\\MICROSOFT OFFICE\\OFFICE\\msoutl9.olb'
Case 10
&nbsp; &nbsp; OLLibraryPath = 'C:\\Program Files\\Microsoft Office\\Office10\\msoutl.olb'
Case 11
&nbsp; &nbsp; OLLibraryPath = 'C:\\Program Files\\Microsoft Office\\OFFICE11\\msoutl.olb'
CaseElse
MsgBox 'Arf !!! ils ont sorti une nouvelle version d
'Office !!'
ExitSub
EndSelect


With Application.VBE.ActiveVBProject.References
&nbsp; &nbsp; &nbsp; &nbsp;
For i = 1 To .Count
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
If .Item(i).IsBroken = TrueThen
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
If .Item(i).Name = 'Oultlook' Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Remove .Item(i)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LoadOutlookDLL =
True
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
ExitFor
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
EndIf
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
EndIf
&nbsp; &nbsp; &nbsp; &nbsp;
Next i
&nbsp; &nbsp;
If LoadOutlookDLL = TrueThen .AddFromFile OLLibraryPath
EndWith
EndSub
Et je pensais m'en sortir avec un lancement dans le WorkBook_Open...

Et re Paf !!! Non j'ai bien VBE qui voit cette référence 'IsBroken', mais du coup j'ai ce message très sympathique :

'Complie Error' => Can't find Project or Library'
sur la Ligne :

If .Item(i).IsBroken = True Then

Ceci quand il a bouclé sur le 'i' à la position de cette fameuse référence à Outlook (que j'ai pris soin de mettre en dernière position de Priorité dans les références utilisées...) Par conséquent, isBroken, ne me semble pas adéquate, si il lui faut la référence à la Dll... (olb ici)

Je m'amuse à ce petit jeu depuis 3 bonnes heures, et j'avoue que c'est assez énervant, surtout que j'ai beau essayer dans tous les sens, mais à chaque fois Paf et Re-Paf !!

Est-ce que quelqu'un s'est déjà sorti de ce genre de galère, ou bien dois-je faire stopper systématiquement le déploiement d'Office 2003 tant qu'il restera des 2002 en exploitation ?

Je vous remercie d'avance pour vos essais, remarques ou suggestions...

Bonne Soirée
@+Thierry
_Thierry est déconnecté   Réponse avec citation
ANNONCES