VBA: lister Sujets Eléments Envoyés (Outlook Express seulement)

Staple1600

XLDnaute Barbatruc
Bonjour le forum

Existe-t-il un moyen de lister
les sujets (des mails) situés dans Eléments Envoyés

mais uniquement pour Outlook Express? (PC sous XL2000 sans Outlook installé)

J'ai essayé cela:
Code:
Sub test()
Dim dossier As MAPIFolder ' erreur ici
Dim i As Long
Set dossier = Application.Session.GetDefaultFolder(olFolderSentMail)
For i = dossier.Items.Count To 1 Step -1
    Debug.Print dossier.Items(i).Subject
Next i
End Sub

Quand je coche dans Références, MSOE.dll (Microsoft Outlool Express 5.0 Type Library)

erreur chargement de dll

Merci pour votre aide et toutes vos suggestions
 

Staple1600

XLDnaute Barbatruc
Re : VBA: lister Sujets Eléments Envoyés (Outlook Express seulement)

Re

Est-ce impossible?

Meme en utilisant WSH?

En attendant j'ai pensé à cette méthode

1) copier puis renommer mon Eléments envoyés.dbx en *.txt
2)l'ouvrir dans Excel avec l'assistant d'importation texte
3)faire un filtre automatique personnalisé sur la première colonne
critère: commence par Subj

le problème c'est qu'il y des cellules vides dans la colonne 1

Comment pourrais-je?


Si quelqu'un à d'autres idées, merci.

edition:
après un petit café, quelques recherches, j'ai reussi à obtenir un résultat
Code:
Sub test2()
'inspiré par : http://www.rondebruin.nl/delete.htm
'et avec l'aide du fidèle enregistreur de macro
Dim PL As Long
Dim DLg As Long
Dim LGn As Long
Dim CalcMode As Long

With Application
    CalcMode = .Calculation
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
End With
 
PLg = 1
DLg = Range("A65536").End(xlUp).Row

With ActiveSheet
    For LGn = DLg To PLg Step -1
    If IsEmpty(.Cells(LGn, "A").Value) Then Cells(LGn, "A").Value = "STAPLE"
    Next
End With
 
With [A1]
    .AutoFilter 1, "=Subj*", xlAnd
    .CurrentRegion.Copy
End With
Workbooks.Add
[A1].PasteSpecial Paste:=xlValues

With Application
    .ScreenUpdating = True
    .Calculation = CalcMode
    .CutCopyMode = False
End With
End Sub

Si vous pouviez m'aider à abréger le code VBA ci dessus, je vous serai reconnaissant

Si vous pouviez m'indiquer une autre facon de procéder, ou me conseiller
un utilitaire qui permette d'exporter la liste des objets des mails envoyés avec OE
je vous serai doublement reconnaissant.

Bonne nuit à tous.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : VBA: lister Sujets Eléments Envoyés (Outlook Express seulement)

Bonjour le forum

Personne pour m'aiguiller sur une piste

J'ai trouvé ceci sur le net:
SOURCE:
Code:
Option Explicit
'
' Listing 11.6. A procedure that reads Inbox data into a worksheet.
'
Sub ReadInboxData()'Sub LireMailsObjets()
    Dim ol As Outlook.Application
    Dim ns As NameSpace
    Dim folder As MAPIFolder
    Dim ws As Worksheet
    Dim i As Integer
    '
    ' Establish a connection and log on
    '
    Set ol = CreateObject("Outlook.Application")
    Set ns = ol.GetNamespace("MAPI")
    ns.Logon
    '
    ' Get the default Inbox folder and set Receive Mail worksheet
    '
    Set folder = ns.GetDefaultFolder(olFolderInbox)
'+++++++++++' modifs
    Set folder =ns.GetDefaultFolder(olFolderSentMail)
'+++++++++++
'+++++++++++ 'modifs
    Set ws = Worksheets("Emails envoyes"")
'++++++++++
    'Set ws = Worksheets("Receive Mail")
    '
    ' Run through each item in the Inbox
    '
    For i = 1 To folder.Items.Count
        With folder.Items(i)
            '
            ' Record the sender, subject, size,
            ' received time, and some of the body
            '
            ws.[A1].Offset(i, 0) = .SenderName
            ws.[A1].Offset(i, 1) = .SenderEmailAddress
            ws.[A1].Offset(i, 2) = .Subject
            ws.[A1].Offset(i, 3) = .Size
            ws.[A1].Offset(i, 4) = .ReceivedTime
            ws.[A1].Offset(i, 5) = Left(.Body, 100)
        End With
    Next 'i
    '
    ' Log off the session
    '
    ns.Logoff
    Set ol = Nothing
End Sub

Evidemment ca ne fonctionne qu'avec Outlook

N'est -t-il pas possible de la modifier pour qu'elle fonctionne avec OE?
 
Dernière édition:

Minick

XLDnaute Impliqué
Re : VBA: lister Sujets Eléments Envoyés (Outlook Express seulement)

Re,

voila un petit exemple tres basic pour recuperer les sujets des mails.
Il faut que tu ajoutes la reference MSMAPI que tu devrais trouver dans
c:\windows\system32\msmapi32.ocx

Code:
Sub ListeSujet()
    Dim SessionMapi As MSMAPI.MapiSession
    Dim MessagesMapi As MSMAPI.MapiMessages
    Dim Cpt As Integer
    
    Set SessionMapi = New MSMAPI.MapiSession
    With SessionMapi
        .LogonUI = False
        .SignOn
    End With

    Set MessagesMapi = New MSMAPI.MapiMessages
    With MessagesMapi
        .SessionID = SessionMapi.SessionID
        .Fetch
        
        For Cpt = 0 To .MsgCount - 1
            .MsgIndex = Cpt
            On Error Resume Next
                Feuil1.Range("A" & Feuil1.Range("A65536").End(xlUp).Row + 1) = .MsgSubject
            On Error GoTo 0
        Next
    End With

    SessionMapi.SignOff
End Sub



++
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : VBA: lister Sujets Eléments Envoyés (Outlook Express seulement)

Bonjour Minick, leforum


Cette macro fonctionne t-elle sur un PC (Win98SE) avec
Outlook Express 6?

Aucun danger à l'éxécuter?

Car actuellement avec la macro test(2)
et maintenant FastDelete()
Code:
'Tirex28
Sub FastDelete()
On Error Resume Next
     With Range(Range("A1"), Range("A65536").End(xlUp))
        .AutoFilter field:=1, Criteria1:="<>Subj*"
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
End Sub
je travaillais sur une copie du fichier Elements envoyés.dbx, or ta macro agit en direct live sur OE
et j'ai un peu peur de l'éxécuter.

Edit:

Sur le PC en question, il y a deux identités dans Outlook Express
dont aucune n'est décalrée comme identité principale.

Pour utiliser ton code il faut que je déclare come identité principale
celle dont je ceux lister les sujets des mails envoyés?

PS: le but que je m'échine à obtenir est le suivant:
ce compte me sert pour candidater sur des offres emploi
et comme je n'ai pas trouver d'option dans OE (ni dans Thunderbird d'ailleurs)
pour imprimer la liste des sujets de mes mails envoyés

j'ai opter pour VBA

La solution "bidouille" fonctionne
(import dbx dans XL, puis macro)


Minick: Je trouve ta macro élégante, mais je n'ai pas encore osé la tester
 
Dernière édition:

Minick

XLDnaute Impliqué
Re : VBA: lister Sujets Eléments Envoyés (Outlook Express seulement)

re,

Je n'ai eu aucun souci avec la macro, je comprend ton inquietude
on est jamais trop prudent.
Par contre je viens de me rendre compte que tu voulais les mails envoyes et
non les mails recus.
Et la ca ne fonctionnera pas avec mon code.

En effet la version de MAPI utilisee ici ne permet de lister que les mails recus ou en attentes d'envois.

Desole,

Je regarde si je trouve autre chose a ce sujet.

++
 

Staple1600

XLDnaute Barbatruc
Re : VBA: lister Sujets Eléments Envoyés (Outlook Express seulement)

Bonjour le forum


Je vous livre ici la version finale (pour le moment)
Code:
Sub exportOBJMails()
Dim SourceFichier, DestinationFichier
Dim nom As String
'copie du fichier
'SourceFichier = "C:\repertoire contenant\Eléments envoyés.dbx" 
DestinationFichier = "C:\OEtemp.txt" 
' Copie le fichier source dans le fichier cible.
FileCopy SourceFichier, DestinationFichier
nom = "OBJ_Mails-" & Application.Text(Date, "ddmmyy")
Application.ScreenUpdating = False
'importation du fichier texte
ChDir "C:\"
Workbooks.OpenText "C:\OEtemp.txt", xlWindows, 1, _
xlDelimited, xlDoubleQuote, False, True, False, _
False, False, False, Array(Array(1, 1), Array(2, 1)) ' à vérifier / modifier
'enregistrement du fichier au format Excel
ActiveWorkbook.SaveAs nom, xlNormal
'Tirex28
On Error Resume Next
     With Range(Range("A1"), Range("A65536").End(xlUp))
        .AutoFilter field:=1, Criteria1:="<>Subj*"
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
Kill "C:\OEtemp.txt"
End Sub

->Minick: je continue également à chercher des infos en rapport
avec ta macro mais je ne trouve que des codes VBA
pour envoyer des mails
 
Dernière édition:

Minick

XLDnaute Impliqué
Re : VBA: lister Sujets Eléments Envoyés (Outlook Express seulement)

Salut,

J'ai explore plusieurs pistes mais rien a faire.
Outlook Express est trop timide pour nous livrer d'autres infos
que les messages recus ou en boite d'envoi.

J'ai aussi essaye plusieurs dll trouvees au cours de mes recherches
mais toujours la meme chose.
Soit il est impossible de la referencer dans vbe soit l'acces est limite
aux messages recus et a la boite d'envoi.

Desole de ne pas avoir pu t'apporter plus.

++

PS:
Si quelqu'un trouve la solution, je suis preneur pour ma culture perso.
 

Staple1600

XLDnaute Barbatruc
Re : VBA: lister Sujets Eléments Envoyés (Outlook Express seulement)

Bonjour le forum, Minick (sois pas désolé et merci de ta contribution)

Je ne vois pas d'autres solutions que:

1) installer Outlook puisque il cause VBA

2) ou utiliser la macro "bidouillage" du précédent post(qui fonctionne)

ou espèrer , toujours et encore, que quelque part sur le net
quelqu'un (aficionados d'Excel/VBA) a un jour eu besoin d'imprimer les sujets de ses mails envoyés.


PS: Moi aussi, tout comme Minick, si solution il y a je suis preneur

Pris d'un soudain et fol espoir j'ai tenté une recherche que voici:

auteur: CareyJ:
Here's code to save EMail into a text file. This code does the following:

1. Signs on to the default Mapi account of the currently logged in user.
2. Fetches a collection of all Unread Messages in the Inbox folder
3. Prints OriginatorName, OriginatorAddress, MessageSubject, and MessageBody to a Text Dump File

To test it, start a new project and add the Component : Microsoft Mapi Controls. Then add a MapiSession control named "MapiSession1" and MapiMessages Control named "MapiMessages1". Add a Command Button named "Command1".

Then add this code to your form:
Code:
Private Sub Command1_Click()
    Dim MsgDump As String
    Dim FileCheck As String
    MsgDump = "C:\Messages.txt"
    If MAPISession1.SessionID = 0 Then MAPISession1.SignOn
    MAPIMessages1.SessionID = MAPISession1.SessionID
    MAPIMessages1.FetchUnreadOnly = True
    MAPIMessages1.Fetch
    If MAPIMessages1.MsgCount > 0 Then
        FileCheck = Dir(MsgDump)
        If FileCheck = "Messages.txt" Then
            Open MsgDump For Append As #1
        Else
            Open MsgDump For Output As #1
        End If
        While MAPIMessages1.MsgIndex < MAPIMessages1.MsgCount - 1
            Print #1, MAPIMessages1.MsgOrigDisplayName & vbCrLf
            Print #1, MAPIMessages1.MsgOrigAddress & vbCrLf
            Print #1, MAPIMessages1.MsgSubject & vbCrLf
            Print #1, MAPIMessages1.MsgDateReceived & vbCrLf
            Print #1, MAPIMessages1.MsgNoteText & vbCrLf & vbCrLf & vbCrLf
            MAPIMessages1.MsgIndex = MAPIMessages1.MsgIndex + 1
        Wend
        Close #1
    End If
    MAPISession1.SignOff
End Sub

Sauf qu'il s'agit d'inbox, et je ne trouve comment nommer en VBA Sent Items.dbx
 
Dernière édition:

Statistiques des forums

Discussions
312 215
Messages
2 086 332
Membres
103 188
dernier inscrit
evebar