Problème de versions "Microsoft Outlook xx.x Object Library"

Bonjour à tous,

je travaille sur l'automatisation d'un tableau Excel à partir duquel je crée des documents Powerpoint que j'envoie par e-mail à une liste de destinataires définie.

J'ai donc activé les références "Microsoft Outlook 12.0 Object Library" et "Microsoft Powerpoint 12.0 Object Library" dans mes macros, et tout fonctionne à merveille... sur mon poste seulement !

Je suis en Office 2007 et la majorité des autres postes de ma boite sont en 2003 !

Le problème est que sur un poste en 2003, les Object Library sont en version 11.0, ce qui fait que j'ai un joli message d'erreur "Can't find project or library" lors de l'éxécution de mes macros...

Ce document Excel doit pouvoir être utilisé sur plusieurs postes : comment faire pour qu'il fonctionne sur toutes les versions d'Excel ?

Est-il possible, via une commande, de faire charger la librairie 11.0 si l'utilisateur est en 2003, et la 12.0 s'il est en 2007 ?

Merci d'avance pour vos précieuses réponses !

Bonjour,

essaie d'utiliser les déclarations tardives ( Late Binding ). Au lieu de déclarer une variable de type Outlook, déclare la de type object. Voici un exemple d'envoie de mail par automation Outlook sans déclarer de références à Outlook:

Sub UseOutlook(strTo As String, strCC As String, strNomFichier As String, strSujet As String, strTexte As String)
  Dim MonOutlook As Object
  Dim MonMessage As Object
  Dim strNomClasseur As String

  Set MonOutlook = CreateObject("Outlook.Application")
  Set MonMessage = MonOutlook.CreateItem(0)
  strNomClasseur = strNomFichier

  On Error GoTo fin

    Sheets(strNomFichier).Copy
    ActiveWorkbook.SaveAs ("c:\" & strNomFichier & ".xls")
    strNomFichier = ActiveWorkbook.FullName

  MonMessage.To = strTo
  MonMessage.CC = strCC
  MonMessage.Attachments.Add strNomFichier
  MonMessage.Subject = strSujet
  MonMessage.Body = strTexte
  MonMessage.Send

  Workbooks(strNomClasseur).Close SaveChanges:=False
  Kill (strNomFichier)
  Set MonOutlook = Nothing
  Exit Sub

fin:
    MsgBox Err.Description
    Select Case Err.Number
        Case 9
            MsgBox "La valeur de la feuille est invalide" + vbCr + vbCr + "Opération annulé", vbCritical
        Case 1004, 287
            MsgBox "Une erreur est survenue durant la procédure" + vbCr + vbCr + "Opération annulé", vbCritical
            Workbooks(strNomClasseur).Close SaveChanges:=False
    Kill (strNomFichier)
    End Select
    Set MonOutlook = Nothing
    Set MonMessage = Nothing
End Sub

au lieu de dire:

dim MonOutlook as outlook.application

tu peux faire

  Dim MonOutlook As Object
  ...
  Set MonOutlook = CreateObject("Outlook.Application")

comme ça Excel va se servir de la bonne version de Outlook selon le poste.

Sinon tu peux utiliser

ThisWorkbook.VBProject.References.AddFromFile

et

Application.Version

pour activer une référence selon la version. Il faut que tu spécifie l'Adresse de la référence quand tu utilise AddFromFile:

Public Sub ActiveRef()
'Active la référence à Outlook selon la version d'excel    
Select Case Application.Version
        Case "11.0"
            Call Addref("c:\Program Files\Microsoft Office\OFFICE11\msoutl.olb")
        'Case le no de version de 2007
            'Call Addref("L'adresse du fichier")
    End Select
End Sub

Sub Addref(AdresseRef As String)
  On Error Resume Next
  ThisWorkbook.VBProject.References.AddFromFile AdresseRef
End Sub

Merci pour la réponse claire et précise, Math !

j'avais entre temps bidouillé sur les commandes "ThisWorkbook.VBProject.References.AddFromFile", cela fonctionnaint un peu mieux, mais cette fois-ci, l'erreur que j'obtenais était "Erreur Automation - Biliothèque non inscrite"...

J'ai suivi ton conseil et ai utilisé les déclarations tardives, tout fonctionne très bien maintenant !

Encore merci !

Rechercher des sujets similaires à "probleme versions microsoft outlook object library"