em utilisant les exemples de la
http://excel.developpez.com/faq/inde...geCellulesMail
J'ai ete confronte a un soucis en faisant evoluer le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
'-----------------------------------------------------------------------
'
' 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
J'ai souhaite passer en parametre la plage de cellules directement au lieu de faire une saisie manuelle.
Le code a evolue pour devenir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Sub SendRangeByMail(Optional rngesend As Range, Optional strTo As String = "", Optional strCc As String = "", Optional strSubject As String = "", Optional strAttachedFilePath As String = "")
 
    With Application
        On Error Resume Next
 
        ' Demande à l'utilisateur de sélectionner la
        ' plage de cellule
        If IsMissing(rngesend) Then
            Set rngesend = .InputBox(Prompt:="Please select range you wish to send.", Type:=8, Default:=.Selection.Address)
        End If
        ' 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", strTo, strCc, strSubject, strAttachedFilePath)
 
        ' Le fichier HTML n'est plus nécessaire
 
        Kill "C:\Temp\XLRange.htm"
 
    End With ' With Application
 
End Sub
Le soucis que j'ai rencontre alors etait que la plage de donnee ne faisait pas necessairement partie du classeur actif

exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SendRangeByMail xlGISBws.Range("A1:L" & xlGISBws.Range("A65536").End(xlUp).row), MailAlias, MailAliasCC, strSubject
avec xlGISBws une feuille pointant vers un autre classeur.
Le resultat n'etait pas le bon.
Aussi j'ai cherche et fini par trouver la solution en lien avec la ligne suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
.ActiveWorkbook.PublishObjects.Add(4, "C:\Temp\XLRange.htm", rngesend.Parent.Name, rngesend.Address, 0, "", "").Publish True
Donc penser a activer le classeur dans lequel on fait une recopie avant de lancer la procedure

En esperant que ca servira a certains