Envoi d'un mail avec VBA sous Excel

Envoi d'un mail avec VBA sous Excel - VB/VBA/VBS - Programmation

Marsh Posté le 03-09-2003 à 21:53:16    

Dans un tableau Excel j'ai  

      A       |       B       |     C
 adresse mail      sujet msg      texte msg


 
J'essaye de monter une macro qui m'envoie un mail (Outlook Express) pour chaque ligne de mon tableau.
 
J'ai trouvé un truc, mais ça crée le mail, ça ne l'envoie pas (il faut encore que je clique sur le bouton envoyer ensuite) :

Code :
  1. Sub envoi_mail()
  2. adresse = Range("a1" )
  3. sujet = Range("b1" )
  4. Message = Range("c1" )
  5. URLto = "mailto:" & adresse & "?subject=" & sujet & "&body=" & Message
  6. ActiveWorkbook.FollowHyperlink Address:=URLto
  7. End Sub


 
Qui aurait une idée, sachant qu'en fait j'aurai une liste d'emails d'environ 30 ou 40 personnes (je ferai une boucle qui ne figure pas dans le code ci dessus) et que je ne veux pas cliquer à chaque fois sur ENVOYER !!!


Message édité par F22Raptor le 03-09-2003 à 21:54:28

---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Marsh Posté le 03-09-2003 à 21:53:16   

Reply

Marsh Posté le 04-09-2003 à 14:30:37    

:bounce:


---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Marsh Posté le 04-09-2003 à 14:36:31    

si t'as oulook express regarde du côté de MAPI


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 04-09-2003 à 14:50:36    

Poipoi a écrit :

si t'as oulook express regarde du côté de MAPI

:??: skoi ça Mapi ?
Une fonction VBA ?


---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Marsh Posté le 04-09-2003 à 19:21:51    

j'ai testé ceci :

Code :
  1. Sub cmdSend_Click()
  2.     On Error GoTo SendErrorMailError
  3.     ' Sign on to the mail system.
  4.     mpsErrorMail.UserName = txtUser.Text
  5.     mpsErrorMail.Password = txtPassword.Text
  6.     mpsErrorMail.SignOn
  7.     ' Send the message.
  8.     mpmErrorMail.SessionID = mpsErrorMail.SessionID
  9.     mpmErrorMail.Compose
  10.     mpmErrorMail.RecipDisplayName = txtToName.Text
  11.     mpmErrorMail.RecipAddress = txtToAddress.Text
  12.     mpmErrorMail.AddressResolveUI = False
  13.     mpmErrorMail.MsgSubject = txtSubject.Text
  14.     mpmErrorMail.MsgNoteText = txtBody.Text
  15.     mpmErrorMail.Send False
  16.     ' Sign off of the mail system.
  17.     mpsErrorMail.SignOff
  18.     Exit Sub
  19. SendErrorMailError:
  20.     ' There was an error sending the mail.
  21.     ' Just present the message.
  22.     MsgBox "Error " & Format$(Err.Number) & _
  23.         " sending mail." & vbCrLf & _
  24.         Err.Description
  25.     Exit Sub
  26. End Sub


 
mais ça ne marche pas : peux tu m'en dire plus sur Mapi ?
Cela ne nécessite t-il pas l'installation d'une macro complémentaire ou qq chose comme ça ? :??:  
 
 :jap:


---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Marsh Posté le 04-09-2003 à 21:55:11    

tu dois rajouter la ref au bon OCX/DLL
 
ya pleins de trucs sur msdn et google... désolé mais je l'ai jamais fait sur Excel


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 05-09-2003 à 18:04:27    

apparemment je viens de comprendre !
 
Le composant MAPI doit être coché dans VBA, Gestionnaire de Compléments.
 
Problème : Je dois cocher Microsoft MAPI Controls 6.0 dans la liste des composants, mais rien n'apparaît dedans.
 
A l'install d'office, il ne me semble pas qu'il me propose d'ajouter des composants.
 
Comment fait on pour installer un composant MAPI ?
Ca se trouve où ces bêtes la ?


---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Marsh Posté le 19-03-2004 à 07:20:16    

Salut,
 
Normalement, les composants MAPI s'installe en meme temps que le gestionnaire de mail (qui te demandera au passage de passer par défaut)
Pour le cas d'Excel, tu as la commande suivante :
"activeworkbook.sendmail "dest1@site.com, dest2@site.org", "sujet du mail", false"
 
Seul le premier argument est obligatoire.
Le deuxième, s'il n'existe pas, prend le nom du fichier
Le troisième est un booléen pour l'accusé de réception
 
Un truc, les deux premiers arguments doivent etre du type Variant (si tu passes par des variables)
 
A savoir qu'avec Outlook Express, il faut désactiver son alerte avant envoi (paramètres sécurité ou base de registre (WarnOnSend))
 
Ca devrait résoudre ton souci...

Reply

Marsh Posté le 19-03-2004 à 09:46:31    

Pour info, MAPI n'a aucun rapport avec OE, mais avec Exchange : c'est une couche qui permet de se connecter et ouvrir des sessions sur un Serveur Exchange en utilisant le profile de Outlook Express ou n'importe quelle autre version d'Outlook.
Je poste un exemple dès que la macro de merde sur laquelle je bosse a terminé. (peut pas ouvrir de fichier excel pendant ce temps...)

Reply

Marsh Posté le 19-03-2004 à 09:46:31   

Reply

Marsh Posté le 19-03-2004 à 09:48:41    

PS: ET MAPI NE PEUT EN AUCUN CAS MARCHER SI ON UTILISE POP3, IMAP ou autre serveur de mail non Exchange ! C'est un protocole particulier. Vos trucs que vous avez posté sont nommés à tord MAPI, ça n'a rien à voir avec cet objet !


Message édité par MagicBuzz le 19-03-2004 à 09:49:08
Reply

Marsh Posté le 19-03-2004 à 09:56:06    

Voilà :
 
MAPI c'est "légèrement" plus compliqué...
 
Ca donne ça :
 
Module "Module1" :
 

Code :
  1. Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
  2. Private Function GetWorkingFolder() As String
  3.     GetWorkingFolder = WorkingFolder
  4. End Function
  5. Public Sub sendMail(Recipient As String, message As String, tabFiles() As String)
  6.     Dim objSession As Object
  7.     Dim objMessage As Object
  8.     Dim objRecipient As Object
  9.     Dim objAttachments As Object
  10.     Dim lpBuff As String * 1024
  11.     Dim Login As String
  12.     Dim fso As Object
  13.    
  14.     Set fso = CreateObject("Scripting.FileSystemObject" )
  15.     If Recipient = "" Then
  16.         MsgBox ("No recipient. Can't send email !" )
  17.         Exit Sub
  18.     End If
  19.     GetUserName lpBuff, Len(lpBuff)
  20.     Login = Left$(lpBuff, (InStr(1, lpBuff, vbNullChar)) - 1)
  21.     lpBuff = ""
  22.     Set objSession = CreateObject("mapi.session" )
  23.    
  24.     On Error Resume Next
  25.     objSession.Logon "", "", False, False
  26.     If Err.Number <> 0 Or objSession.CurrentUser = "Unknown" Then
  27.         Err.Clear
  28.         Set objSession = Nothing
  29.         Set objSession = CreateObject("mapi.session" )
  30.         objSession.Logon profileName:=Login
  31.         If Err.Number <> 0 Or objSession.CurrentUser = "Unknown" Then
  32.             MsgBox ("Unable to send mail. Open Outlook and try again." )
  33.             Exit Sub
  34.         End If
  35.     End If
  36.     On Error GoTo 0
  37.    
  38.     Set objMessage = objSession.Outbox.Messages.Add
  39.     objMessage.Subject = "Automatically sent"
  40.     objMessage.Text = message
  41.    
  42.     ' Add files as attachement
  43.     Set objAttachments = objMessage.Attachments
  44.     For i = LBound(tabFiles) To UBound(tabFiles)
  45.         If Not (IsNull(tabFiles(i)) Or tabFiles(i) = "" ) Then
  46.             ' Test file exist
  47.             If fso.fileexists(tabFiles(i)) Then
  48.                 ' Add attachement
  49.                 objAttachments.Add Right(tabFiles(i), Len(tabFiles(i)) - InStrRev(tabFiles(i), "\" )), 0, , tabFiles(i)
  50.             End If
  51.         End If
  52.     Next
  53.    
  54.     Set objRecipient = objMessage.Recipients.Add
  55.     objRecipient.Name = Recipient
  56.     objRecipient.Resolve
  57.    
  58.     objMessage.Fields.Add &H59020003, 1
  59.     objMessage.Update
  60.    
  61.     objMessage.Send showdialog:=False
  62.     objSession.Logoff
  63. End Sub


 
Sheet1 (qui contient un bouton "Button1" )
 
 

Code :
  1. Const Recipient = "MagicBuzz" ' Adresse email ou non du contact Exchange
  2. Private Sub CommandButton1_Click()
  3.     Dim tabFiles(1) As String
  4.     ActiveWorkbook.Save
  5.     tabFiles(0) = ActiveWorkbook.FullName
  6.     Module1.sendMail Recipient, "Here is the updated document." & vbCrLf & vbCrLf & "Regards" & vbCrLf & "Sent: " & Now(), tabFiles
  7. End Sub


 
Cet exemple s'envoie tout seul (fichier Excel) à la personne indiquée dans le destinataire "Const Recipient".
 
A toi de le modifier pour faire ce que tu veux faire exactement.
 
PS: Et je rappelle, si t'as pas de serveur Exchange, CA NE MARCHERA PAS !
 
PS²: Mon exemple est complet. Si Outlook est ouvert avec une connection au serveur, alors il va envoyer le mail tout seul. Si ce n'est pas le cas, Windows va t'afficher une fenêtre de login te demandant de t'authentifier auprès d'Exchange (logiquement, t'as juste à mettre ton log/pass NT), puis il va envoyer le/les mails automatiquement.

Reply

Marsh Posté le 19-03-2004 à 11:10:36    

merci ! :)


---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed