exemple trouvé sur forum
Sub EnvoyerEmail(ByVal Sujet As String, ByVal Destinataire As String, ByVal Destinataire1 As String, ByVal ContenuEmail As String, Optional ByVal PieceJointe As String)
On Error GoTo EnvoyerEmailErreur
'définition des variables
Dim Outlook As Object
Dim MailItem As Object
  
    If Len(ContenuEmail) = 0 Then
        MsgBox "Mail non envoyé car vide", vbOKOnly, "Message"
        Exit Sub
    End If
    
    'préparer Outlook
    'PreparerOutlook Outlook
    Set Outlook = CreateObject("outlook.application")
    Set MailItem = Outlook.CreateItem(0)
    
    'création de l'email
    With MailItem
        .To = Destinataire
        .CC = Destinataire1
        .Subject = Sujet
        
        'CHOIX DU FORMAT
        '----------------------
       
        
        If PieceJointe <> "" Then .Attachments.Add PieceJointe
       .Display   '<- affiche l'email (si vous ne voulez pas l'afficher, mettez cette ligne en commentaire)
       '.Save      '<- sauvegarde l'email avant l'envoi (pour ne pas le sauvegarder, mettez cette ligne en commentaire)
       '.Send      '<- envoie l'email (si vous voulez seulement préparer l'email et l'envoyer manuellement, mettez cette ligne en commentaire)
    End With
    
   'nettoyage...
   ' If (Not (MailItem Is Nothing)) Then Set MailItem = Nothing
   ' If (Not (Outlook Is Nothing)) Then Set Outlook = Nothing
    
Exit Sub
EnvoyerEmailErreur:
   ' If (Not (MailItem Is Nothing)) Then Set MailItem = Nothing
   ' If (Not (Outlook Is Nothing)) Then Set Outlook = Nothing
  
    MsgBox "Le mail n'a pas pu être envoyé...", vbCritical, "Erreur"
End Sub
Private Sub PreparerOutlook(ByRef Outlook As Object)
'par Excel-Malin.com ( 
https://excel-malin.com )
'------------------------------------------------------------------------------------------------
'Ce code vérifie si Outlook est prêt à envoyer des emails... Et s'il ne l'est pas, il le prépare.
'------------------------------------------------------------------------------------------------
On Error Resume Next
    'vérification si Outlook est ouvert
    Set Outlook = GetObject(, "Outlook.Application")
    
    If (Err.Number > 0) Then 'si Outlook n'est pas ouvert, une instance est ouverte
        Err.Clear
        Set Outlook = 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