Microsoft 365 Extraction contenu mail outlook vers excel

raf26

XLDnaute Occasionnel
Bonjour,

Je reçois chaque jour plusieurs mail du même expéditeur et le sujet commençant toujours par "nouveau contrôle...."

Je copie manuellement le contenu du mail dans une cellule de mon tableau Excel et le classe dans un sous dossier (un par mois) de ma boite de réception Outlook.

Je souhaite automatiser cette tache répétitive.

J'ai trouvé cette macro sur le net, adaptée à mes cellules et aux mails reçus

Toutefois la macro plante sur

VB:
 lastMessage.Display

Je vous joins la macro complete

Code:
Sub Extract()
    
    Dim outlookApp  As Outlook.Application
    Dim outlookNamespace As namespace
    Dim outlookFolder As MAPIFolder
    Dim outlookItems As items
    Dim lastMessage As mailItem
    Dim cellB3      As Range
    Dim cellE1      As Range
    Dim subFolderName As String
    Dim subFolder   As MAPIFolder
    
    ' Sélectionner la cellule B3 de la feuille Qualite
    Set cellB3 = ThisWorkbook.Worksheets("Qualite").Range("B3")
    
    ' Ouvrir l'application Outlook
    Set outlookApp = New Outlook.Application
    Set outlookNamespace = outlookApp.GetNamespace("MAPI")
    
    ' Accéder à la boîte de réception
    Set outlookFolder = outlookNamespace.GetDefaultFolder(olFolderInbox)
    
    ' Rechercher le dernier message avec l'expéditeur "qualite@test.com" et l'objet "Nouveau controle(XXXX ...ces numéros changent automatiquement) a éte effectue"
    Set outlookItems = outlookFolder.items
    outlookItems.Sort "[ReceivedTime]", True
    
    For Each lastMessage In outlookItems
        If lastMessage.SenderName = "qualite@test.com" And lastMessage.Subject = "Nouveau controle" Then
            Exit For
        End If
    Next
    
    ' Copier le contenu du message dans le presse-papiers
    lastMessage.Display
    SendKeys "^a^c"
    
    ' Déplacer le message dans le sous-dossier nommé selon la cellule E1
    Set cellE1 = ThisWorkbook.Worksheets("Qualite").Range("E1")
    subFolderName = cellE1.Value
    If outlookFolder.Folders.Exists(subFolderName) Then
        Set subFolder = outlookFolder.Folders(subFolderName)
    Else
        Set subFolder = outlookFolder.Folders.Add(subFolderName)
    End If
    
    lastMessage.Move subFolder
    lastMessage.UnRead = False
    
End Sub


D'avance merci pour vos contributions.

Bonne journée.
 
Solution
En partant de la base du message ci-dessous :
1731076537621.png


Ce code raccourci devrait répondre à la demande :
VB:
Option Compare Text
Sub Extract()
 
    Dim outlookApp  As Outlook.Application
    Dim outlookFolder As MAPIFolder
    Dim lastMessage As mailItem
    Dim subFolderName As String
    Dim subFolder   As MAPIFolder
 
    ' Sélectionner la cellule B3 de la feuille Qualite
    ThisWorkbook.Worksheets("Qualite").Activate
    subFolderName = [E1]
 
    ' Ouvrir l'application Outlook
    Set outlookApp = New Outlook.Application
    ' Accéder à la boîte de réception
    Set outlookFolder = outlookApp.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
 
    N = 0
 
    For Each lastMessage In outlookFolder.items
 
'        If...

raf26

XLDnaute Occasionnel
Bonjour,

Votre dernière macro marche excellemment bien !

Bravo et grand grand merci pour le temps passé et votre talent.

Juste une dernière chose :

Si ma boite de réception ne contient aucun message avec l'expéditeur ou le sujet du mail précisé dans la macro, comment en sortir ?

J'ai essayé d'adapter

VB:
If N < 0 Then Exit Sub

mais cela ne fonctionne pas
 

Discussions similaires

Statistiques des forums

Discussions
315 087
Messages
2 116 084
Membres
112 656
dernier inscrit
VNVT