
| | auteurs : SilkyRoad, Random, cavo789 |
Si vous disposez d'Excel2002, ou ultérieur:
| Vba |
Sub envoiPlageCellules_Excel2002()
ActiveSheet.Range("A1:B5").Select
ActiveWorkbook.EnvelopeVisible = True
With ActiveSheet.MailEnvelope
.Introduction = "bonjour , ci joint les données ..."
.Item.To = "destinataire@dvp.fr"
.Item.Subject = "le sujet"
.Item.Send
End With
End Sub
|
Sinon, vous pouvez utiliser:
| Vba |
Sub PlageDeCellulesDansCorpsDuMessage()
Dim iMsg As Object, iConf As Object
Dim strHTML As String
Dim i As Byte, j As Byte
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
strHTML = ""
strHTML = strHTML & "<HEAD>"
strHTML = strHTML & "<BODY>"
strHTML = strHTML & "Bonjour , <BR>vous trouverez ci joint le tableau demandé<BR><BR>"
strHTML = strHTML & "<B><SPAN STYLE='background-color:green;font-size:6mm'>Résultats : </SPAN></B><BR><BR>"
strHTML = strHTML & "<TABLE BORDER>"
For i = 1 To 5
strHTML = strHTML & "<TR halign='middle'nowrap>"
For j = 1 To 2
strHTML = strHTML & "<TD bgcolor='yellow'align='center'><FONT COLOR='blue'SIZE=3>" _
& Cells(i, j) & "</FONT></TD>"
Next j
strHTML = strHTML & "</TR>"
Next i
strHTML = strHTML & "</TABLE>"
strHTML = strHTML & "<BR><BR>Cordialement<BR>" & Environ("username")
strHTML = strHTML & "</BODY>"
strHTML = strHTML & ""
With iMsg
Set .Configuration = iConf
.To = "destinataire@dvp.fr"
.Subject = "Test Envoi Tableau par mail"
.HTMLBody = strHTML
.Send
End With
End Sub
|
La fonction suivante permet la mise forme d'une plage de cellules dans la chaîne de caractères, pour ensuite
l'insérer dans le corps du message:
| Vba |
Function corps(x As Range) As Variant
Dim ligne As Integer
Dim col As Integer
Dim moncorps As Variant
ligne = x.Rows.Count
col = x.Columns.Count
For ligne = 1 To x.Rows.Count
For col = 1 To x.Columns.Count
moncorps = moncorps & " " & x.Cells(ligne, col)
Next col
moncorps = moncorps & Chr(10)
Next ligne
corps = moncorps
End Function
|
Ce code permet depuis Excel de sélectionner une plage de cellules dans une feuille et d'envoyer
cette plage vers un nouvel E-mail d'Outlook.
ATTENTION :
Ce code doit être placé dans un module d'Excel. Ne pas omettre de cocher la
référence 'Microsoft Outlook xx.x Object Library.
| Vba |
Option Explicit
Public Function ReadFile(sFileName) As String
Dim fso As Object, fFile As Object
Dim sTemp As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set fFile = fso.OpenTextFile(sFileName, 1, False)
sTemp = fFile.ReadAll
fFile.Close
Set fFile = Nothing
ReadFile = sTemp
End Function
Sub PrepareOutlookMail(ByVal sFileName As String)
Dim appOutlook As Outlook.Application
Dim oMail As Outlook.MailItem
Set appOutlook = CreateObject("Outlook.Application")
If Not (appOutlook Is Nothing) Then
Set oMail = appOutlook.CreateItem(olMailItem)
oMail.HTMLBody = ReadFile(sFileName)
oMail.Display
Set oMail = Nothing
Set appOutlook = Nothing
End If
End Sub
Sub SendRangeByMail()
Dim rngeSend As Range
With Application
On Error Resume Next
Set rngeSend = .InputBox(Prompt:="Please select range you wish to send.", Type:=8, Default:=.Selection.Address)
If rngeSend Is Nothing Then Exit Sub
On Error GoTo 0
.ActiveWorkbook.PublishObjects.Add(4, "C:\Temp\XLRange.htm", rngeSend.Parent.Name, rngeSend.Address, 0, "", "").Publish True
Call PrepareOutlookMail("C:\Temp\XLRange.htm")
Kill "C:\Temp\XLRange.htm"
End With
End Sub
|
|
| | auteur : Kiki29 |
Via CDO, en cochant sous VBE Outils / Références "Microsoft CDO for Exchange xxxx Library".
A adapter à votre contexte, ici envoi de fichier Pdf:
| Vba |
Sub Envoi_CDO1()
Dim CdoMessage As CDO.Message
Dim Fichier As Variant
ChDir "C:\Documents and Settings\UserName\Mes documents\PdfOut"
Fichier = Application.GetOpenFilename("Fichiers PDF (*.pdf), *.pdf")
If Fichier = False Then Exit Sub
Set CdoMessage = New CDO.Message
With CdoMessage
.Subject = "Exemple"
.From = "xxxxx@wanadoo.fr"
.To = "yyyyy@orange.fr"
.CC = ""
.BCC = ""
.TextBody = "Texte dans le corps de message"
.AddAttachment Fichier
.Send
End With
Set CdoMessage = Nothing
End Sub
|
Ou sans cocher de référence:
| Vba |
Sub Envoi_CDO2()
Dim CdoMessage As Object
Dim Fichier As Variant
ChDir "C:\Documents and Settings\UserName\Mes documents\PdfOut"
Fichier = Application.GetOpenFilename("Fichiers PDF (*.pdf), *.pdf")
If Fichier = False Then Exit Sub
Set CdoMessage = CreateObject("CDO.Message")
With CdoMessage
.Subject = "Exemple"
.From = "xxxxx@wanadoo.fr"
.To = "yyyyy@orange.fr"
.CC = ""
.BCC = ""
.TextBody = "Texte dans le corps de message"
.AddAttachment Fichier
.Send
End With
Set CdoMessage = Nothing
End Sub
|
Pour envoyer la feuille active:
| Vba |
Option Explicit
Sub Tst()
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim Temp As String
Dim CdoMessage As Object
Dim Fichier As String
Set Sourcewb = ActiveWorkbook
ActiveSheet.Copy
Set Destwb = ActiveWorkbook
Temp = ThisWorkbook.Path & Application.PathSeparator & "Toto.xls"
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
Destwb.SaveAs Temp
Fichier = Destwb.Path & Application.PathSeparator & Destwb.Name
Destwb.Close
Application.DisplayAlerts = True
Set CdoMessage = CreateObject("CDO.Message")
With CdoMessage
.Subject = "Exemple"
.From = "xxxxx@wanadoo.fr"
.To = "yyyyy@hotmail.fr"
.CC = ""
.BCC = ""
.TextBody = "Texte dans le corps de message"
.AddAttachment Fichier
.Send
End With
Application.ScreenUpdating = True
Set CdoMessage = Nothing
Kill Fichier
End Sub
|
Pour le classeur complet:
| Vba |
Option Explicit
Sub Tst_Wb()
Dim SourceWb As Workbook
Dim CdoMessage As Object
Dim Fichier As String
Set SourceWb = ActiveWorkbook
Fichier = ThisWorkbook.Path & Application.PathSeparator & "Toto.xls"
SourceWb.SaveCopyAs Fichier
Set CdoMessage = CreateObject("CDO.Message")
With CdoMessage
.Subject = "Exemple"
.From = "xxxxx@wanadoo.fr"
.To = "yyyyy@orange.fr"
.CC = ""
.BCC = ""
.TextBody = "Texte dans le corps de message"
.AddAttachment Fichier
.Send
End With
Set CdoMessage = Nothing
End Sub
|
On pourra dans ce cas envisager d'envoyer le Classeur complet sans le code VBA.
|
| | auteur : SilkyRoad | | Vba |
Sub CreationMailEtLienHypertexte()
Dim OlApp As Outlook.Application
Dim OlItem As Outlook.MailItem
Set OlApp = New Outlook.Application
Set OlItem = OlApp.CreateItem(olMailItem)
With OlItem
.To = "NomPrenom@mail.fr"
.Subject = "Le titre du message"
.Body = "Découvrez Microsoft Office sur le site Developpez" & _
vbLf & "http://www.developpez.com" & vbLf & vbLf & _
"Cordialement" & vbLf & "mailto:emetteur@mail.fr"
.Display
.Save
.Send
End With
Set OlItem = Nothing
Set OlApp = Nothing
End Sub
|
Un autre exemple en utilisant la méthode CDO.
| Vba |
Sub liensDansCorpsDuMessage_CDO()
Dim iMsg As Object, iConf As Object
Dim strHTML As String
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
strHTML = ""
strHTML = strHTML & "<HEAD>"
strHTML = strHTML & "<BODY>"
strHTML = strHTML & "Bonjour , <BR>Découvrez Microsoft Office sur le site Developpez<BR><BR>"
strHTML = strHTML & "<A href='http://www.developpez.com'>Cliquez ici.</A>"
strHTML = strHTML & "<BR><BR>Cordialement<BR>" & Environ("UserName") & "<BR>"
strHTML = strHTML & "<A href=mailto:emetteur@mail.fr>Mon adresse mail</A>"
strHTML = strHTML & "</BODY>"
strHTML = strHTML & ""
With iMsg
Set .Configuration = iConf
.To = "NomPrenom@mail.fr"
.Subject = "Test Envoi liens par mail"
.HTMLBody = strHTML
.Send
End With
End Sub
|
|
| | auteur : SilkyRoad |
La liste des destinataires doit être spécifiée sous forme de tableau. Vous pouvez aussi utiliser les listes de distribution.
| Vba |
Sub EnvoiClasseur_MultiDestinataires()
ActiveWorkbook.SendMail _
Recipients:=Array("MaListeDeDistribution", _
"AutreDestinataire01@mail.com", "AutreDestinataire02@mail.com"), _
Subject:="Rapport hebdomadaire " & ActiveWorkbook.Name, _
ReturnReceipt:=True
End Sub
|
|
| | auteur : SilkyRoad |
Les différentes adresses doivent être spécifiées dans un tableau Array:
| Vba |
Dim MailTab As Variant
MailTab = Array("mimi@test.fr", "riri@test.fr", "fifi@test.fr")
Application.Dialogs(xlDialogSendMail).Show MailTab
|
|
| | auteur : SilkyRoad | | Vba |
Sub MailOutlookExpress()
Dim Adresse As String, Sujet As String, Texte As String
Adresse = "Destinataire01@mail.fr;Destinataire02@mail.fr"
Sujet = "Le sujet"
Texte = "Bonjour," & vbCrLf & vbCrLf _
& "Vous trouverez ci joint les infos demandées" & vbCrLf & vbCrLf & _
"Cordialement" & vbCrLf & Environ("UserName")
Shell "C:\Program Files\Outlook Express\msimn.exe " & "/mailurl:mailto:" & _
Adresse & "?subject=" & Sujet & "&Body=" & Texte
End Sub
|
|
| | auteur : SilkyRoad |
Cet exemple (testé avec Office 2007) extrait la liste des contacts Outlook et toutes leurs propriétés.
Nécessite d'activer la référence "Microsoft Outlook xx.x Object Library".
Dans l'éditeur de macros:
Menu Outils
Références
| Vba |
Sub ExtraireContactsOutlook()
Dim olApp As Outlook.Application
Dim dossierContacts As Outlook.MAPIFolder
Dim Contact As Outlook.ContactItem
Dim i As Integer, j As Integer
Set olApp = New Outlook.Application
Set dossierContacts = olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)
If dossierContacts.Items.Count = 0 Then Exit Sub
j = 1
For i = 0 To dossierContacts.Items(1).ItemProperties.Count - 1
Cells(j, i + 1) = dossierContacts.Items(1).ItemProperties.Item(i).Name
Next i
On Error Resume Next
For Each Contact In dossierContacts.Items
j = j + 1
For i = 0 To Contact.ItemProperties.Count - 1
Cells(j, i + 1) = Contact.ItemProperties.Item(i).Value
Next i
Next Contact
Columns.AutoFit
MsgBox "Opération terminée."
End Sub
|
Pour récupérer quelques informations spécifiques, utilisez la procédure suivante.
(Exemple: extraire les numéros de téléphone)
| Vba |
Sub numeroTelephone_contactsOutlook()
Dim olApp As Outlook.Application
Dim Cible As Outlook.ContactItem
Dim dossierContacts As Outlook.MAPIFolder
Set olApp = New Outlook.Application
Set dossierContacts = olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)
For Each Cible In dossierContacts.Items
Debug.Print Cible.HomeTelephoneNumber & vbTab & Cible.LastNameAndFirstName
Next
End Sub
|
|
| | auteur : SilkyRoad | | Vba |
Sub NouveauRDV_Calendrier()
Dim OkApp As New Outlook.Application
Dim Rdv As Outlook.AppointmentItem
Set Rdv = OkApp.CreateItem(olAppointmentItem)
With Rdv
.MeetingStatus = olMeeting
.Subject = "le site DVP"
.Body = "...description ...."
.Location = "sur le forum Office"
.Start = #10/20/2007 9:30:00 PM#
.Duration = 30
.Categories = "Amis"
.Save
End With
Set OkApp = Nothing
End Sub
|
|
| | auteur : SilkyRoad | | Vba |
Dim myOlApp As Outlook.Application
Dim myItem As Outlook.TaskItem
Set myOlApp = New Outlook.Application
Set myItem = myOlApp.CreateItem(olTaskItem)
With myItem
.Status = olTaskInProgress
.Importance = olImportanceHigh
.DueDate = DateValue("10/23/07")
.Body = "Rendez vous sur le forum"
.TotalWork = 40
.ActualWork = 20
.Subject = "le titre"
.Assign
.Recipients.Add ("leNom lePrenom")
.Save
.Send
End With
|
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2008
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|