XL 2019 A partir d' Excel créer lien qui ouvre directement le mail concerné d'Outlook

andrekn13

XLDnaute Occasionnel
Bonjour à tous encore !!
Tout d'abord, même si je me répète, impressionné par la gentillesse de tous ceux qui participent à aider "nous autres, incultes ! "

Avec une macro, dont le mail a déjà été ouvert au préalable et je récupère certaines données du corps du mail
J'aimerais, et malgré mes recherches, qui, cette fois -ci n'ont pas donner l'ombre d'un espoir !!!.... en profiter pour
créer un lien vers ce mail pour le réouvrir et le retrouver facilement "planqué" dans mes nombreux dossiers Outlook
une partie du code ( pas celui d'un lien, mais du mail ouvert où je récupère les infos) :
With myOlMailItem
i = i + 1 ' first parsed message ends up on worksheet one row below headings
msgText = myOlMailItem.Body ' or use actual email body
messageArray = Split(msgText, vbCrLf) ' split into lines
Dim J
For J = 0 To UBound(messageArray) 'Debug.Print messageArray(j)
msgLine = Split(messageArray(J) & ":", ":")
Select Case Left(msgLine(0), 3) ' à gauche, prendre les 3 premiers caractères
Case "DI "
anchor.Offset(i + 20, 1).Value = msgLine(1)

et une autre macro pour aller y prendre sa pièce jointe
Set inspecteur = ActiveInspector
Set courrier = inspecteur.CurrentItem
........
Euhhhhh ..... Je me dis que cette fois -ci faut pas demander la lune non plus !!!
Toutes mes recherches donnent des résultats inverses : de Excel VERS Outlook ......
Un génie ?
 

mromain

XLDnaute Barbatruc
Bonjour andrekn13, le forum,

Voici une piste à creuser.
Outlook attribut à chaque élément un EntryID. Il s'agit d'une sorte de clef unique (de type String) permettant d'identifier un élément (mail, tache, contact, dossier, ...).

On peut, avec le code ci-dessous ouvrir un élément à partir de son EntryID :
VB:
Public Function OpenOutlookItemFromEntryID(p_s_entryID As String) As Object
Dim l_o_olApp As Object         'Outlook.Application
Dim l_o_olNewExplorer As Object 'Outlook.Explorer
Dim l_o_olFold As Object        'Outlook.Folder
Dim l_o_olItem As Object
Dim l_b_closeOutlook As Boolean

    On Error GoTo ErrMngmt
    'main code
   
    'récupérer / créer l'application Outlook
    On Error Resume Next
     Set l_o_olApp = GetObject(, "Outlook.Application")
     l_b_closeOutlook = l_o_olApp Is Nothing
     If l_b_closeOutlook Then Set l_o_olApp = CreateObject("Outlook.Application")
    On Error GoTo ErrMngmt
    If l_o_olApp Is Nothing Then
        MsgBox "Impossible d'ouvrir l'application Outlook.", vbCritical, "Erreur"
        GoTo ErrMngmt
    End If
    If l_o_olApp.Explorers.Count = 0 Then
        l_o_olApp.Explorers.Add(l_o_olApp.Session.GetDefaultFolder(6)).Display      '6 = OlDefaultFolders.olFolderInbox
    End If
   
    On Error Resume Next
     Set l_o_olItem = l_o_olApp.Session.GetItemFromID(p_s_entryID)
     If l_o_olItem Is Nothing Then Set l_o_olFold = l_o_olApp.Session.GetFolderFromID(p_s_entryID)
    On Error GoTo ErrMngmt
   
    If Not l_o_olItem Is Nothing Then
        l_o_olItem.Display
        Set OpenOutlookItemFromEntryID = l_o_olItem
    ElseIf Not l_o_olFold Is Nothing Then
        Set l_o_olNewExplorer = l_o_olApp.Explorers.Add(l_o_olFold, 0)
        l_o_olNewExplorer.Display
        Set OpenOutlookItemFromEntryID = l_o_olFold
    Else
        MsgBox "Aucun élément n'a été trouvé dans Outlook pour l'entry ID '" & p_s_entryID & "'.", vbExclamation, "Info"
        GoTo ErrMngmt
    End If
   
QuitProc:
    On Error Resume Next
    'closure code
    Set l_o_olApp = Nothing
    Set l_o_olFold = Nothing
    Set l_o_olItem = Nothing
    Set l_o_olNewExplorer = Nothing
   
    Exit Function

ErrMngmt:
    On Error Resume Next
    If l_b_closeOutlook Then l_o_olApp.Quit
    Resume QuitProc
End Function

Appliqué à ton problème, il suffirait de récupérer et stocker cet EntryID au moment où tu récupères certaines données du corps du mail (dans une colonne cachée par exemple) avec myOlMailItem.EntryID.
Ainsi, tu pourrais ensuite ouvrir l'élément avec la fonction ci-dessus. Ce ne sera pas faisable avec un lien hypertexte, mais tu peux mettre ça en place sur un double-clic sur une colonne particulière par exemple.

A+
 

andrekn13

XLDnaute Occasionnel
Bonjour mromain
Lorsque j'ai lu et relu ta réponse elle me semblait hyper cool
Par contre, dans la pratique je sais pas comment faire concrètement
Il s'agit bien que l'on a le corps du mail déjà ouvert pour l'identifier avant d'appeler la fonction ?
Je me serais attendu pour appeler cette fonction à faire :

Sub test()
Range("A1") = EntryID ' p_s_entryID
End Sub

Doué comme je suis .......C'est pas ça :(
Dans toutes mes macros je n'ai jamais utilisé d'appel de fonction
Si tu pourrais bien me dire comment ?
Sur fichier joint j'ai plusieurs recherches non abouties
Merciiiiii beaucoup si tu pouvais y "jeter un œil"
 

Pièces jointes

  • EntryID.xlsm
    17.3 KB · Affichages: 6

mromain

XLDnaute Barbatruc
Bonjour andrekn13,

J'ai regardé ton fichier et je me demande si tu ne t'es pas trompé de fichier.
Je n'ai pas vu tes plusieurs recherches non abouties.

Comme je te le disais dans mon précédent message, l'EntryID est à récupérer au moment où tu récupère les informations du mail (dans le code que tu as posté dans ton premier message). Je n'ai pas vu ce code dans ton exemple.

En l'état, difficile de t'aider...

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 323
Membres
102 862
dernier inscrit
Emma35400