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 Sub

J'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 ?

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 à 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...

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>

Rechercher des sujets similaires à "envoi mail liens hypertextes"