Envoyer mail via Outlook sans librairie

Bonjour à tous,

Je suis confronté à un léger problème qui est assez gênant. Dans le fichier de gestion, j'ai implémenté l'envoi automatique d'un mail à la personne qui est assigné à la tâche.

J'ai activé la librairie Microsoft Outlook 16. Sauf que certaines personnes qui utilisent ce logiciel n'ont pas la version 16 mais celle d'avant et ne peuvent pas utiliser le fichier sur le moment. Il faut que j'aille changer la version de la librairie et mettre celle qui disponible sur leur ordinateur.

Du coup, pour éviter ce genre de problème à l'avenir. Est-ce que c'est possible de se passer de la librairie de Excel et de pouvoir envoyer de messages ?

Ci-dessous, le code pour envoyer le mail qui utilise actuellement la librairie

'*************************
'Procédure d'envoi d'un mail
'*************************
Sub EnvoyerEmail(ByVal Sujet As String, ByVal Destinataire As String, ByVal ContenuEmail As String, Optional ByVal PieceJointe As String)

On Error GoTo EnvoyerEmailErreur

Dim oOutlook As Outlook.Application
Dim oMailItem As Outlook.MailItem

    'vérification si le Contenu du mail n'est pas vide
    If Len(ContenuEmail) = 0 Then
        MsgBox "Mail non envoyé car vide", vbOKOnly, "Message"
        Exit Sub
    End If

    'préparer Outlook
    PreparerOutlook oOutlook
    Set oMailItem = oOutlook.CreateItem(0)

    'création de l'email
    With oMailItem
        .To = Destinataire
        .Subject = Sujet

        'email formaté comme HTML (aussi par défaut)
            .BodyFormat = olFormatHTML
            .HTMLBody = "<html><p>" & ContenuEmail & "</p></html>"

        If PieceJointe <> "" Then .Attachments.Add PieceJointe

       .Display   'affiche l'email 
       .Save      'sauvegarde l'email avant l'envoi 
       .Send      'envoie l'email
    End With

   'nettoyage...
    If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
    If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing

Exit Sub
EnvoyerEmailErreur:
    If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
    If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing

    MsgBox "Le mail n'a pas pu être envoyé...", vbCritical, "Erreur"
End Sub

'*************************
'Procédure d'ouverture de Outlook au cas où
'*************************
Private Sub PreparerOutlook(ByRef oOutlook As Object)
On Error Resume Next
    'vérification si Outlook est ouvert
    Set oOutlook = GetObject(, "Outlook.Application")

    If (Err.Number > 0) Then 'si Outlook n'est pas ouvert, une instance est ouverte
        Err.Clear
        Set oOutlook = CreateObject("Outlook.Application")

        If (Err.Number > 0) Then
            MsgBox "Une erreur est survenue lors de l'ouverture de Outlook..."
            Exit Sub
        Else
        End If

    Else    'si Outlook est ouvert, l'instance existante est utilisée
    End If

End Sub

Bonne journée !

Lucas

bonjour,

remplace tes instructions Dim par celles-ci

Dim oOutlook As Object
Dim oMailItem As Object

Ainsi tu n'as plus besoin de faire la référence à la librairie outlook dans VBA. Le createobject utilisera la version d'outlook disponible sur la machine de l'utilisateur de ta macro. Ca devrait fonctionner, non testé.

J'ai modifié les variables en object mais il n'envoi pas de mail.

image

Est-ce qu'il faut instancier l'application juste après les variables objects ?

Comme ceci ?

  Set oOutlook = CreateObject("Outlook.Application")

re-bonjour,

du fait d'avoir enlevé la référence, la constante olFormatHTML, n'est plus définie (je n'avais pas vu que ton programme l'utilisait). ce qui provoque une erreur.

pour corriger

.BodyFormat = 2 'olFormatHTML

Merci pour l'information sur le body format. J'avais pas tilté dessus !

Juste par curiosité les valeurs .BodyFormat qui peuvent être utilisable sont lesquels ?

1 --> ?

2 --> HTML

3--> ?

re-bonjour,

une simple recherche sur internet me donne ceci

https://docs.microsoft.com/en-us/office/vba/api/outlook.olbodyformat

Rechercher des sujets similaires à "envoyer mail via outlook librairie"