Envoi de mail avec liens hypertextes
Bonjour à tous,
Je vous remercie d'avance pour toutes vos contributions à mon problème.
J'ai un fichier Excel qui sert de registre de courriers (chrono). Lorsqu'on reçoit un courrier, on crée une version numérisée (PDF) et le stocke à un emplacement sur notre serveur de fichiers. Le secrétariat renseigne les différentes colonnes comme suit :
Colonne A : Numéro (chrono)
Colonne B : Date de réception du courrier
Colonne C : Support (mail ou voie postale)
Colonne D : Référence du courrier
Colonne E : Objet du courrier avec le lien hypertexte pointant vers le fichier PDF
Colonne F : l'expéditeur
Colonne G : liste d'emails afin de déterminer de la personne qui doit traiter le courrier
Colonne H : utile pour ne pas traiter les mails déjà envoyés.
Avec le code que j'ai fait la fonctionnalité d'envoi de mail fonctionne, mon problème est lié à la récupération du lien hypertexte de façon complète. Car lorsque je récupère le lien par une autre fonction j'ai ce genre de résultat : ..\..\emplacement\vers\fichiers. ce n'est pas le lien complet.
Ci-dessous le code que j'exécute mais qui renvoi un résultat vide :
Sub EnvoiMail()
'Envoi un mail au destinataire concerné
'Fonctionne avec Office 2010-2016
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Dim Cell As Range
Dim lien As Range
Dim Body As Variant
Application.ScreenUpdating = False
Set OutApp = CreateObject("Outlook.Application")
On Error GoTo cleanup
For Each Cell In Columns("G").Cells.SpecialCells(xlCellTypeConstants)
If Cell.Value Like "?*@?*.?*" And _
LCase(Cells(Cell.Row, "H").Value) <> "envoyé" Then
Set OutMail = OutApp.CreateItem(olMailItem)
On Error Resume Next
If lien.Hyperlinks.Count > 0 Then _
lien.Offset(Cell.Row, 5) = Cell.Hyperlinks(1).Address
With OutMail
.To = Cell.Value
.Subject = "Courrier à traiter"
'email formaté en HTML
.BodyFormat = olFormatHTML
.HTMLBody = "<html><p>" & Body & "</p></html>"
.Body = "Bonjour," & vbNewLine & vbNewLine _
& "Je vous remercie de traiter ce courrier : " & vbNewLine & vbNewLine _
& "Date de réception du courrier : " & Cells(Cell.Row, "B").Value & vbLf & vbLf _
& "Expéditeur : " & Cells(Cell.Row, "F").Value & vbLf & vbLf _
& "Objet du courrier : " & Cells(Cell.Row, "E").Value & vbNewLine & vbNewLine _
& "<file:\\" & lien.Value & ">" & vbNewLine & vbNewLine _
& "Cordialement,"
'Pièce jointe
'.Attachments.Add ("C:\test.txt")
.Send 'Or use Display
End With
On Error GoTo 0
Cells(Cell.Row, "H").Value = "envoyé"
Set OutMail = Nothing
End If
Next Cell
cleanup:
Set OutApp = Nothing
Application.ScreenUpdating = True
End SubJ'ai déjà effectué pas mal de recherches mais je ne trouve pas de solutions. J'avais pensé à stocker le lien dans une variable mais je n'y arrive pas.
Je joins également le fichier sur lequel je travaille.
Encore merci pour votre aide.
Bonjour,
Et si tu remplaces lien par Cell ?
Cdlt.
Bonjour,
Non ça ne marche pas. Une autre idée ?
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
Le problème est que si le fichier PdF se situe dans un sous_répertoire du classeur, le lien hypertext est relatif par rapport au répertoire du classeur.
Essayer ce code :
lien_fichier = Empty
If InStr(cell.Hyperlinks(1).Address, ":") = 0 Then lien_fichier = ThisWorkbook.Path & "\"
lien_fichier = lien_fichier & cell.Hyperlinks(1).Address
lien.Offset(cell.Row, 5) = lien_fichierBonjour à tous ...
Il y a aussi autre chose que je ne comprends pas dans ton code :
.HTMLBody = "<html><p>" & Body & "</p></html>"
.Body = "Bonjour," & vbNewLine & vbNewLine _Si tu veux mettre un lien actif dans ton mail, utilise en effet htmlbody, mais avec la syntaxe html complète c'est à dire
.HTMLBody = "<a href=""adresse complète du lien en absolu"">texte d’invitation du lien</a>"Dans ton code tu fais appel à Body (et non . Body) que tu définis ultérieurement ... il y a un schmilblick à la fois sur l'ordre des opérations, sur l'emploi de Body et sur son appartenance à l'entité supérieure..
Et en html, vbNewLine doit être remplacé par <br/>
Bonsoir,
Le problème est que si le fichier PdF se situe dans un sous_répertoire du classeur, le lien hypertext est relatif par rapport au répertoire du classeur.
Essayer ce code :
lien_fichier = Empty If InStr(cell.Hyperlinks(1).Address, ":") = 0 Then lien_fichier = ThisWorkbook.Path & "\" lien_fichier = lien_fichier & cell.Hyperlinks(1).Address lien.Offset(cell.Row, 5) = lien_fichier
Bonjour,
Non les fichiers sont situés dans un autre dossier. "lien.offset" décale le lien dans une nouvelle cellule ?
Bonjour à tous ...
Il y a aussi autre chose que je ne comprends pas dans ton code :
.HTMLBody = "<html><p>" & Body & "</p></html>" .Body = "Bonjour," & vbNewLine & vbNewLine _Si tu veux mettre un lien actif dans ton mail, utilise en effet htmlbody, mais avec la syntaxe html complète c'est à dire
.HTMLBody = "<a href=""adresse complète du lien en absolu"">texte d’invitation du lien</a>"Dans ton code tu fais appel à Body (et non . Body) que tu définis ultérieurement ... il y a un schmilblick à la fois sur l'ordre des opérations, sur l'emploi de Body et sur son appartenance à l'entité supérieure..
Et en html, vbNewLine doit être remplacé par
<br/>
Bonjour,
L'adresse du lien n'est pas un fichier absolu, cela change à chaque ligne. Comment faire pour intégrer le lien en fonction de la cellule ? (en reprenant mon premier post - la colonne E.
L’arborescence du dossier contenant le fichier excel et les scans PDF :
COURRIERS ARRIVES\CHRONO\registre-chrono-arrives.xls
COURRIERS ARRIVES\SCAN\2019\Courrier01.pdf
COURRIERS ARRIVES\SCAN\2019\Courrier02.pdf
etc...
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
L'adresse du lien n'est pas un fichier absolu,
Cette adresse :
COURRIERS ARRIVES\SCAN\2019\Courrier01.pdf
n'est pas absolue car il n'y a aucune référence de lecteur réseau ou alors "COURRIERS ARRIVES" est un nom de partage de données et l'adresse absolue serait :
\\COURRIERS_ARRIVES\SCAN\2019\Courrier01.pdf
car je ne pense pas qu'un nom de partage tolère les espaces.
L'adresse du lien n'est pas un fichier absolu,
Cette adresse :
COURRIERS ARRIVES\SCAN\2019\Courrier01.pdf
n'est pas absolue car il n'y a aucune référence de lecteur réseau ou alors "COURRIERS ARRIVES" est un nom de partage de données et l'adresse absolue serait :
\\COURRIERS_ARRIVES\SCAN\2019\Courrier01.pdf
car je ne pense pas qu'un nom de partage tolère les espaces.
Oups, autant pour moi j'ai oublié la lettre du lecteur réseau : V:\COURRIERS ARRIVES\SCAN\2019\Courrier01.pdf
Bonjour à tous ...
Il y a aussi autre chose que je ne comprends pas dans ton code :
.HTMLBody = "<html><p>" & Body & "</p></html>" .Body = "Bonjour," & vbNewLine & vbNewLine _Si tu veux mettre un lien actif dans ton mail, utilise en effet htmlbody, mais avec la syntaxe html complète c'est à dire
.HTMLBody = "<a href=""adresse complète du lien en absolu"">texte d’invitation du lien</a>"Dans ton code tu fais appel à Body (et non . Body) que tu définis ultérieurement ... il y a un schmilblick à la fois sur l'ordre des opérations, sur l'emploi de Body et sur son appartenance à l'entité supérieure..
Et en html, vbNewLine doit être remplacé par
<br/>Bonjour,
L'adresse du lien n'est pas un fichier absolu, cela change à chaque ligne. Comment faire pour intégrer le lien en fonction de la cellule ? (en reprenant mon premier post - la colonne E.
L’arborescence du dossier contenant le fichier excel et les scans PDF :
COURRIERS ARRIVES\CHRONO\registre-chrono-arrives.xls
COURRIERS ARRIVES\SCAN\2019\Courrier01.pdf
COURRIERS ARRIVES\SCAN\2019\Courrier02.pdf
etc...
et donc ... compte-tenu de ta réponse précédente, attends-tu quelque chose de moi ou de nous ?
Désolé du retard.
J'ai pu trouver une solution
"<file:\\V:\COURRIERS ARRIVES\SCAN\2019\" & Cells(Cell.Row, "E").Hyperlinks.Item(1).Address & ">"Je récupère bien l'ensemble du lien même si l'affichage de ce dernier dans le mail se présente de cette facon :
<file:\\V:\COURRIERS ARRIVES\..\2019 COURRIER ARRIVE\Courrier04.pdf>