Récupérer expéditeur mail enregistré pour nouveau mail - Autorisations

Bonjour à tous,

J'ai un soucis sur une macro que je travaille en ce moment pour mon boulot.

En gros dans une macro précédente j'enregistre un mail dans un dossier Windows. Pour tester ici j'ai figé le dossier "C:\Users\Heelflip\Desktop\Test"

Le but de la nouvelle macro et de récupérer l'expéditeur du mail enregistré sous Windows pour lui envoyer un mail derrière. La voici:

Sub Cherche_Infos()
Dim Chemin As String, Fichier As String, Extens As String
Dim objOL As Outlook.Application
Dim Msg As Outlook.MailItem
'nécessite d'activer la référence : Microsoft Outlook X.0 Object Library.
    Set objOL = CreateObject("Outlook.Application")
    Chemin = "C:\Users\Heelflip\Desktop\Test\"
    Extens = "*.msg"
    Fichier = Dir(Chemin & Extens)
    Set Msg = objOL.Session.OpenSharedItem(Fichier)
        If Fichier <> vbNullString Then
            Worksheets("Feuil1").Cells(1, "A1") = Msg.SenderEmailAddress
        End If
    Set Msg = Nothing
    Set objOL = Nothing

End Sub

Pour l'instant je tâtonne, j'ai donc créé une macro qui vient coller le mail de l'expéditeur dans une cellule, le but étant plus tard de remplacer le collage dans la cellule directement par le nouveau mail, mais il est pour l'instant plus simple de procéder par petite étapes pour m'y retrouver, sachant que je débute en VBA.

Je bloque actuellement sur un erreur d’exécution, qui est du apparemment à mon code "Set Msg = objOL.Session.OpenSharedItem(Fichier)"

capture d ecran 2022 11 04 104336

Tout est bien OK au niveau des autorisations je suis Admin et j'ai tous les droits, le fichier n'est pas ouvert non plus.

Quelqu'un aurait-il une idée du problème ou un solution pour le contourner ?

Hello,

A tester :

Sub Cherche_Infos()
Dim Chemin As String, Fichier As String, Extens As String
Dim objOL As Outlook.Application
Dim Msg As Outlook.MailItem
'nécessite d'activer la référence : Microsoft Outlook X.0 Object Library.
    Set objOL = CreateObject("Outlook.Application")
    Chemin = "C:\Users\Heelflip\Desktop\Test\"
    Extens = "*.msg"
    Fichier = Dir(Chemin & Extens)
    Set Msg = objOL.Session.OpenSharedItem(Chemin & Fichier)
        If Fichier <> vbNullString Then
            Worksheets("Feuil1").Cells(1, "A1") = Msg.SenderName
        End If
    Set Msg = Nothing
    Set objOL = Nothing

End Sub

Salut Rag et merci pour ta réponse.

Alors ça passe l'erreur d'avant mais ça me donne cela:

1

Le débogage m'indique que cela vien de la formule:

Worksheets("Feuil1").Cells(1, "A1") = Msg.SenderName

J'ai la même chose si je remplace par SenderEmailAddress. Je continue à chercher ce que ça peut être, mais la première erreur est déjà out

dsl j'avais pas vu :

Worksheets("Feuil1").Cells(1, "A1") = Msg.SenderName

à remplacer par :

Worksheets("Feuil1").Cells(1, 1) = Msg.SenderName

Re,

Je suis trop bête, je n'ai même pas vu le 1 derrière le "A"... des fois on a beau se relire on est devant l'erreur et on ne la voit pas.

Top ça fonctionne mais en copiant le nom de l'envoyeur et quand je change SenderName en SenderEmailAdress ça me donne un truc du genre /O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP... Donc plus qu'a trouver comment changer cela mais il y a plein de topic à ce sujet donc ça devrait être facile

Du coup j'ai deux questions par rapport à tes corrections, histoire de comprendre et d'avancer dans mon apprentissage:

- Pourquoi (Chemin & Fichier) dans la commande OpenSharedItem alors que le fichier est déjà en fonction du chemin, c'est toujours ainsi qu'il faut procéder ?

- Est-ce une erreur de coder comme je le fais en mettant le nom des colonne plutôt qu'un numéro ? Étant débutant je trouve que le nom est plus simple à gérer surtout quand on est sur des tableau encore en mouvement, quand je rajoute une colonne j'ai vite fait d'identifier les colonnes à changer dans mon code.

Hello,

Pourquoi (Chemin & Fichier) dans la commande OpenSharedItem alors que le fichier est déjà en fonction du chemin, c'est toujours ainsi qu'il faut procéder ?

La fonction Dir ne récupère que le nom du fichier :

Chemin = "C:\Users\Heelflip\Desktop\Test\"
    Extens = "*.msg"
    Fichier = Dir(Chemin & Extens)
msgbox  Fichier 

Pour ouvrir tout type de fichier tu dois avoir chemin + nom.

Donc soit tu supprimes ta variable Fichier et tu indiques Chemin & Extens dans ton objet OpenSharedItem.

Soit comme ceci :

Chemin = "C:\Users\Heelflip\Desktop\Test\"
    Extens = "*.msg"
    Fichier = Chemin  &  Dir(Chemin & Extens)
Set Msg = objOL.Session.OpenSharedItem(Fichier)

Est-ce une erreur de coder comme je le fais en mettant le nom des colonne plutôt qu'un numéro ?

Non c'est comme tu préfères, c'est selon ton organisation.

Voici des exemples de syntaxe concernant les cellules

'A1
Range("A1") = "Heelflip"
cells(1,1)= "Heelflip"
cells(1,"a")= "Heelflip"
[A1]= "Heelflip"

Ha OK j'avais pas bien compris cette fonction OpenSharedItem, merci pour le coup de main et les explications en tout cas, je mettrais en résolu dès que j'aurai l'adresse mail réelle avec la solution histoire que d'autre puisse trouver leur bonheur

Rag, j'ai trouvé pourquoi je n'avais pas inséré le chemin dans ma variable fichier, je voulais m'en servir pour un msgbox erreur dans le cas ou le dossier ne contenait pas de mail

Bon sinon pas facile cette histoire de mail, cela fonctionne nickel en SMTP, mais impossible avec du Exchange, j'ai fouillé pas mal de sites en anglais, pas toujours évident car on tombe sur des codes qui me dépassent un peu. Du coup j'ai commencé à bidouiller une adaptation sur mon code qui donne ceci:

Sub Cherche_Infos()
Dim Chemin, Fichier, Extension As String
Dim OlApp As Outlook.Application
Dim MailItem As Outlook.MailItem
Dim AdresseMail As String
'Nécessite d'activer la référence : Microsoft Outlook X.0 Object Library.
    Set OlApp = CreateObject("Outlook.Application")
    Chemin = "C:\Users\Heelflip\Desktop\Test\"
    Extension = "*.msg"
    Fichier = Dir(Chemin & Extension)
        If Fichier <> vbNullString Then
            Set MailItem = OlApp.Session.OpenSharedItem(Chemin & Fichier)
            If MailItem.SenderEmailType = "SMTP" Then
                AdresseMail = MailItem.Sender
            Else
                If MailItem.SenderEmailType = "EX" Then
                    AdresseMail = MailItem.Sender.GetExchangeUser.PrimarySmtpAddress
                End If
            End If
            Worksheets("Feuil1").Cells(1, "A") = AdresseMail
        Else
            MsgBox "Pas de mail" 'A adapter selon besoin
        End If
    Set Msg = Nothing
    Set objOL = Nothing
End Sub

Le problème est que pour la partie Exchange j'ai cette erreur:

1

Le soucis vient de cette partie du code:

AdresseMail = MailItem.Sender.GetExchangeUser.PrimarySmtpAddress

Espérons que la nuit me permette de trouver l'erreur.

Hello,

comme ceci ça donne quoi ?

AdresseMail = MailItem.Sender.GetExchangeUser().PrimarySmtpAddress

Hello,

Même erreur.

Apparemment il manque un bout de code avec cela:

.PropertyAccessor.GetProperty

schemas.microsoft.com-mapi-proptag-

C'est un lien HTTP mais je ne peux pas les poster sur le forum.

Mais pas évident de trouver une réponse qui va bien sur les forums anglais donc je continue à chercher en bidouillant le code.

Bon bah test au boulot et tout fonctionne parfaitement suivant le dernier code utilisé donc grand merci à toi RAG pour l'aide

Pas de soucis, a+ Mu du belier

Rechercher des sujets similaires à "recuperer expediteur mail enregistre nouveau autorisations"