VBA envoyer un mail à plusieurs destinataires (45)

bonjour, j'ai une macro qui envoi un mail avec une pièce jointe a plusieurs destinataires,

sauf que moi j'ai 45 destinataire et vba refuse de prendre plus de 25 adresse mail.

j'ai initialiser la liste dans une variable nommé Email mais dès que je dépasse les 25, il dit trop de caractère de continuité de ligne.

SVP quelqu'un peut il m'aider sur ça! Merci d'avance

'Il faut activer la référence "Microsoft Outlook Library" Avant de lancer cette macro,
' Dans l'éditeur VBA: Faire Menu / Tools / Reference / Cocher "Microsoft Outlook Library"
Sub Envoyer_Mail_Outlook()
Dim ObjOutlook As New Outlook.Application
Dim oBjMail
Dim Nom_Fichier As String
Dim email As String

    Set ObjOutlook = New Outlook.Application
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)

    email = "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com;" & _
            "****.*****@gmail.com"

'---------------------------------------------------------
   'Exemple pour envoyer un classeur en pièce jointe
   'Nom_Fichier = Application.GetOpenFilename("Fichier excel (*.xls;*.xlsx;*.xlsm), *.xls;*.xlsx;*.xlsm")
   'If Nom_Fichier = "Faux" Then Exit Sub
'---------------------------------------------------------
   'Ou bien entrer le path et nom du fichier autrement
   Nom_Fichier = FindLastFile("Y:\Pré-op\SOPP et RELAIS\RELAIS\Situation Relais V2\sortie\carte")
   MsgBox Nom_Fichier 'vérifier si le fichier est bien trouvé
    If Nom_Fichier = "" Then Exit Sub
'---------------------------------------------------------
     With oBjMail
       .Display
       .To = "email"
       .Subject = "meteo des relais du " & Date          ' l'objet du mail
       .HTMLBody = "<html><body>Bonjour,</body></html><br>" & _
"<html><body>Veuillez trouver ci-joint la situation relais du jour</body></html>" & .HTMLBody  'le corps du mail ..son contenu
       .Attachments.Add Nom_Fichier '"C:\Data\essai.txt" ' ou Nomfichier
       .GetInspector.CommandBars.Item("Insert").Controls("Signature").Controls(1).Execute
       .Display  '   Ici on peut supprimer pour l'envoyer sans vérification
       '.Send
    End With
    MsgBox "Mail envoyé"
    'ObjOutlook.Quit
    Set oBjMail = Nothing
    Set ObjOutlook = Nothing
End Sub

Bonsoir,

Essayer ce code

'Il faut activer la référence "Microsoft Outlook Library" Avant de lancer cette macro,

' Dans l'éditeur VBA: Faire Menu / Tools / Reference / Cocher "Microsoft Outlook Library"

Sub Envoyer_Mail_Outlook()
    Dim ObjOutlook As New Outlook.Application
    Dim oBjMail
    Dim Nom_Fichier As String
    Dim email As String
    Dim i As Integer

    Set ObjOutlook = New Outlook.Application
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)

    destinataires = Array("****.*****@gmail.com", _
                            "****.*****@gmail.com", _
                            "****.*****@gmail.com")

'---------------------------------------------------------
'Exemple pour envoyer un classeur en pièce jointe
'Nom_Fichier = Application.GetOpenFilename("Fichier excel (*.xls;*.xlsx;*.xlsm), *.xls;*.xlsx;*.xlsm")
'If Nom_Fichier = "Faux" Then Exit Sub
'---------------------------------------------------------
'Ou bien entrer le path et nom du fichier autrement
    Nom_Fichier = FindLastFile("Y:\Pré-op\SOPP et RELAIS\RELAIS\Situation Relais V2\sortie\carte")
    MsgBox Nom_Fichier 'vérifier si le fichier est bien trouvé
    If Nom_Fichier = "" Then Exit Sub
'---------------------------------------------------------
    With oBjMail
        ' remplissage destinataires directs
        For i = 0 To UBound(destinataires)
            Set dest_A = .Recipients.Add(destinataires(i))
            dest_A.Type = olTo
        Next i
        '.To =
        .Subject = "meteo des relais du " & Date    ' l'objet du mail
        .HTMLBody = "<html><body>Bonjour,</body></html><br>" & _
"<html><body>Veuillez trouver ci-joint la situation relais du jour</body></html>" & .HTMLBody  'le corps du mail ..son contenu
        .Attachments.Add Nom_Fichier '"C:\Data\essai.txt" ' ou Nomfichier
        .GetInspector.CommandBars.Item("Insert").Controls("Signature").Controls(1).Execute
        .Display   '   Ici on peut supprimer pour l'envoyer sans vérification
        .Send
    End With
    MsgBox "Mail envoyé"
    'ObjOutlook.Quit
    Set oBjMail = Nothing
    Set ObjOutlook = Nothing
End Sub

Hello, Hello

Alors je n'ai pas Outlook pour tester une correction, mais j'ai quelques pistes/infos pour t'aider :

1/ Après recherche sur internet, il semble qu'il y'ait des limitations dans la taille des lignes de code en longueur et hauteur

http://codes-sources.commentcamarche.net/forum/affich-712681-trop-de-caracteres-de-continuite-de-ligne-richtextbox

https://msdn.microsoft.com/en-us/library/aa240819(VS.60).aspx

https://msdn.microsoft.com/fr-fr/library/wdzat713.aspx

En longueur, tu peux faire une ligne de code d'au maximum de 65535 caractères, chez toi c'est ok pour ce point.

Chaque ligne ****.*****@gmail.com; & _ faisant ici 25 caractères, si tu as 45 adresses ça en fait que 1125 (25*45 =1125)

Par contre en hauteur de code, tu as une limite en nombre d'utilisation du caractère _ de 24 et dans ton exemple, tu en est déjà à 25 et dans ton besoin 45.

Tu as 2 solutions :

1. soit refaire comme dans le lien codes-sources, mettre les 24 1er adresses en dur dans vba, dans une variable temporaire, puis mettre le reste des adresses à la suite de la variable, ainsi vba ne percutera pas sur la limite de hauteur.

Dim Temp As String

Temp = "****.*****@gmail.com;****.*****@gmail.com;****.*****@gmail.com;****.*****@gmail.com;****.*****@gmail.com;..."

Temp = Temp & "****.*****@gmail.com;****.*****@gmail.com;****.*****@gmail.com;****.*****@gmail.com;****.*****@gmail.com;..."

2. Mettre les adresses dans une cellule excel, normalement pas de soucis sur le principe, moi dans ma dernière utilisation, j'en avais 6 dans une cellule et ça marchait et indiquer dans vba, de prendre les adresses dans cette cellule.

Ainsi moi par exemple, si je met mes adresse en A1, ça donne ce code :

dim DESTINATAIRES as string

DESTINATAIRES_MAIL = ThisWorkbook.ActiveSheet.Range("A1").Value 'destinaires en copie mail

2/ Pour info, ça peut être utile pour éviter d'être striké par le FAI , en plus de la limite du code, il y'a aussi des limites dans l'envoi des mails, déjà pour le serveur d'envoi de mail (moi c'est numéricable), après il y'en a chez Outlook, mais plus concernant le poids des infos, de ce que j'en ai trouvé.

Chez moi sur numéricable, j'ai 200 destinataires par heure maxi.

Et voici, la page Microsoft sur des limites :

https://support.microsoft.com/fr-fr/help/238569/you-receive-a-this-distribution-list-has-reached-the-maximum-size-for-your-network-e-mail-server-error-message-when-you-try-to-add-many-items-to-a-contact-distribution-list-in-outlook

Voilà,

Bonjour waard,

je te remercie pour ta réponse claire précise.

effectivement j'ai utilisé ta première solution et ça marche nickel

encore un grand merci ça m'a beaucoup aidé.

Rechercher des sujets similaires à "vba envoyer mail destinataires"