Envoie d'un mail tous les mois

xyvyos

XLDnaute Junior
Bonjour,

J'aimerai créer une macro qui permet d'envoyer un mail (à 3 personnes si possible) contenant simplement le fichier excel en pièce jointe ou en lien hypertexte. Ce mail devra être envoyé tous les debuts de mois (vers le 1 ou le 2 par exemple). Mais je n'y arrive pas ...

Ce fichier concerne la maintenance préventive de chariots. Elle doit se réaliser tous les 6 mois. Ce mail permettra de "rafraichir" la mémoire des techniciens en voyant quelles maintenances n'ont pas été réalisées le mois précédent.

Je vous remercie d'avance pour votre aide.
 

Pièces jointes

  • Planning maintenancebis2.xlsm
    83.8 KB · Affichages: 32
  • Planning maintenancebis2.xlsm
    83.8 KB · Affichages: 30

Lone-wolf

XLDnaute Barbatruc
Re : Envoie d'un mail tous les mois

Bonjour xyvyos, fredl, le Forum

Dans le projet vba, allez sur l'onglet outils, puis référence. Rechercher et cochez
Microsoft Outlook 14.0 Object Library

Faites un essai avec un nouveau classeur, c'est bien ce que j'ai compris?

Code:
Private Sub Workbook_Open()
Dim olApp As Outlook.Application
Dim olMail As MailItem
Dim StrBody As String
Dim PJ As String


If Day(Date) = 1 Then
Set olApp = CreateObject("Outlook.Application")
Set olMail = olApp.CreateItem(olMailItem)
PJ = "C:\Users\Tom Tom\Desktop\Classeur1.xls"

StrBody = "<HTML><body>Bonjour Messieurs,<p><p>" _
        & "Veuillez prendre note du fichier en pièce jointe mis à jour.<p><p>" _
        & "<A HREF=""http://www.excel-downloads.com/"">Excel VBA</A><p><p>" _
        & "Cordialement.<p><p><p>" _
        & "Tom Tom</body><HTML>"

 With olMail
      .To = "m.dupond@admin.com"
      .CC = "d.marc@admin.com"
      .Subject = "Instructions mises à jours"
      .HTMLBody = StrBody
      .Attachments.Add (PJ)
      .Send
   End With

    Set olMail = Nothing
    Set olApp = Nothing
ElseIf Day(Date) > 1 Then
MsgBox "Vous avez déjà éffectué un envois", , "Tom Tom"
End If
End Sub



A+ :cool:
 

fredl

XLDnaute Impliqué
Re : Envoie d'un mail tous les mois

Bonjour à tous,
en complément de la solution de lone wolf ...si besoin bien sûr (si tu ouvres ton fichier non pas le 1, mais le 2 ou le 3 ou...le x du mois dans lequel le mail n'a pas été envoyé, le mail s'envoie(ici avec prévisualisation de ce dernier).
De plus normalement, tu n'auras pas besoin d'activer la librairie : pratique car si tes utilisateurs utilisent d'autres versions d'outlook, ce sera bloquant.
cdt
Frédéric
 

Pièces jointes

  • Planning maintenance.xlsm
    89.9 KB · Affichages: 45
  • Planning maintenance.xlsm
    89.9 KB · Affichages: 39

Lone-wolf

XLDnaute Barbatruc
Re : Envoie d'un mail tous les mois

Bonjout fredl,

mais tu utilise outlook et non Lotus note.

J'ai trouvez ceci d'Eric Renaud pour l'envois avec Lotus, à adpter à votre cas.


Code:
Dim objNotesSession As Object
 Dim objNotesMailFile As Object
 Dim objNotesDocument As Object
 Dim objNotesField As Object

 Function SendMail()
 'mpep, auteur inconnu
  On Error GoTo SendMailError
  ' Plage d'adresses e-mail dans une feuille de calcul
  For Each Cell In Range("Adresses")
    ' Cas avec la plage
    EMailSendTo = Cell.Value  ' Required - Send to address
    ' Cas avec une seule adresse
    'EMailSendTo = "erenaud@normandnet.fr" ' Required - Send to address

    EMailCCTo = ""           '' Optional
    EMailBCCTo = ""           '' Optional
    Emailsubject = "Envoi d'un document joint"   ' Optional

    ''Establish Connection to Notes
    Set objNotesSession = CreateObject("Notes.NotesSession")

    ''Establish Connection to Mail File
    ''               .GETDATABASE("SERVER", "FILE")
    Set objNotesMailFile = objNotesSession.GETDATABASE("", "")

    ''Open Mail
    objNotesMailFile.OPENMAIL

    ''Create New Memo
    Set objNotesDocument = objNotesMailFile.CREATEDOCUMENT

    ''Create 'subject Field'
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("subject", Emailsubject)

    ''Create 'Send To' Field
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("SendTo", EMailSendTo)

    ''Create 'Copy To' Field
    Set objNotesField = _
    objNotesDocument.APPENDITEMVALUE("CopyTo", EMailCCTo)

    ''Create 'Blind Copy To' Field
    Set objNotesField = _
    objNotesDocument.APPENDITEMVALUE("BlindCopyTo", EMailBCCTo)

    ''Create 'Body' of memo
    Set objNotesField = objNotesDocument.CREATERICHTEXTITEM("Body")

    With objNotesField
      .APPENDTEXT "Cet e-mail a été généré par un processus automatique."
      .ADDNEWLINE 1
      .APPENDTEXT "This e-mail is generated by an automated process."
      '.APPENDTEXT "Please follow established contact " & _
            "procedures should you have any questions."
      .ADDNEWLINE 2
      .APPENDTEXT "Cordialement"
      .ADDNEWLINE 1
      .APPENDTEXT "Eric RENAUD"
    End With

    ''Attach the file  --1454 indicate a file attachment
     objNotesField = _
     objNotesField.EMBEDOBJECT(1454, "", ActiveWorkbook.FullName)

    ''Send the e-mail
    objNotesDocument.SEND (0)
  Next Cell
  ''Release storage
  Set objNotesSession = Nothing
  Set bjNotesSession = Nothing
  Set objNotesMailFile = Nothing
  Set objNotesDocument = Nothing
  Set objNotesField = Nothing

  ''Set return code
  SendMail = True
  Exit Function

 SendMailError:
  Msg = "Error # " & Str(Err.Number) & " was generated by " _
    & Err.Source & Chr(13) & Err.Description
  MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
  SendMail = False
 End Function


A+ :cool:
 

Lone-wolf

XLDnaute Barbatruc
Re : Envoie d'un mail tous les mois

Re xyvyos,

je pense que ça peux ce faire, mais par précaution mettez-la dans un module standard, vus que c'est une fonction.

Cliquez dans une cellule vide et dans la barre de formule sur "fx", fonction personnalisée, sélectionnez la fonction. Vous faites "=SendMail()" et voyez ce que celle-ci vous demande.

Ensuite pour activer la fonction, je ne sais pas comment faire; ou peut-être il y a un autre moyen.



A+ :cool:
 

david84

XLDnaute Barbatruc
Re : Envoie d'un mail tous les mois

Bonjour,
@Lone-wolf : juste pour information concernant la partie rédigée en HTML de ton 1er message : il me semble préférable de l'écrire comme cela
Code:
StrBody = "<HTML><body><p>Bonjour Messieurs,</p>" _        
        & "<p>Veuillez prendre note du fichier en pièce jointe mis à jour.</p>" _
        & "<p><A HREF=""http://www.excel-downloads.com/"">Excel VBA</A></p>" _
        & "<p>Cordialement.</p>" _
        & "<p>Tom Tom</p></body></HTML>"
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 571
Messages
2 089 809
Membres
104 278
dernier inscrit
LENZY