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
- Messages
- 4'093
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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
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.
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
Chez moi sur numéricable, j'ai 200 destinataires par heure maxi.
Et voici, la page Microsoft sur des limites :
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é.