begin process at 2010 09 09 09:51:16
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBA

 > ENVOYE DE MESSAGE AVEC PIÈCES JOINTES DEPUIS EXCEL

ENVOYE DE MESSAGE AVEC PIÈCES JOINTES DEPUIS EXCEL


 Information sur la source

Note :
7,33 / 10 - par 3 personnes
7,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VBA Niveau :Débutant Date de création :23/07/2004 Date de mise à jour :29/10/2004 22:05:47 Vu :10 548

Auteur : EPS32HAY

Ecrire un message privé
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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/expres s-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

  • '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
'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 **


 Historique

25 août 2004 14:38:58 :
Correction de la présentation, une mise à jour va suivre dans quelque temps.
29 octobre 2004 22:05:48 :
commentaires en plus

 Sources de la même categorie

Source avec Zip Source avec une capture BOULOMANCIE par Softmama
ALARMES IMBRIQUÉES. par Softmama
Source avec Zip [VBA] SCROLLER UNE LISTBOX AVEC LA MOLETTE DE LA SOURIS PAR ... par Philippe734
Source avec Zip GESTION DES INSCRITIONS DES ETUDIANTS DANS LE SYSTEME LMD A ... par heliaky
Source avec Zip OUTIL D AIDE AU DIMENSIONNEMENT DES SYSTÈMES PHOTOVOLTAÏQUES... par mjtchana

Commentaires et avis

Commentaire de FeelCode le 24/07/2004 16:04:35

J'ai pas le temp de zieuter ton code mai je regarderai a l'ocasion, si tu trouve un moyen de le faire sans dl le freewar sa m'interesse :))

Commentaire de EPS32HAY le 24/07/2004 22:19:24

Je cherche encore et encore,mais pas de résultat concluant pour le moment

Commentaire de PROTEUS91 le 24/10/2004 21:23:15

Moi je signe plutot pour. Mais je crois que j'ai un probleme ton code est pas mal mais est ce qu'il marche avec Outlook XP j'ai bien telecharger le fichier mais j'ai toujours ce fameux message automatique qui bloque mes envoies.

Peux tu me tenir au courant ?

Commentaire de EPS32HAY le 29/10/2004 21:45:20

Salut Proteus91,
Le programme clickyes permet simplement d'éviter le clic sur le bouton OK du message automatique, il n'existe malheuresement pas d'autres solution malgré d'importantes recherche sur Internet.


Bonne prog

Commentaire de garat le 02/11/2004 19:52:45

Super merci !

Mais comment sortir de l'application "ClickYes" à la fin de la routine ?

Je me casse les dents sur cette question depuis 4 jours.

A+

Commentaire de EPS32HAY le 05/11/2004 22:25:28

En fait Clickyes ce lance automatiquement au demarrage de windows, il faut donc l'inhiber. En cliquant dans le barre de tache sur l'icone du logiciel, tu peux le rendre inactif.
Moi je l'enclenche uniquement dans mon prog et je le met en stanby à la fin du code.

En expérant que cette réponse te convienne.

Bonne programmation.

Commentaire de garat le 06/11/2004 11:18:21

Merci EPS32HAY pout ta réponse,

Je n'ai pas programmé ClikYes pour le lancer au démarrage de WIN.

Je le lance par la commande:
Shell("C:\Program Files\Express ClickYes\ClickYes.exe")

Ma question est:
Comment fermer l'application ClikYes quand on a fini d'envoyer son ou ses email(s) ?

Merci

Commentaire de dhardy le 11/03/2005 22:00:53

Je suis aussi très intéressé par une autre solution du type modification de la regedit comme pour Outlook Express.

Commentaire de GBAUDINAT le 25/09/2005 16:18:17

Bonjour,

j'en suis arrivé au même probléme avec word : comment fermer ClickYes de la barre tâches ?
Peut-être avez vous maintenant trouvé la solution.

Cordialement GB

Commentaire de gilbisti le 17/11/2005 12:35:47

qui peux me filer l'astuce pour mettre une boucle a l interieur du code afin d'envoyer plusieurs mails?

Commentaire de EPS32HAY le 17/11/2005 15:41:56

Bonjour à tous,
Voici un extrait provenant de l'éditeur de ClickYes et permettant la fermeture de l'appli.

Je ne l'ai pas testé.


Express ClickYes Command Line Parameters
If you use VBScript, JavaScript or any other scripting language that does not provide Windows API calls you can  manage Express ClickYes too by means of command line switches. A lot of Visual Basic developers will find this way more convenient too.

Being launched ClickYes can be either active or suspended. When it is active it monitors the Outlook Security prompts and clicks the Yes button on behalf of a user. When it is suspended it does nothing. Double-clicking its icon in the taskbar notification area (also known as system tray) makes it active if it was suspended and vise versa.

Express ClickYes supports the following command line switches:
-stop closes Express ClickYes if it was previously launched.
  
-suspend suspends Express ClickYes if it was active or do nothing otherwise.
  
-activate activates Express ClickYes if it was suspended or do nothing otherwise.


Bonne Prog à Tous

Commentaire de GBAUDINAT le 18/11/2005 12:42:46

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

Commentaire de EPS32HAY le 18/11/2005 14:04:59

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

Commentaire de starfy le 22/08/2007 01:53:49

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)

Commentaire de neo2k2 le 21/09/2007 14:58:30

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

Commentaire de IhebCha le 07/08/2009 17:27:59

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

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales