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.
J'ai souhaite passer en parametre la plage de cellules directement au lieu de faire une saisie manuelle.
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
Le code a evolue pour devenir :
Le soucis que j'ai rencontre alors etait que la plage de donnee ne faisait pas necessairement partie du classeur actif
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
exemple :
avec xlGISBws une feuille pointant vers un autre classeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SendRangeByMail xlGISBws.Range("A1:L" & xlGISBws.Range("A65536").End(xlUp).row), MailAlias, MailAliasCC, strSubject
Le resultat n'etait pas le bon.
Aussi j'ai cherche et fini par trouver la solution en lien avec la ligne suivante :
Donc penser a activer le classeur dans lequel on fait une recopie avant de lancer la procedure
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
En esperant que ca servira a certains
Partager