Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Comment insérer une plage de cellules dans le corps du message ?
auteurs : SilkyRoad, Random, cavo789
Si vous disposez d'Excel2002, ou ultérieur:

Vba

Sub envoiPlageCellules_Excel2002()
ActiveSheet.Range("A1:B5").Select ' la plage de cellules à envoyer
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()
'testé avec XP
'adapté de : http://support.microsoft.com/default.aspx?kbid=286430
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 'nombre de lignes (exemple plage A1:B5)
    strHTML = strHTML & "<TR halign='middle'nowrap>"
    For j = 1 To 2 'nombre de colonnes
        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" 'renvoie une erreur si l'adresse est non valide
    '.From = "youralias@yourdomain.com"
    .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
 
'-----------------------------------------------------------------------
'
' Lit le contenu d'un fichier texte et retourne son
' contenu
'
'-----------------------------------------------------------------------
 
 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
 
'-----------------------------------------------------------------------'
' Cette routine va créer une instance de Outlook (si
' pas encore démarré) et va ensuite ouvrir une
' fenêtre de type mail.   Le corps du message sera
' initialisé avec le contenu d'un fichier de type
' HTML.   Ce fichier aura été préalablement
' créé par la routine SendRangeByMail
'
' Nécessite l'ajout d'une référence vers "Microsoft
' Outlook Object Library"
'
'-----------------------------------------------------------------------
 
 Sub PrepareOutlookMail(ByVal sFileName As String)
 
Dim appOutlook As Outlook.Application
Dim oMail As Outlook.MailItem
 
   Set appOutlook = CreateObject("Outlook.Application")
   
   ' Si Outlook n'était pas ouvert, l'instruction
    ' ci-dessus aura eu pour conséquence de
    ' démarrer Outlook.
    'Ce type de démarrage par automation fait
    'apparaître une fenêtre de sécurité qui demande
    'à l'utilisateur de permettre au programme de
    'continuer.
    '
    'Le message est "A program is trying to send an
    'email.   Do you want to allow..."
    '
    'Dans le cas  l'utilisateur aurait cliqué sur No,
    'l'objet appOutlook est égal à Nothing.  Il est
    'donc impossible de continuer.
   
   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
 
'-----------------------------------------------------------------------
'
' La routine SendRangeByMail va proposer à
' l'utilisateur de sélectionner une plage de cellules
' en Excel et va ensuite envoyer cette plage par
' mail, dans le corps du mail.
'
'-----------------------------------------------------------------------
 
 Sub SendRangeByMail()
 
Dim rngeSend As Range
   
   With Application
   
      On Error Resume Next
      
      ' Demande à l'utilisateur de sélectionner la
      ' plage de cellule
      
      Set rngeSend = .InputBox(Prompt:="Please select range you wish to send.", Type:=8, Default:=.Selection.Address)
 
      ' rngeSend Is Nothing lorsque l'utilisateur ne fait
      ' aucun choix
 
       If rngeSend Is Nothing Then Exit Sub
   
      On Error GoTo 0
  
      ' Exporte la plage vers un fichier de type HTML;
      ' ceci afin de respecter la mise en page de la
      ' plage
   
      .ActiveWorkbook.PublishObjects.Add(4, "C:\Temp\XLRange.htm", rngeSend.Parent.Name, rngeSend.Address, 0, "", "").Publish True
         
      ' Appelle la routine qui va se charger de créer
      ' un mail
 
      Call PrepareOutlookMail("C:\Temp\XLRange.htm")
      
      ' Le fichier HTML n'est plus nécessaire
      
      Kill "C:\Temp\XLRange.htm"
      
   End With ' With Application
 
End Sub

Comment envoyer un fichier par mail sans Outlook ?
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
    'Kill Fichier
End Sub


On pourra dans ce cas envisager d'envoyer le Classeur complet sans le code VBA.



Comment envoyer un mail contenant des liens hypertextes dans le corps du message ?
auteur : SilkyRoad
Vba

Sub CreationMailEtLienHypertexte()
    Dim OlApp As Outlook.Application
    Dim OlItem As Outlook.MailItem
    'Nécessite d'activer la référence "Microsoft Outlook xx.x Object Library"
    
    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()
'adapté de : http://support.microsoft.com/default.aspx?kbid=286430
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" 'Renvoie une erreur si l'adresse est non valide
    '.From = "youralias@yourdomain.com"
    .Subject = "Test Envoi liens par mail"
    .HTMLBody = strHTML
    .Send
End With
End Sub

Comment indiquer des multi destinataires lors de l'envoi d'un classeur par la méthode SendMail ?
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()

'La méthode SendMail envoie le classeur en utilisant le système de messagerie installé.
'La liste des destinataire doit être spécifiée sous forme de tableau.
'Dans cet exemple "MaListeDeDistribution" est une liste de distribution existante dans
'la messagerie.
ActiveWorkbook.SendMail _
    Recipients:=Array("MaListeDeDistribution", _
        "AutreDestinataire01@mail.com", "AutreDestinataire02@mail.com"), _
    Subject:="Rapport hebdomadaire " & ActiveWorkbook.Name, _
    ReturnReceipt:=True

End Sub

Comment définir plusieurs destinataires lorque j'utilise la boîte de dialogue xlDialogSendMail ?
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

Comment créer un message en utilisant Outlook Express ?
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

Comment extraire les pièces jointes de tous les dossiers Outlook ?
auteur : SilkyRoad
Ce code permet, en pilotant Outlook par Automation, de boucler sur les messages de tous les dossiers Outlook (boite de réception, éléments envoyés, éléments supprimés ... et tous leurs sous dossiers) pour en extraire les pièces jointes et les enregistrer sur le disque dur.

Vba

Option Explicit
'------------------------------------------------------------------------
'Nécessite d'activer la référence Microsoft Outlook xx.xx Object Library
'------------------------------------------------------------------------


Dim x As Integer
    'La boite de réception, la boite des éléments supprimés et tous leurs
    'sous dossiers sont pris en compte.
     Sub ExportePiecesJointes()
    Dim Ol As New Outlook.Application
    Dim Ns As Outlook.Namespace
    Dim Dossier As Outlook.MAPIFolder
    
    Set Ns = Ol.GetNamespace("MAPI")
    Set Dossier = Ns.Folders(1)
    
    SearchFolders Dossier
    x = 0
End Sub


Private Sub SearchFolders(ByVal Fld As Outlook.MAPIFolder)
Dim y As Integer
Dim OLmail 'As Outlook.MailItem
Dim pceJointe As Outlook.Attachment
Dim SousDossier As Outlook.MAPIFolder

For Each SousDossier In Fld.Folders
    If SousDossier.DefaultItemType = 0 Then
        For Each OLmail In SousDossier.Items
            If Not OLmail.Attachments.Count = 0 Then
                For y = 1 To OLmail.Attachments.Count
                     Set pceJointe = OLmail.Attachments(y)
                     x = x + 1
                     pceJointe.SaveAsFile "C:\" & x & "_" & pceJointe
                    Set pceJointe = Nothing
                Next y
            End If
        Next OLmail
    End If
    SearchFolders SousDossier
Next SousDossier
End Sub

Comment importer les contacts Outlook dans une feuille Excel, par macro ?
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()
    'Nécessite d'activer la référence "Microsoft Outlook xx.x Object Library"
    
    '
    'Créé avec Office 2007
    '
    
    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)
    
    'Verifie si le dossier des contacts contient des éléments
    If dossierContacts.Items.Count = 0 Then Exit Sub
    
    'Création d'un entête dans la 1ere ligne
    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
    
    'Boucle sur les éléments pour récupérer les infos
    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

Comment effectuer une recherche dans les contacts Outlook ?
auteur : SilkyRoad
Cet exemple recherche un contact dont l'adresse mail est saisie dans la cellule A1.
Si l'élément est trouvé, la procédure visualise la fiche complète.

Vba

    Dim olApp As Outlook.Application
    Dim dossierContacts As Outlook.MAPIFolder
    Dim Contact As Outlook.ContactItem
    
    Set olApp = New Outlook.Application
    Set dossierContacts = olApp.GetNamespace("MAPI"). _
        GetDefaultFolder(olFolderContacts)
    
    'Recherche le contact dont le nom est saisi dans la cellule A1
    Set Contact = dossierContacts.Items.Find _
        ("[Email1Address] = '" & Range("A1") & "'")
    If Not Contact Is Nothing Then
        Contact.Display
        Else
        MsgBox "Non trouvé."
    End If

Comment créer un nouveau rendez vous dans le calendrier Outlook ?
auteur : SilkyRoad
Vba

Sub NouveauRDV_Calendrier()
'Nécessite d'activer la référence "Microsoft Outlook xx.x Object Library"
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#     ' Attention : format mois/jours/année
    .Duration = 30 'minutes
    .Categories = "Amis"
    .Save
End With
 
Set OkApp = Nothing
End Sub

Comment créer une nouvelle tâche dans Outlook ?
auteur : SilkyRoad
Vba

'Nécessite d'activer la référence Microsoft Outlook xx.x Object Library
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
    ' le nom doit exister dans le dossier d'adresses
    .Recipients.Add ("leNom lePrenom")
    .Save
    .Send
End With

precedent    sommaire    suivant   

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.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com