Modif VBA pour ne plus avoir Outlook ObjectLibrary

Bonjour à tous,

J'ai bien recherché et aussi trouvé pas mal de réponses à mon problème mais honnêtement je n'arrive pas à l'appliquer sur un code VBA de notre fichier.

Je vous explique :

Nous avons un fichier excel qui nous permet d'envoyer un mail avec une visualisation de celui-ci avant qu'il parte (obligatoire), car nous pouvons être amenés à rajouter des précisions sur le mail.

Tout fonctionnait bien jusqu'au moment où nous avons eu sur quelques micro, le passage d'Office 2010 à 2016.

Résultat : aucun problème pour 2016 et "Erreur compilation" pour Office 2010.

A partir du moment où 2016 ouvre le fichier et il fait référence à la bibliothèque outlook 16.

Par contre 2010, lui, va chercher la bibliothèque outlook 14 mais si le fichier a été utilisé juste avant par 2016, il met dans les Références "MANQUANT : Microsoft Outlook 16.0 Object Library"; il faut le décocher et aller cocher la Library 14.0

C'est la solution, mais pas pratique du fait que le fichier soit partagé et utilisé par une trentaine de personnes différentes.

C'est là, que je vous appelle "à l'aide" pour pouvoir me dire ce que j'aurais à modifier sur le code VBA pour qu'il ne fasse plus appel à la bibliothèque d'Outlook.

Précision : la personne qui avait conçu la macro ne fait plus partie de notre organisation et nous sommes "au pied du mur"... Je ne maitrise pas le VBA, mais j'ai bien cherché avant de faire mon post (je redis que j'ai trouvé ce qu'il faut faire, mais je n'arrive pas à l'adapter c'est tout).

Merci beaucoup.

Voilà le code :

Sub Envoyer_Mail_Outlook()
Dim ObjOutlook As New Outlook.Application
Dim oBjMail
Dim dest As String
Dim a As Long
Dim finlig As Long
Dim grade As String
Dim grade_arr As String
Dim corps As String

    Set ObjOutlook = New Outlook.Application
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)
    finlig = Sheets("tables").Range("D65536").End(xlUp).Row
    dest = Sheets("Circuit DEPART").Range("K32").Value
    grade_arr = Sheets("Circuit DEPART").Range("B3").Value

For a = 105 To finlig
        grade = Sheets("tables").Cells(a, 4).Value
        If CStr(grade) = CStr(grade_arr) Then
            corps = Sheets("tables").Cells(a, 5).Value
            Select Case corps
                Case "PO"
                    dest = dest & Sheets("Circuit DEPART").Range("B59").Value
                Case "PSO"
                    dest = dest & Sheets("Circuit DEPART").Range("B60").Value
                Case "PMDR"
                    dest = dest & Sheets("Circuit DEPART").Range("B61").Value
            End Select
            Exit For
        End If
Next a

      With oBjMail
        .To = Sheets("Circuit DEPART").Range("K36").Value  '  le destinataire
        .Subject = Sheets("Circuit DEPART").Range("K8").Value      ' l'objet du mail
        .Body = Sheets("Circuit DEPART").Range("K9").Value  'le corps du mail ..son contenu
        .Display '   Ici on peut supprimer pour l'envoyer sans vérification
    End With
    'ObjOutlook.Quit
    Set oBjMail = Nothing
    Set ObjOutlook = Nothing
End Sub

Bonjour

quelques fils de discussion à ce sujet:

https://forum.excel-pratique.com/excel/envoyer-un-mail-avec-outlook-sans-object-library-t71481.html

https://forum.excel-pratique.com/excel/manquant-microsoft-outlook-16-0-object-library-t96266-10.html

par Greg.Leo à adapter :

Le code suivant permet d'envoyer des emails avec Outlook sans cocher une référence OBJECT LIBRARY

Sub SendOLMail_LateBound()
    Dim oAPP                       As Object
    Dim oItem                      As Object
    ' need to declare this constant as it has no meaning without
  ' the reference set to the Outlook library
  Const olMailItem               As Long = 0

    ' instantiate the Application - cannot use New without a reference
  ' so we must use CreateObject
  Set oAPP = CreateObject("Outlook.Application")

    ' #######################################
  ' NOTE: THE REST OF THE CODE IS IDENTICAL
  ' #######################################

    ' create a new email
  Set oItem = oAPP.CreateItem(olMailItem)

    ' set basic properties and display the email
  With oItem
        .To = "foo@bar.com"
        .Subject = "this is a test"
        .Body = "nothing to see here"
        .Display
    End With

End Sub

une autre solution d'essayer de voir avec le support Office car des licences sur des news posts

voir aussi Early ou Late Binding

Bonjour Andre13,

Merci tout d'abord de l'aide et de l'attention apportée à mon post.

Effectivement tous ces posts je les ai vus et c'est là "où je marche sur des oeufs", c'est pour modifier le code vba pour devenir comme celui cité. J'ai tenté sans succès, ou sûrement je m'y suis pas trop bien pris peut être.

Je ne veux pas avoir "tout cuit sans chercher".... mais ce que je demande, si je peux me permettre, c'est concrètement que dois-je modifier ou supprimer sur le code créé pour arriver à la solution ; et surtout pour comprendre en même temps.

Merci beaucoup.

Bonjour,

ne t'inquiètes pas je suis novice en la matière, de mon côté j'aurai mis comme ceci, bien entendu il doit y avoir beaucoup plus simple,

une petite idée à sauvegarder auparavant

oulala pas certain de ce code mais à voir

Sub Envoyer_Mail_Outlook()
'Dim ObjOutlook As New Outlook.Application
Dim oBjMail
Dim dest As String
Dim a As Long
Dim finlig As Long
Dim grade As String
Dim grade_arr As String
Dim corps As String
Dim oAPP   As Object
Dim oItem  As Object

Const olMailItem               As Long = 0

    Set oAPP = CreateObject("Outlook.Application")
    Set oItem = oAPP.CreateItem(olMailItem)
    finlig = Sheets("tables").Range("D65536").End(xlUp).Row
    dest = Sheets("Circuit DEPART").Range("K32").Value
    grade_arr = Sheets("Circuit DEPART").Range("B3").Value

For a = 105 To finlig
        grade = Sheets("tables").Cells(a, 4).Value
        If CStr(grade) = CStr(grade_arr) Then
            corps = Sheets("tables").Cells(a, 5).Value
            Select Case corps
                Case "PO"
                    dest = dest & Sheets("Circuit DEPART").Range("B59").Value
                Case "PSO"
                    dest = dest & Sheets("Circuit DEPART").Range("B60").Value
                Case "PMDR"
                    dest = dest & Sheets("Circuit DEPART").Range("B61").Value
            End Select
            Exit For
        End If
Next a

      With oBjMail
       .To = Sheets("Circuit DEPART").Range("K36").Value          ' le destinataire
       .Subject = Sheets("Circuit DEPART").Range("K8").Value      ' l'objet du mail
       .Body = Sheets("Circuit DEPART").Range("K9").Value         ' le corps du mail ..son contenu
       .Display                                                   '  Ici on peut supprimer pour l'envoyer sans vérification
   End With
    ' ObjOutlook.Quit
    'Set oBjMail = Nothing
    ' Set ObjOutlook = Nothing
   '  Set oApp = Nothing
     'Set oItem = Nothing

End Sub

Bonjour,

si je peux me permettre une correction. La correction d'André utilise Oapp et Omail et c'est ObjOutlook et ObjMail qui sont utilisés plus loin.

Sub Envoyer_Mail_Outlook()
Dim ObjOutlook As object
Dim oBjMail
Dim dest As String
Dim a As Long
Dim finlig As Long
Dim grade As String
Dim grade_arr As String
Dim corps As String

    Set ObjOutlook = createobject("outlook.application")
    Set oBjMail = ObjOutlook.CreateItem(olMailItem) 'olmailItem=0 
    finlig = Sheets("tables").Range("D65536").End(xlUp).Row
    dest = Sheets("Circuit DEPART").Range("K32").Value
    grade_arr = Sheets("Circuit DEPART").Range("B3").Value

For a = 105 To finlig
        grade = Sheets("tables").Cells(a, 4).Value
        If CStr(grade) = CStr(grade_arr) Then
            corps = Sheets("tables").Cells(a, 5).Value
            Select Case corps
                Case "PO"
                    dest = dest & Sheets("Circuit DEPART").Range("B59").Value
                Case "PSO"
                    dest = dest & Sheets("Circuit DEPART").Range("B60").Value
                Case "PMDR"
                    dest = dest & Sheets("Circuit DEPART").Range("B61").Value
            End Select
            Exit For
        End If
Next a

      With oBjMail
        .To = Sheets("Circuit DEPART").Range("K36").Value  '  le destinataire
       .Subject = Sheets("Circuit DEPART").Range("K8").Value      ' l'objet du mail
       .Body = Sheets("Circuit DEPART").Range("K9").Value  'le corps du mail ..son contenu
       .Display '   Ici on peut supprimer pour l'envoyer sans vérification
   End With
    'ObjOutlook.Quit
   Set oBjMail = Nothing
    Set ObjOutlook = Nothing
End Sub

Rebonjour Andre13 et bonjour h2so4,

Pour Andre13 ; cela n'a pas fonctionné ; erreur.

Pour h2so4 ; cela fonctionne.

Merci à vous deux pour votre aide précieuse.

Rechercher des sujets similaires à "modif vba outlook objectlibrary"