Microsoft 365 VBA blocage sur .Send envoi mail outlook

Benoit84

XLDnaute Nouveau
Bonjour

J'ai un code vba pour l'envoi de mail en automatique avec pièce jointe.
J'ai remarqué que lorsque le mail du destinataire n'est pas reconnu dans mon carnet d'adresse outlook, la macro s’arrête sur .Send.
En revanche sur je le met en .Display ça fonctionne.
Si je met l'adresse dans mon carnet d'adresse outlook ça fonctionne avec .send, par contre comme c'est un fichier utilisé par d'autres personnes, je voudrais savoir si il existe une solution pour contourner ce blocage.

Merci d'avance si vous avez un conseil ou solution

voici mon code :

sub Macro_envoi_mail

'...

'envoi du fichier en pièce jointe
Dim destinataireOutlook As Outlook.Application
Dim Maildestinataire As Outlook.MailItem

PreparerOutlook destinataireOutlook
Set Maildestinataire = destinataireOutlook.CreateItem(0)

'création de l'email
With Maildestinataire
.SentOnBehalfOfName = ThisWorkbook.Worksheets("Mail").Range("c14")
.To = ThisWorkbook.Worksheets("Mail").Range("c16")
.CC = ThisWorkbook.Worksheets("Mail").Range("c17")
.Subject = ThisWorkbook.Worksheets("Mail").Range("c18")
.Body = ThisWorkbook.Worksheets("Mail").Range("c19")
'fichier en cours d'utilisation envoyé en attaché:
.Attachments.Add ActiveWorkbook.FullName

.Send

End With

'nettoyage...
If (Not (Maildestinataire Is Nothing)) Then Set Maildestinataire = Nothing
If (Not (destinataireOutlook Is Nothing)) Then Set destinataireOutlook = Nothing

'...
end sub

Private Sub PreparerOutlook(ByRef oOutlook As Object)

'------------------------------------------------------------------------------------------------
'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 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
 

_Thierry

XLDnaute Barbatruc
Bonjour @Benoit84 , le Forum

Oui j'ai eu ce problème avec Outlook, le Send direct est souvent mal vu par les règles de sécurity aussi.
Finalement je me suis orienté sur la méthode "CDO" au lieu du client Outllook. Là ça passe et c'est plus light.
Il te faudra par contre l'aval de ton NetWork Admin d'Exchange pour qu'il te donne l'adresse du Server SMTP et du Port.

Bonne recherche sur CDO=> CreateObject("CDO.Message") , il y a eu encore des Fils de Discussions sur ce sujet il n'y a pas très longtemps.

Bonne Journée
@+Thierry
 

Benoit84

XLDnaute Nouveau
Bonjour
Merci pour ta réponse, j'aurais espéré avoir une autre solution que de passer par CDO.
bonne journée à toi aussi

Benoit
 

patricktoulon

XLDnaute Barbatruc
bonjour
n'y aurait il pas un soucis a essayer d'envoyer le classeur actif
alors que non seulement il est ouvert par l'app excel mais 'il n'est même pas enregistré
et combien même il partirais il partirais comme il était avant l'ouverture dans excel :rolleyes: ;)

essai la fonction SaveCopyAs et envoie la copie
je garanti rien j'utilise CDO moi aussi
 

Benoit84

XLDnaute Nouveau
Bonjour Patrick,

Oui effectivement je pourrais tester avec le fichier enregistré, il faut que je trouve comment faire.

En fait j'enregistre déjà le fichier avec la date et heure

ActiveWorkbook.SaveAs "https://..../"Mon fichier au_" & Format(Date, "dd-mm-yyyy") & "_" & Format(Time, "hh""h""mm") & ".xlsm"

le problème c'est que je ne sais pas comment faire pour le sélectionner en pièce jointe, vu qu'il change de nom à chaque enregistrement.

Benoit
 

_Thierry

XLDnaute Barbatruc
Bonsoir @benoit44, @patricktoulon , le Forum

Oui éventuellement le fichier étant ouvert, mais si ca fonctionne quand Benoit a le destinataire dans ses contacts :

Si je met l'adresse dans mon carnet d'adresse outlook ça fonctionne avec .send
Par conséquent je pense qu'il y a une autre piste à creuser... Et selon mon expérience c'est au niveau sécurité...

As tu l'accès dans ton Outlook à :
>>File tab>>Options>>Trust Center>>Trust Center settings>>Programmatic Access

C'est probablement de là qu'il faut paramétrer, mais si ton IT Security Team est digne de ce nom, les GPO bloquent certaiment ces paramétrages...

Il faut que tu en parles avec ton IT...

Bon courage
@+Thierry
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas