|
|
|
|
Bonjour à tous,
Envoyer par VB Excel, un mail avec une liste d'adresses pré-complétée... Problème assez récurrent. J'ai beaucoup fouillé sur le web à ce sujet, et j'ai trouvé des réponses. mais faut voir les réponses... A croire que certaines personnes s'amusent à faire le plus compliqué possible. Vous allez me dire qu'ils n'ont peut-être pas le choix!
J'ai donc décidé de passer outre les propositions hasardeuses et incompréhensibles proposées à droite et gauche, et de faire mon petit code à moi, simplissime comme tout... Mais voilà, le résultat n'est pas parfait puisqu'il faut que je clique dans l'espace "A:" de Outlook et que je fasse "Entrée" pour pouvoir envoyer le mail!
Alors j'espère que quelqu'un pourra m'aider, parce que je suis incapable de reprendre les codes proposés sur d'autres post. Je n'y comprends pas grand chose.
Voili voilou comment je me suis débrouillée:
dans Excel, j'ai une cellule avec la liste des adresses mails séparées par des point-virgules.
Exemple: cellule J11 du feuillet admin: monsieur.dupont@imaginez.com ; monsieur.dupuis@imaginez.com
Dans VB: voici mon code:
' Récupérer les mails des destinataires
Workbooks("test.xls").Activate
Sheets("admin").Activate
MailAd = Range("J11").Value
' Ouvrir une page Outlook pour envoyer le fichier
Application.Dialogs(xlDialogSendMail).Show MailAd
Configuration: Windows XP Internet Explorer 7.0
La solution ne ne parait pas compliquée. Voici un exemple de code :
|
Le message d'erreur indique qu'il ne trouve pas un ou plusieurs noms dans le carnet d'adresse Outlook.
|
Réponse : oui et non
|
Répondre à thev
|
Pour le problème de reconnaissance des adresses, après test des 2 procédures, il faut en fait apporter la modification suivante :
|
Pour la nouvelle erreur, essayer la modification suivante (suppression paramètre New):
|
Répondre à thev
|
Le code est correct mais il convient de modifier :
|
Répondre à thev
|
Je viens de rencontrer sous Outlook 2003 (j'avais testé sous Outlook 2007) le même souci de non accès à la procédure VBA Outlook. Cela venait du fait que le projet VBA Outlook n'était pas en ligne même si l'application OutlooK était chargée. Pour forcer la mise en ligne du projet VBA Outlook, ajouter dans VB Outlook / ThisOutlookSession :
---- procédure Excel VBA -----------------
Sub test1
' Récupérer les mails des destinataires
Workbooks("test.xls").Activate
Sheets("admin").Activate
MailAd = Range("J11").Value
sujet = "test01-sujet"
message = "test01-message"
'choix pièce jointe
NomFichier= Application.GetOpenFilename
' appelle une sous-procédure Outlook VBA
Set appli_Outlook = New Outlook.Application
call appli_Outlook .test2(MailAd,sujet,message,NomFichier)
end Sub
-- procédure Outlook VBA ------
Sub test2(mail_liste,sujet,Message,NomFichier)
If NomFichier Then
Set pièce_jointe = e_mail.Attachments
pièce_jointe.Add NomFichier, olByValue, 1, NomFichier
End If
|
Bonjour,
|
Pour que la procédure sous Outlook soit reconnue, il faut que :
' appelle une sous-procédure Outlook VBA
Set appli_Outlook = Outlook.Application
If appli_Outlook.Explorers.Count > 0 Then
Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier)
Else
MsgBox "erreur envoi e_mail car outlook non chargé"
End If
|
Salut thev,
|
1 - Les noms de variables ne correspondent pas
|
Re Thev,
|
Sous Excel VBA: Sub test1() Workbooks("julieC - Irsem.xls").Activate ' Récupérer les mails des destinataires Sheets("admin").Activate MailAd = Range("N50").Value 'la valeur est une adresse mail sujet = "Test envoi" Message = "coucou, recevez-vous ce message?" 'choix pièce jointe 'NomFichier = Application.GetOpenFilename ' appelle une sous-procédure Outlook VBA Set appli_Outlook = outlook.Application If appli_Outlook.Explorers.Count > 0 Then Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier) Else MsgBox "erreur envoi e_mail car outlook non chargé" End If End Sub Sous outlook: (ThisOutlookSession) Private Sub Application_Startup() End Sub Sub test2(Mail_liste, objet_message, texte_message, nom_pièce_jointe) ' la variable Mail_liste correspond au premier paramètre du call Call appli_Outlook.test2 (variable MailAd) ' la variable objet_message correspond au secon paramètre du call Call appli_Outlook.test2 (variable sujet) ' la variable texte_message correspond au troisième paramètre du call Call appli_Outlook.test2 (variable Message) ' la variable nom_pièce_jointe correspond au quatrième paramètre du call Call appli_Outlook.test2 (variable NomFichier) On Error GoTo erreur_création_e_mail ' crée l'objet : e_mail Set e_mail = Application.CreateItem(olMailItem) ' ajoute les destinataires destinataires = Split(Mail_liste, ";") For i_destinataire = 0 To UBound(destinataires) - 1 e_mail.Recipients.Add destinataires(i_destinataire) Next i_destinataire ' remplit le sujet et le message e_mail.Subject = objet_message e_mail.Body = texte_message 'Attachement pièce jointe If nom_pièce_jointe <> "" Then Set pièce_jointe = e_mail.Attachments pièce_jointe.Add NomFichier, olByValue, 1, nom_pièce_jointe End If ' envoie l'e-mail e_mail.Send ' fin traitement création_mail_exit: Exit Sub ' routine erreur erreur_création_e_mail: MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description Resume création_mail_exit End Sub |
Bonjour à tous,
|
1- si le destinataire est sous la forme mdupont ou ludivine50, ce nom doit se trouver dans le carnet d'adresses Outlook
Sous Excel VBA:
Sub test1()
Workbooks("julieC - Irsem.xls").Activate
' Récupérer les mails des destinataires
Sheets("admin").Activate
'les adresses mail sont en colonne B
Set début_liste = Range("B1")
Set fin_liste = Range("B1").End(xlDown)
MailAd = Range(début_liste, fin_liste).Valuesujet = "Test envoi"
Message = "coucou, recevez-vous ce message?"
Call test2(MailAd, sujet, Message, NomFichier)
'choix pièce jointe
NomFichier = Application.GetOpenFilename
' appelle une sous-procédure Outlook VBA
Set appli_Outlook = Outlook.Application
If appli_Outlook.Explorers.Count > 0 Then
Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier)
Else
MsgBox "erreur envoi e_mail car outlook non chargé"
End If
End Sub
Sous outlook: (ThisOutlookSession)
Private Sub Application_Startup()
End Sub
Sub test2(Mail_liste, objet_message, texte_message, nom_pièce_jointe)
' la variable Mail_liste correspond au premier paramètre du call Call appli_Outlook.test2 (variable MailAd)
' la variable objet_message correspond au secon paramètre du call Call appli_Outlook.test2 (variable sujet)
' la variable texte_message correspond au troisième paramètre du call Call appli_Outlook.test2 (variable Message)
' la variable nom_pièce_jointe correspond au quatrième paramètre du call Call appli_Outlook.test2 (variable NomFichier)
On Error GoTo erreur_création_e_mail
Set appli_Outlook = Outlook.Application
' crée l'objet : e_mail
Set e_mail = appli_Outlook.CreateItem(olMailItem)
' ajoute les destinataires
destinataires = Mail_liste
For i_destinataire = 1 To UBound(destinataires)
e_mail.Recipients.Add destinataires(i_destinataire, 1)Next i_destinataire
' remplit le sujet et le message
e_mail.Subject = objet_message
e_mail.Body = texte_message
'Attachement pièce jointe
If nom_pièce_jointe <> "" Then
Set pièce_jointe = e_mail.Attachments
pièce_jointe.Add NomFichier, olByValue, 1, nom_pièce_jointe
End If
' envoie l'e-mail
e_mail.Send
' fin traitement
création_mail_exit:
Exit Sub
' routine erreur
erreur_création_e_mail:
MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
Resume création_mail_exit
End Sub
|