Un lien hypertexte pour envoyer un fichier par mail


Il est facile d'envoyer un mail par lien hypertexte en utilisant mailto : cliquez ici
Par contre l'envoi d'un fichier Excel par le biais d'un lien hypertexte n'est pas simple.
On peut facilement remplacer le clic sur le lien hypertexte par un clic sur une cellule Excel, et intercepter le clic par VBA (Worksheet_SelectionChange), puis expédier le fichier par ActiveWorkbook.Sendmail...
Mais l'utilisation d'un "vrai" lien hypertexte (sans VBA) n'est pas simple.

La solution proposée est des plus tordues.
Le lien hypertexte pointe vers une page html (avec passage de l'objet et du destinataire en paramètres). L'ouverture de la page html déclenche un script dont le principal rôle est de transmettre les paramètres à un VBS qui se chargera d'envoyer le fichier Excel au destinataire.

Le lien hypertexte est créé dans une cellule Excel par Insertion / Lien hypertexte / Fichier : c:\mail.html / emplacement dans le fichier : ?dest=toto@free.fr&subject=voir fichier joint.
(il peut aussi être créé en utilisant la fonction =LIEN_HYPERTEXTE)
Quand on clique sur le lien, on ouvre le fichier
"file:///c:/mail.html?dest=toto@free.fr&subject=voir fichier joint"

Le fichier c:\mail.html se compose essentiellement d'un script VBScript qui permet de récupérer les paramètres et de les envoyer au fichier mail.vbs :

<HTML><HEAD><SCRIPT LANGUAGE="VBSCRIPT">
document.location=document.location.href & "?"
txt=document.location.search & "&"
dest=""
if instr(txt,"dest=")>0 then
dest=right(txt,len(txt)-instr(txt,"dest=")-4)
dest=left(dest,instr(dest,"&")-1)
end if
subject=""
if instr(txt,"subject=")>0 then
subject=right(txt,len(txt)-instr(txt,"subject=")-7)
subject=left(subject,instr(subject,"&")-1)
end if
Set sh = CreateObject("WScript.Shell")
sh.Run "C:\mail.vbs /dest:" & dest & " /subject:" & subject
history.back()
set sh=nothing
</SCRIPT></HEAD><BODY></BODY></HTML>


Le fichier html envoie la commande
c:\mail.vbs /dest:toto@free.fr /subject:voir fichier joint.
Le fichier c:\mail.vbs va devoir retrouver le fichier Excel source (celui qui contient le lien hypertexte et qu'il faut envoyer) et l'envoyer avec senmail.
La recherche du fichier Excel se fait en cherchant l'application Excel et le fichier actif (attention, risque d'erreur si plusieurs instance d'Excel sont ouvertes simultanément) :

set xl=GetObject(,"Excel.Application")
Set sh = WScript.CreateObject("WScript.Shell")
dest= wscript.Arguments.named("dest")
subject= wscript.Arguments.named("subject")
set fich=xl.activeworkbook
fich.sendmail unescape(dest),unescape(subject)
set sh=nothing
set xl=nothing


cliquez ici pour télécharger les fichiers (zip).
Enregistrez les fichiers mail.html et mail.vbs directement sous c:\.