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

  • Initiateur de la discussion Initiateur de la discussion olivier974s
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

O

olivier974s

Guest
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

Dernière modification par un modérateur:
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 ?
 
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,
 
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

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.
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Question code VBA
Réponses
2
Affichages
578
Réponses
6
Affichages
932
Réponses
17
Affichages
2 K
Réponses
2
Affichages
1 K
Retour