Bonjour à tous,
Je suis novice en VBA et j'ai un très faible niveau en algorithmique.
Dans le cadre d'un projet je dois pouvoir faire une analyse de réseaux sociaux au moyen du logiciel R à partir de boites mail Outlook 2010. Pour cela j'ai besoin de récupérer des données dans outlooks au format CVS ou Text peu m'importe.
Ce ficher doit contient 4 colonnes, peu importe l'ordre :
- l'éméteur du mail
- le destinataire (to, cc, ou cci)
- le type d'échange (en to, cc ou cci)
- l'objet du mail
Pour être plus explicite si ma boite mail contient un mail tel que celui ci
émis par : jean@toto.fr
to : Claude@toto.fr, George@toto.fr
CC : Francois@toto.fr, Marie @toto.fr
cci: Martine@toto.fr
Objet : exemple
Je veux obtenir une liste telle qu'elle :
Emeteur distinataire type objet
jean@toto.fr Claude@toto.fr To exemple
jean@toto.fr George@toto.fr CC exemple
jean@toto.fr Francois@toto.fr CC exemple
jean@toto.fr Marie @toto.fr CC exemple
jean@toto.fr Martine@toto.fr CCi exemple
Pour cela j'ai développé un petit script en VBA mais je ne suis pas expert, j'admets le code est pas beau et relève de la bidouille, surtout la partie avec les fonctions "replace" utilisé juste pour obtenir une liste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 Sub recupéation() Dim OlApp As Outlook.Application Dim olMail As Outlook.MailItem Dim mapdossier As Outlook.MAPIFolder Dim ligne Dim expediteur Dim destinataire Dim copie Dim copiecachee Set OlApp = Outlook.Application Set mapdossier = OlApp.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox) Dim i As Integer i = 0 'compteur de mail' 'emplacement du fichier à récuperer Dim oFSO As Scripting.FileSystemObject Dim donnees As Scripting.TextStream Set oFSO = CreateObject("scripting.FilesystemObject") Set donnees = oFSO.CreateTextFile("C:\Users\hyppopo\Desktop\test2019.txt", True) 'récupération des données des mails' For Each olMail In mapdossier.Items expediteur = olMail.senderemailaddress destinataire = destinataire & olMail.To & "; " & vbCrLf copie = copie & olMail.CC & "; " & vbCrLf copiecachee = copiecachee & olMail.BCC & "; " & vbCrLf 'pour en faire une liste ' destinataire = Replace(destinataire, ";", ";" & "to" & ";" & expediteur & ";" & olMail.Subject & vbCrLf) copie = Replace(copie, ";", ";" & "cc" & ";" & expediteur & ";" & olMail.Subject & vbCrLf) copiecachee = Replace(copiecachee, ";", ";" & "bcc" & ";" & expediteur & ";" & olMail.Subject & vbCrLf) i = i + 1 Next MsgBox i & " mails ont été analysés" With donnees .writeline destinataire .writeline copie .writeline copiecachee donnees.Close End With Set donnees = Nothing Set oFSO = Nothing End Sub
Premièrement, j'arrive vite a saturation de la mémoire et j'arrive à un message d'erreur : "Mémoire insuffisante" .
Deuxièmement, seule le dossier message recus est analysé hors j'aurai besoin de faire cela pour l'ensemble des messages, ajouter une nouvelle colonne pour signifier dans quel dossier ce trouve le mail (message recus,element envoyé,message envoyés ... etc)
troisièmement, j'ai plusieurs messagerie dans mon outlook (xxx@toto.fr, yyy@toto.fr ...etc. ) , y a t-il un moyen de toutes les analyser ?
Je vous remercie de votre aide, j'espère avoir été clair, si jamais n'hésitez pas à me poser des questions.
Cordialement,
Partager