Envoye de message avec pièces jointes depuis excel

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 318 fois - Téléchargée 31 fois

Contenu du snippet

Ce petit morceau de code permet l'envoi automatique de mails à un ou plusieurs destinataires avec des pièces jointes.
Il faut toutefois télecharger un freeware (CLICKYES)([URL]http://www.contextmagic.com/express-clickyes//URL) afin de pouvoir contourner le message de sécurité de outlook 2002.

Si toutefois vous trouvez mieux faites moi signe..

Bonne lecture, en espérant que cela dépanne de petits utilisateurs comme moi

Source / Exemple :


'Déclaration des functions API
Private Declare Function RegisterWindowMessage _
        Lib "user32" Alias "RegisterWindowMessageA" _
        (ByVal lpString As String) As Long

Private Declare Function FindWindow Lib "user32" _
        Alias "FindWindowA" (ByVal lpClassName As Any, _
        ByVal lpWindowName As Any) As Long

Private Declare Function SendMessage Lib "user32" _
        Alias "SendMessageA" (ByVal hwnd As Long, _
        ByVal wMsg As Long, ByVal wParam As Long, _
        lParam As Any) As Long

'Fonction qui se déclenche lors d un clic sur un bouton de commande.

Private Sub CommandButton1_Click()
'Déclaration des variables.
Dim wnd As Long
Dim uClickYes As Long
Dim Res As Long

'Enregistrez un message pour envoyer
uClickYes = RegisterWindowMessage("CLICKYES_SUSPEND_RESUME")

'Recherche et activation de la CLICKYES
wnd = FindWindow("EXCLICKYES_WND", 0&)

'Mise en service de CLICKYES
Res = SendMessage(wnd, uClickYes, 1, 0)

'Déclaration des objets de la messagerie
Set mailobj = CreateObject("Outlook.Application")
Set Mail = mailobj.CreateItem(olMailItem)
   
'On prépare l'envoi de Mail
        With Mail
            .SentOnBehalfOfName = SentOnName
            'Mettre ici le ou les destinataires ("nom.prenom@FAI.com; nom1.prenom1@FAI.com)
            .To = "nom.prenom@FAI.com" 
            'Sujet du message
            .Subject = "Mail automatique"
            'Corps de texte du message(contenu)
            .Body = "test"
            'Penser à créer un fichier test.txt dans le DD sous C:\
            .Attachments.Add ("C:\test.txt")
            .display
            .Send
            End With

' Mise au repos de CLICKYES
Res = SendMessage(wnd, uClickYes, 0, 0)

End Sub

Conclusion :


Il faut au préalable installer CLICKYES et dans une feuille Excel, créer un bouton.
N'oublier pas de créer un fichier "test" pour la pièce jointe.
    • Merci de penser à noter ma source **

A voir également

Ajouter un commentaire Commentaires
IhebCha
Messages postés
1
Date d'inscription
mardi 11 juillet 2006
Statut
Membre
Dernière intervention
7 août 2009

7 août 2009 à 17:27
On peut détourner le problème de sécurité Outlook sans recourir à "ClickYes".
Au fait Le message de sécurité n'intervient que lorsque vous tentez d'envoyer des messages par un autre programme que Outlook.
Si vous exécutez votre code sous Outlook. Vous n'aurez pas besoin de ClickYes. Car Outlook n'affiche pas un problème de sécurité quand c'est lui même qui envoit.
L'astuce est de mentir à Outlook en lui faisant croir que le message est envoyé à travers lui même.

Je reprend la dernière partie de votre code :

Set mailobj = CreateObject("Outlook.Application")
Set Mail = mailobj.CreateItem(olMailItem)


With Mail
'Mettre ici le ou les destinataires
.To = "nom1; nom2; ..."
'Sujet du message
.Subject = "Mail automatique"
'Corps de texte du message(contenu)
.Body = "test"
.Attachments.Add ("C:\test.txt")
.display
'Au lieu d'utiliser la méthode send on utlise la méthode save
.Save
'StrID est une varriable type String
StrID = .EntryID
End With
'On appel la procédure d'outlook
Call mailobj.send_myMail(strID)
Set Mail = Nothing
Set mailobj = Nothing
end sub


Avant d'éxécuter ce code depuis Excel.
Allez sur Outlook dans le module ThisOutlookSession
inserez le code suivant:

Sub send_myMail(StrID As String)
Dim myMail

Set myMail = Application.GetNamespace("MAPI").GetItemFromID(StrID)
myMail.Send

End Sub

Enregistrez le

Retournez à Excel et lancez votre procédure. Ca marchera
neo2k2
Messages postés
126
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
9 novembre 2009
3
21 sept. 2007 à 14:58
Au lieu de s'embêter avec ce fichier test.txt pourquoi ne pas avoir directement implémenté un GetOpenFileName?

J'ai également rajouté un InputBox pour l'adresse.

Code modifié :

' adresse du destinataire
Dim address As String
address = InputBox("Adresse du destinataire : ", "DESTINATAIRE", "")
' fichier joint
Const FTYPE_ALL As String = "Tout type de fichiers, *.*"
Dim join_file As String
join_file = Application.GetOpenFilename(FTYPE_ALL, 0, "Ajouter un fichier", "Joindre")
'
' on lance la fonction de mail
'
With Mail
.SentOnBehalfOfName = SentOnName
'Mettre ici le ou les destinataires ("nom.prenom@FAI.com; nom1.prenom1@FAI.com)
.To = address
'Sujet du message
.subject = "Mail automatique"
'Corps de texte du message(contenu)
.body = "Message envoyé par Excel."
'
' on vérifie simplement si un fichier est ajouté
'
If join_file <> "" Then
.Attachments.Add (join_file)
End If
.display
.Send
End With
starfy
Messages postés
3
Date d'inscription
mercredi 24 février 2010
Statut
Membre
Dernière intervention
24 février 2010

22 août 2007 à 01:53
je suis complètement débutant et je voudrais savoir comment transformer ce programme pour qu'au lieu d'envoyer le mail à l'adresse spécifiée, il l'envoie à une adresse mail se trouvant dans une cellule d'excel. Idem pour la pièce jointe.

Et comment lui faire alors envoyer un mail à chacune des adresses de mon tableau excel avec la pièce jointe propre à l'adresse (j'ai une colonne avec les adresses mail et une autre avec les pièces jointes à envoyer)
EPS32HAY
Messages postés
100
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
1 février 2009

18 nov. 2005 à 14:04
Salut GBAUDINAT

As tu penser à créer le fichier test.txt sur la racine de ton disque dur?.

Je viens de la relancer au bureau et ca fonctionne, le problème c'est que j'ai OUTLOOK 2002, je ne l'ai pas testé avec la version OUTLOOK 2003.
Bonne Prog
GBAUDINAT
Messages postés
2
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
18 novembre 2005

18 nov. 2005 à 12:42
Bonjour,
j'ai utilisé votre code pour ajouter une pièce jointe à un mailing avec Outlook 2003 et Word. Impossible de lancer la macro qui s'arrête à la ligne : .Attachments.Add ("C:\test.txt") avec un message d'erreur "Erreur de compilation, membre de méthode ou de donnée introuvable".
Microsoft Outlook Object 11.0 library est bien installé dans les références.

Où est le probléme ?

Cordialement
GB

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.