Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Envoi de mail en VBA avec liens hypertextes [RESOLU]

olivier974s

XLDnaute Nouveau
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 :
VB:
Sub EnvoiMail()

'Envoi un mail au destinataire concerné

    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("H").Cells.SpecialCells(xlCellTypeConstants)

        If Cell.Value Like "?*@?*.?*" And _

           LCase(Cells(Cell.Row, "I").Value) <> "envoyé" Then

            Set OutMail = OutApp.CreateItem(olMailItem)

            On Error Resume Next

            If lien.Hyperlinks.Count > 0 Then _

            lien.Offset(Cell.Row, 7) = 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,"

                .Send  'Or use Display

            End With

            On Error GoTo 0

            Cells(Cell.Row, "I").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.
 

Pièces jointes

  • Copie de 00_Registre_des_Courriers_arrivés-forum.xlsm
    60.7 KB · Affichages: 9
Dernière édition:

Ikito

XLDnaute Occasionnel
Re,

VB:
.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 _

                      &"<a href="LienVersTonFichier">Petit Nom à cliquer pour l utilisateur</a>" & vbNewLine & vbNewLine _

                      & "Cordialement,"

Mieux ?
 

olivier974s

XLDnaute Nouveau
Ce que tu proposes c'est de rentrer en "dur" le lien du fichier dans le code ?

Or moi ce que je souhaite c'est en fonction de chaque ligne du tableau il y a un fichier associé, et je veux récupérer le lien complet :
Exemple de mail que je souhaite avec le lien :

Bonjour,

Je vous remercie de traiter ce courrier :

Date de réception du courrier : 18/07/2019

Expéditeur : nomExpéditeur

Objet du courrier : Objet du courrier

<Lien supprimé>

Cordialement,
 

Ikito

XLDnaute Occasionnel
Re,

J'avais bien compris. Peu importe de le rentrer en dur ou non, je te mets la syntaxe à utiliser dans le corps du mail dans ton code VBA.
Si ton lien est compris dans une cellule alors récupère le en variable et mets le nom de ta variable à la place de "LienVersTonFichier".

Voir le fichier en PJ.
 

Pièces jointes

  • 00_Registre_des_Courriers_arrivés-forum.xlsm
    99.3 KB · Affichages: 45

Ikito

XLDnaute Occasionnel
Re,

Le lien n'est pas complet dès lors que le lien du fichier spécifié en colonne F contient des espaces.
Je n'ai pas encore trouvé de solution pour prendre les espaces dans le lien, pour le moment il faut des liens à des fichiers sans espace.
 

olivier974s

XLDnaute Nouveau
Bonjour, j'ai pu trouver la solution : j'ai modifié le code
VB:
"<file:\\V:\01_FLUX_ENTRANTS\2019 COURRIER ARRIVE\" & Cells(Cell.Row, "E").Hyperlinks.Item(1).Address & ">"
Avec ce bout de code, j'obtiens bien ce que je veux.
 

Discussions similaires

Réponses
2
Affichages
326
Réponses
6
Affichages
570
Réponses
4
Affichages
432
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…