Rechercher : dans
Par :

OUTLOOK extraire adresses emails des emails ?

Dernière réponse le 1 déc 2009 à 12:05:08 Charlie, le 28 mai 2007 à 21:07:25 
 Signaler ce message aux modérateurs

Bonjour,
comment peut on extraire les adresses emails des emails d'un dossier de Outlook pour en faire un fichier .csv
merci
Charles

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « OUTLOOK extraire adresses emails des emails ? » dans :
[Webmaster] Protéger les adresses email contre les bots VoirProtéger les adresses email contre les bots Vous êtes webmaster et pour une raison x, vous stockez l'adresse email de plusieurs membres de votre site . Ces adresses sont consultables dans leur profil (ex: forum, blog etc....). Or, aujourd'hui,...
Obtenir une adresse jetable VoirPlusieurs sites vous permettent de créer une adresse jetable (ou adresse email anti-spam), pour l'utiliser sur un site auquel vous ne faites pas confiance mais qui requiert une adresse e-mail. Qu'est-ce qu'une adresse jetable? Il s'agit d'une...

1

dje-dje, le 29 mai 2007 à 00:04:33
  • +1

Tu peux exporter tes CONTACTS au format CSV.

Les adresses que tu veux dans ton CSV doivent donc d'abord être ajoutées en tant que contact dans Outlook. a+

dje-dje

Répondre à dje-dje

2

Charles, le 29 mai 2007 à 09:23:45

Mais c'est pas ce que je veux...
Je souhaite une routine qui peut extraire les destinataires des mails d'un dossiers d'un coup.
Sans les passer par les contacts.
Merci
C.

Répondre à Charles

3

dje-dje, le 29 mai 2007 à 18:39:05

Dans ce cas tente ta chance dans le forum programmation en precisant ta version de Outlook (Express, 2000, XP, 2003) a+

dje-dje

Répondre à dje-dje

4

Sam, le 29 déc 2007 à 16:21:57

Bonjour,
Avez-vous trouvé la solution ?
Je recherche la même chose, à savoir, extraire les email contenu dans les emails ...

Merci

Répondre à Sam

5

Gentilgentil, le 9 jan 2008 à 18:12:46

Je souhaite extraire des adresses email que j'ai reçues pour les copier dans un fichier Excel mais les adresses disparaissent et ne restent que les noms.

Répondre à Gentilgentil

6

inpec, le 26 jun 2008 à 11:17:17

Par inpec, le jeudi 26 juin 2008 à 11:15:03
J'ai fait cette Sub GetEmail qui recherche tous les emails des personnes qui t'ont envoyés un email ou qui tu as envoyé un email dans le dossier et les sous dossiers en cours de sélection (testé sous oulook 2003)
Sub GetEmail()
Dim myOlApp As New Outlook.Application
Dim myNameSpace As Outlook.NameSpace
Dim mySelection As Selection
Dim myMailItemLog As Outlook.MailItem

Set myNameSpace = myOlApp.GetNamespace("MAPI")
ReDim Preserve emails(1)
emails(1) = ""
'Create a new email to use as log file
Set myMailItemLog = myOlApp.CreateItem(olMailItem)
myMailItemLog.Recipients.Add (myNameSpace.CurrentUser)
myMailItemLog.Subject = "Email from Body - " & Now()
myMailItemLog.BodyFormat = olFormatPlain
myMailItemLog.Body = Now() & " Starting..." & vbCrLf & vbCrLf

'Go thru all folders
GetEmailFromFolder myOlApp.ActiveExplorer.CurrentFolder

For Each Email In emails
myMailItemLog.Body = myMailItemLog.Body & vbCrLf & Email
Next
myMailItemLog.Body = myMailItemLog.Body & vbCrLf & Now() & " Done. Email addresses extracted: " & UBound(emails)
myMailItemLog.Display
MsgBox Now() & " Done. Email addresses extracted: " & UBound(emails), vbInformation, "Done"

End Sub
Sub GetEmailFromFolder(MyFolder)
Dim myMailItem As Outlook.MailItem
For Each myItem In MyFolder.Folders
GetEmailFromFolder myItem
Next
intMessageCount = UBound(emails)
For Each myItem In MyFolder.Items
If TypeName(myItem) = "MailItem" Then
Set myMailItem = myItem
If MyFolder = "Éléments envoyés" Then
strTemp = myMailItem.Recipients.Item(1).Address
Else
strTemp = myMailItem.SenderEmailAddress
End If
Find = UBound(Filter(emails, strTemp, True, vbTextCompare))
If Find = -1 Then
intMessageCount = intMessageCount + 1
ReDim Preserve emails(intMessageCount)
emails(intMessageCount) = strTemp
End If
End If
Next
End Sub

Répondre à inpec

7

Donnerjack, le 26 jun 2008 à 17:34:01

Hello,

J'ai essayé la macro et il me met "erreur de compilation : variable non définie" :
ReDim Preserve emails

Est-ce que vous pouvez m'aider ?
D'avance merci.

Frank

Répondre à Donnerjack

8

inpec, le 26 jun 2008 à 17:53:35
  • +1

Arg je l'ai oublié dans le copier coller
Dim emails() As String
Sub GetEmail()
Dim myOlApp As New Outlook.Application
Dim myNameSpace As Outlook.NameSpace
Dim mySelection As Selection
Dim myMailItemLog As Outlook.MailItem

Set myNameSpace = myOlApp.GetNamespace("MAPI")
ReDim Preserve emails(1)
emails(1) = ""
'Create a new email to use as log file
Set myMailItemLog = myOlApp.CreateItem(olMailItem)
myMailItemLog.Recipients.Add (myNameSpace.CurrentUser)
myMailItemLog.Subject = "Email from Body - " & Now()
myMailItemLog.BodyFormat = olFormatPlain
myMailItemLog.Body = Now() & " Starting..." & vbCrLf & vbCrLf

'Go thru all folders
GetEmailFromFolder myOlApp.ActiveExplorer.CurrentFolder

For Each Email In emails
myMailItemLog.Body = myMailItemLog.Body & vbCrLf & Email
Next
myMailItemLog.Body = myMailItemLog.Body & vbCrLf & Now() & " Done. Email addresses extracted: " & UBound(emails)
myMailItemLog.Display
MsgBox Now() & " Done. Email addresses extracted: " & UBound(emails), vbInformation, "Done"

End Sub
Sub GetEmailFromFolder(MyFolder)
Dim myMailItem As Outlook.MailItem
For Each myItem In MyFolder.Folders
GetEmailFromFolder myItem
Next
intMessageCount = UBound(emails)
For Each myItem In MyFolder.Items
If TypeName(myItem) = "MailItem" Then
Set myMailItem = myItem
If MyFolder = "Éléments envoyés" Then
strTemp = myMailItem.Recipients.Item(1).Address
Else
strTemp = myMailItem.SenderEmailAddress
End If
Find = UBound(Filter(emails, strTemp, True, vbTextCompare))
If Find = -1 Then
intMessageCount = intMessageCount + 1
ReDim Preserve emails(intMessageCount)
emails(intMessageCount) = strTemp
End If
End If
Next
End Sub

Répondre à inpec

9

Laurent, le 21 aoû 2008 à 10:34:39

Je suis ravi de trouver cette solution mais sans doute trop nul pour savoir la mettre ne oeuvre !
Bon : je crée un fichier excel, je fais "nouvelle macro", je met un nom quelconque, je fais modifier, je me trouve dans visual basic, je vais un copier coller du tout (de Dim emails...à End Sub). Je fais exécuter. Et là, il me dit à propos de "myOlApp As New Outlook.Application" : Erreur de compilation - type défini par l'utilisateur non défini

Bon... et moi je fais quoi ?
Merci de votre aimable compétence.

Répondre à Laurent

18

Serge, le 13 jan 2009 à 12:29:52

Bonjour et Bonne année à tous,
Merci beaucoup à Inpec pour cette petite macro qui m'a bien aidé !

Répondre à Serge

10

inpec, le 21 aoû 2008 à 11:03:53

C'est dans outlook qu'il faut créer la macro !!

Répondre à inpec

11

Laurent, le 21 aoû 2008 à 11:44:58

La honte !
Et merci, ça marche est c'est exactement ce que je voulais !

Répondre à Laurent

12

tomichill, le 20 nov 2008 à 15:49:10

Pouvez vous me dire où parte les emails? Je lance la macro (c ma premiere) il me demande d'accepter ou non, j'accepter et je ne sais pas ce qu'il fait pendant ce temp et surtout ou il me stock les adresses...

Répondre à tomichill

13

inpec, le 25 nov 2008 à 14:32:56

Il cree un mail avec la liste des emails

Répondre à inpec

14

F-MTHY, le 31 déc 2008 à 16:34:21

Bonjour,

Je viens de voir votre macro,et je dois dire que je la trouve particulièrement intéressante. Je souhaiterais savoir s'il est possible de la modifier afin de récupérer en même temps les noms de mes destinataires car je souhaite gérer une liste de désabonnement suite au retours des mails envoyés

Thierry

Répondre à F-MTHY

15

inpec, le 2 jan 2009 à 00:04:18

Et voila

Dim emails() As String
Sub GetEmail()
Dim myOlApp As New Outlook.Application
Dim myNameSpace As Outlook.NameSpace
Dim mySelection As Selection
Dim myMailItemLog As Outlook.MailItem

Set myNameSpace = myOlApp.GetNamespace("MAPI")
ReDim Preserve emails(1)
emails(1) = ""
'Create a new email to use as log file
Set myMailItemLog = myOlApp.CreateItem(olMailItem)
myMailItemLog.Recipients.Add (myNameSpace.CurrentUser)
myMailItemLog.Subject = "Email from Body - " & Now()
myMailItemLog.BodyFormat = olFormatPlain
myMailItemLog.Body = Now() & " Starting..." & vbCrLf & vbCrLf

'Go thru all folders
GetEmailFromFolder myOlApp.ActiveExplorer.CurrentFolder

For Each Email In emails
myMailItemLog.Body = myMailItemLog.Body & vbCrLf & Email
Next
myMailItemLog.Body = myMailItemLog.Body & vbCrLf & Now() & " Done. Email addresses extracted: " & UBound(emails)
myMailItemLog.Display
MsgBox Now() & " Done. Email addresses extracted: " & UBound(emails), vbInformation, "Done"

End Sub
Sub GetEmailFromFolder(MyFolder)
Dim myMailItem As Outlook.MailItem
For Each myItem In MyFolder.Folders
GetEmailFromFolder myItem
Next
intMessageCount = UBound(emails)
For Each myItem In MyFolder.Items
If TypeName(myItem) = "MailItem" Then
Set myMailItem = myItem
If MyFolder = "Éléments envoyés" Then
strTemp = myMailItem.Recipients.Item(1).Name + " [" + myMailItem.Recipients.Item(1).AddressEntry + "]"
Else
strTemp = myMailItem.SenderName + " [" + myMailItem.SenderEmailAddress + "]"
End If
Find = UBound(Filter(emails, strTemp, True, vbTextCompare))
If Find = -1 Then
intMessageCount = intMessageCount + 1
ReDim Preserve emails(intMessageCount)
emails(intMessageCount) = strTemp
End If
End If
Next
End Sub

Répondre à inpec

16

F-MTHY, le 2 jan 2009 à 10:22:15

Bonjour,

Tout d'abord permettez moi de vous souhaiter une bonne année 2009.

Ensuite, un très grand merci pour cette modification. C'est exactement ce que je voulais. Par contre, est il possible de renvoyer automatiquement à la ligne après chaque contact extrait, comme s'était le cas sur la première version ?

Encore merci pour votre aide.

Thierry

Répondre à F-MTHY

17

inpec, le 3 jan 2009 à 17:25:04

Je n'ai pas modifié cette partie, il y a toujours le retour à la ligne, je ne comprends pas ton problème !!

Répondre à inpec

19

sys, le 2 fév 2009 à 19:25:06
  • +1

Bonjour inpec et bonne année
je cherchais à faire la même opération sur mes mails avec OL2007 et j'ai une erreur de compil sur la seconde sub ReDim incorrect sur ReDim Preserve emails(intMessageCount)
j'ai beau cherché, je trouve pas d'où ça vient.
Une idée ????


Sub GetEmail()
Dim myOlApp As New Outlook.Application
Dim myNameSpace As Outlook.NameSpace
Dim mySelection As Selection
Dim myMailItemLog As Outlook.MailItem
Dim emails() As String
Set myNameSpace = myOlApp.GetNamespace("MAPI")
ReDim Preserve emails(1)
emails(1) = ""
'Create a new email to use as log file
Set myMailItemLog = myOlApp.CreateItem(olMailItem)
myMailItemLog.Recipients.Add (myNameSpace.CurrentUser)
myMailItemLog.Subject = "Email from Body - " & Now()
myMailItemLog.BodyFormat = olFormatPlain
myMailItemLog.Body = Now() & " Starting..." & vbCrLf & vbCrLf

'Go thru all folders
GetEmailFromFolder myOlApp.ActiveExplorer.CurrentFolder

For Each Email In emails
myMailItemLog.Body = myMailItemLog.Body & vbCrLf & Email
Next
myMailItemLog.Body = myMailItemLog.Body & vbCrLf & Now() & " Done. Email addresses extracted: " & UBound(emails)
myMailItemLog.Display
MsgBox Now() & " Done. Email addresses extracted: " & UBound(emails), vbInformation, "Done"

End Sub
Sub GetEmailFromFolder(MyFolder)
Dim myMailItem As Outlook.MailItem
For Each myItem In MyFolder.Folders
GetEmailFromFolder myItem
Next
intMessageCount = UBound(emails)
For Each myItem In MyFolder.Items
If TypeName(myItem) = "MailItem" Then
Set myMailItem = myItem
If MyFolder = "Éléments envoyés" Then
strTemp = myMailItem.Recipients.Item(1).Name + " [" + myMailItem.Recipients.Item(1).AddressEntry + "]"
Else
strTemp = myMailItem.SenderName + " [" + myMailItem.SenderEmailAddress + "]"
End If
Find = UBound(Filter(emails, strTemp, True, vbTextCompare))
If Find = -1 Then
intMessageCount = intMessageCount + 1
ReDim Preserve emails(intMessageCount)
emails(intMessageCount) = strTemp
End If
End If
Next
End Sub

Répondre à sys

20

inpec, le 3 fév 2009 à 11:50:27

ça marche aussi sous Outlook 2007 je viens de tester.
je crois que tu as oublié de mettre la déclaration au dessus de la routine GetEmail() :


Dim emails() As String

Sub GetEmail()
Dim myOlApp As New Outlook.Application
Dim myNameSpace As Outlook.NameSpace
...

Répondre à inpec

21

sys010, le 3 fév 2009 à 13:11:48

Génial inpec
ça marche
merci beaucoup

Répondre à sys010

22

tomichill, le 3 fév 2009 à 14:14:40

Bonjour Inpec,
Encore merci pour cette macro qui fonctionne super. Je voulais savoir si c'était normal que ça ne rapatrie pas les adresses emails qui sont en copie? Ça ne me donne que l'adresse des expéditeurs.
Merci,

Répondre à tomichill

26

me, le 20 mar 2009 à 18:55:20

Bonjour,

j'ai essayé votre macro mais à l'execution j'obtient: erreur d'execution 13 incompatibilité de type.
Le debogueur me renvoi à: Set myMailItem = myItem

merci pour votre assistance

me

Répondre à me

23

inpec, le 3 fév 2009 à 17:41:41
  • +3

Voila la version V2.0
Elle extrait dans Outlook la liste des emails (destinataire et émetteur) du dossier sélectionné
le problème du retour a la ligne dans Outlook 2007 est résolut

'Déclaration du tableau dynamique globale contenant la liste des emails
Dim emails() As String
'Extrait dans Outlook la liste des emails (destinataire et émetteur) du dossier sélectionné
'et crée un mail avec la liste des emails
Sub GetEmail()
Dim myOlApp As New Outlook.Application
Dim myNameSpace As Outlook.NameSpace
Dim mySelection As Selection
Dim myMailItemLog As Outlook.MailItem
Set myNameSpace = myOlApp.GetNamespace("MAPI")
' initialisation du tableau
ReDim Preserve emails(1)
emails(1) = ""
'Creation du mail de résultat
Set myMailItemLog = myOlApp.CreateItem(olMailItem)
myMailItemLog.Recipients.Add (myNameSpace.CurrentUser)
myMailItemLog.Subject = "Email from Body - " & Now()
myMailItemLog.BodyFormat = olFormatPlain
'On stocke les emails dans le tableau
GetEmailFromFolder myOlApp.ActiveExplorer.CurrentFolder
emails(1) = (UBound(emails) - 1) & " adresses"
'Conversion du tableau en chaine
myMailItemLog.Body = Join(emails, vbCrLf)
myMailItemLog.Display
MsgBox emails(1), vbInformation, "Done"

End Sub
'Explore les dossiers (fonction réentrante)
Sub GetEmailFromFolder(MyFolder)
Dim myItemRec, myItem As Object
Dim myMailItem As Outlook.MailItem
'Tous les dossiers
For Each myItem In MyFolder.Folders
GetEmailFromFolder myItem
Next
'Tous les mails
For Each myItem In MyFolder.Items
If TypeName(myItem) = "MailItem" Then
Set myMailItem = myItem
'Destinataire
For Each myItemRec In myMailItem.Recipients
addMail myItemRec.Name, myItemRec.Address
Next
'emetteur
addMail myMailItem.SenderName, myMailItem.SenderEmailAddress
End If
Next
End Sub
'Rajoute une entrée au tableau emails() si l'email n'existe pas déjà
Sub addMail(Nom, AdresseEmail)
Dim email As String
If Trim(AdresseEmail) <> "" And InStr(AdresseEmail, "@") Then
If Trim(Nom) = "" Then
Nom = AdresseEmail
End If
'Mise en forme du nom pour être bien reconnue par Outlook si on copie colle la liste dans le champs [À...]
Nom = Replace(Nom, ",", " ")
Nom = Replace(Nom, "@", "-")
Nom = Replace(Nom, ";", " ")
Nom = Replace(Nom, "'", "")
email = """" & Nom & """[" + AdresseEmail + "]"
'Pour excel on peu utiliser sous cette forme :
'email = """" & Nom & """" + vbTab + AdresseEmail
' ou
'email = "<A href=""mailto:" & AdresseEmail & """>" & Nom & "</A>"
'Vérification de l'unicité
Find = UBound(Filter(emails, email, True, vbTextCompare))
If Find = -1 Then
'On augmente la taille du tableau et on ajoute
ReDim Preserve emails(UBound(emails) + 1)
emails(UBound(emails)) = email
End If
End If
End Sub

Répondre à inpec

24

debonnesaffaires, le 10 fév 2009 à 15:56:47

Bonjour et bravo et merci pour votre aide à l'avance.
Voici mon problème:
j'ai fait un Emailing avec Word 2007. J'ai reçu des centaines de messages indiquant : message non remis.
Je ne peux pas ressaisir tout à la min pour renvoyer ces messages.
Les macros que vous avez fait ne marchent pas sur ces messages, car l'adresse mail à extraire est dans le corps du message.
Je souhaite avoir une liste Excel, car les adresses avec des ' ou des [ ] ne passeront pas, et si je dois tout recorriger à la main c'est pas possible.

Vous croyez que c'est possible tout ça ?

Exemple de message :

Certains des destinataires ou tous les destinataires n'ont pas reçu votre message.

Objet : Flash Info xxxxxx
Date : 10/02/2009 11:50

Impossible de contacter le(s) destinataire(s) suivant(s) :

xxxx.xxxx@xxxx.com le 10/02/2009 12:34
L'organisation à laquelle le message a été envoyé a indiqué qu'elle ne contenait pas ce compte de messagerie. Vérifiez l'adresse de messagerie du destinataire ou bien contactez le destinataire directement pour lui demander son adresse exacte.
<atlexc01.xxxxxx.local #5.1.1>

Répondre à debonnesaffaires

29

ioton12, le 29 mai 2009 à 18:15:22

Bonjour Merci à Inpec...

J'ai le même problème que "debonnesaffaires"...

S'il vous plai INPEC ! Sauve nous !!

Merci !

Répondre à ioton12

27

honnon, le 26 mar 2009 à 20:13:32

Merci pour cette macro, tu est vraiment très fort.

Alors je propose à mon tour une évolution de ta macro, à savoir, récupérer toutes les adresse email, même celle qui se trouvent dans le corps du message après un transfert tel que :


----- Message transféré ----
De : barbara mateus <tsibarjo@live.fr>
À : agnes terrier <bodymay@simicro.mg>; agnes terrier <agnesterrier@moov.mg>; amosse.stephanie@wanadoo.fr; André Géraud <andre.geraud@laposte.net>; Annelaure <annelaure@skisessions.com>; Bain <pbain@laposte.net>; beryl bain etc.......
etc...............

Encore bravo pour ta macro qui marche impécable, tu est trop fort

Répondre à honnon

43

Mattheiu, le 26 aoû 2009 à 23:10:50

Bonsoir,

J'ai beaucoup apprécié votre script pour récupérer les adresses email dans les courriers contenus dans un dossier d'Outlook. Merci encore.
Je voudrais savoir s'il serait possible non pas de récupérer les adresses des expéditeurs, mais les adresses contenus dans le corps de ces courriers.
En fait, j'ai besoin de récupérer les emails erronées dans les mails d'erreus que je reçois après l'envoi d'emailings.

Un grand merci d'avance, car je suis ignorant en scripts...

Matthieu

Répondre à Mattheiu

25

tomichill, le 10 fév 2009 à 18:26:16
  • +1

Inpec tu maitrise ton sujet. Un grand merci, la V2 est vraiment efficcasse. Juste un petit clean de crochets et de doublons et le tour est joué.
Encore merci.

Répondre à tomichill

28

bg62, le 25 avr 2009 à 08:45:53

Bonjour ... et sous Vista, pour un dossier spécifique dans WindowsMail ?
tu aurais qq chose à proposer ...
@+ b g
le 'www' est fait aussi pour communiquer, partager et échang­er, non ?

Répondre à bg62

30

bg62, le 29 mai 2009 à 18:26:26

Personne pour windows mail sous vista ??? le 'www' est fait aussi pour communiquer, partager et échang­er, non ?
merci d'avoir la politesse de répondre à ceux qui essaient d­e vous aider

Répondre à bg62

31

inpec, le 2 jun 2009 à 01:54:47

Une nouvelle version qui devrait convenir !

'Déclaration des tableaux dynamiques globaaux contenant la liste des emails
Dim emails(), noms() As String
'Extrait dans Outlook la liste des emails (destinataire, émetteur, corp) du dossier sélectionné
'et crée un mail avec la liste des emails
Sub GetEmail()
Dim myOlApp As New Outlook.Application
Set rep = myOlApp.ActiveExplorer.CurrentFolder
' initialisation du tableau
ReDim Preserve emails(1), noms(1)
emails(1) = ""
noms(1) = ""
'On stocke les emails dans le tableau
GetEmailFromFolder rep
If emails(1) <> "" Then
NomFichier = "email-" & rep & ".xls"
Close #1
Open NomFichier For Output As #1
For i = 1 To UBound(emails)
Print #1, AfficheEmail(noms(i), emails(i))
Next
Close #1
Call Shell("excel.exe " & """" & NomFichier & """")
'Conversion du tableau en chaine
MsgBox UBound(emails) & " emails trouvés dans " & rep, vbInformation, "Done"
Else
MsgBox "Pas d'email trouvé dans " & rep, vbInformation, "Done"
End If

End Sub
Function AfficheEmail(Nom, Email)
If Nom = "" Then
'Si pas de nom on utilise la partie gauche de l'email
Nom = Mid(Email, 1, InStr(Email, "@") - 1)
End If
'Mise en forme du nom pour être bien reconnue par Outlook si on copie colle la liste dans le champs [À...]
Nom = Replace(Nom, ",", " ")
Nom = Replace(Nom, "@", "-")
Nom = Replace(Nom, ";", " ")
Nom = Replace(Nom, "'", "")
Nom = Replace(Nom, "[", "")
Nom = Replace(Nom, "]", "")
Nom = Replace(Nom, "(", "")
Nom = Replace(Nom, ")", "")
'AfficheEmail = """" & Nom & """[" + Email + "]"
'AfficheEmail = "<A href=""mailto:" & Email & """>" & Nom & "</A>"
'AfficheEmail = """" & Nom & """<" + Email + ">"
AfficheEmail = Nom + vbTab + Email + vcrlf
End Function
'Explore les dossiers (fonction réentrante)
Sub GetEmailFromFolder(MyFolder)
Dim myItemRec, myItem As Object
Dim myMailItem As Outlook.MailItem
'Tous les dossiers
For Each myItem In MyFolder.Folders
GetEmailFromFolder myItem
Next
'Tous les mails
For Each myItem In MyFolder.Items
If TypeName(myItem) = "MailItem" Then
Set myMailItem = myItem
'Destinataire
For Each myItemRec In myMailItem.Recipients
addMail myItemRec.name, myItemRec.Address
Next
'Emetteur
addMail myMailItem.SenderName, myMailItem.SenderEmailAddress
'et dans le corp du mail
findMail myMailItem.Body
End If
Next
End Sub
'Rajoute une entrée au tableau emails() si l'email n'existe pas déjà
Sub addMail(Nom, Email)
Email = Trim(LCase(Email))
Nom = Trim(Nom)
If Email <> "" And InStr(Email, "@") > 0 And InStr(Email, ".") > 0 Then
'Vérification de l'unicité
Find = UBound(Filter(emails, Email, True, vbTextCompare))
If emails(1) = "" Then
emails(1) = Email
noms(1) = Nom
ElseIf Find = -1 Then
'On augmente la taille du tableau et on ajoute
ReDim Preserve emails(UBound(emails) + 1)
ReDim Preserve noms(UBound(noms) + 1)
emails(UBound(emails)) = Email
noms(UBound(noms)) = Nom
Else
'On préfère le plus grand si c'est pas une email
If Len(Nom) > Len(noms(Find)) And InStr(Nom, "@") = 0 Then
noms(Find) = Nom
End If
End If
End If
End Sub
Sub findMail(Body)
at = InStr(Body, "@")
Do While at > 0
d = at - 1
Do While carOk(Mid(Body, d, 1))
d = d - 1
If d = 0 Then
Exit Do
End If
Loop
f = at + 1
Do While carOk(Mid(Body, f, 1))
f = f + 1
If f = Len(Body) Then
Exit Do
End If
Loop
If d < at - 3 And f > at + 4 Then
addMail "body", Mid(Body, d + 1, f - d - 1)
End If
at = InStr(at + 1, Body, "@")
Loop
End Sub
Function carOk(c)
If c = "." Or c = "-" Or c = "_" Or (c >= "0" And c <= "9") Or (c >= "A" And c <= "Z") Or (c >= "a" And c <= "z") Then
carOk = True
Else
carOk = False
End If
End Function

Répondre à inpec

32

ioton12, le 2 jun 2009 à 12:32:59

Salut INPEC,

Merci pour ta réponse rapide !

J'ai un soucis, au lancement de la macro à cette ligne :
'Emetteur
addMail myMailItem.SenderName, myMailItem.SenderEmailAddress

Erreur d'éxécution '483' ...

Comment faire ?

Merci.

Bonne journée ;)

Répondre à ioton12

33

ioton12, le 29 jun 2009 à 10:53:26

Bonjour Inpec,

J'ai toujours le même problème avec Outlook 2002.

je lance la macro, le "débogueur se lance et me renvois à la ligne :

'Emetteur
addMail myMailItem.SenderName, myMailItem.SenderEmailAddress

Erreur d'éxécution '483' ...

j'ai beau chercher sur le net, mais aucune infos la dessus...

Merci pour ton aide...


++

Répondre à ioton12

34

inpec, le 1 jui 2009 à 01:52:56

Je crois que j'ai trouvé !

'Déclaration des tableaux dynamiques globaaux contenant la liste des emails
Dim emails(), noms() As String
'Extrait dans Outlook la liste des emails (destinataire, émetteur, corp) du dossier sélectionné
'et crée un mail avec la liste des emails
Sub GetEmail()
Dim myOlApp As New Outlook.Application
Set rep = myOlApp.ActiveExplorer.CurrentFolder
' initialisation du tableau
ReDim Preserve emails(1), noms(1)
emails(1) = ""
noms(1) = ""
'On stocke les emails dans le tableau
GetEmailFromFolder rep
If emails(1) <> "" Then
NomFichier = "email-" & rep & ".xls"
Close #1
Open NomFichier For Output As #1
For i = 1 To UBound(emails)
Print #1, AfficheEmail(noms(i), emails(i))
Next
Close #1
Call Shell("excel.exe " & """" & NomFichier & """")
'Conversion du tableau en chaine
MsgBox UBound(emails) & " emails trouvés dans " & rep, vbInformation, "Done"
Else
MsgBox "Pas d'email trouvé dans " & rep, vbInformation, "Done"
End If

End Sub
Function AfficheEmail(Nom, Email)
If Nom = "" Then
'Si pas de nom on utilise la partie gauche de l'email
Nom = Mid(Email, 1, InStr(Email, "@") - 1)
End If
'Mise en forme du nom pour être bien reconnue par Outlook si on copie colle la liste dans le champs [À...]
Nom = Replace(Nom, ",", " ")
Nom = Replace(Nom, "@", "-")
Nom = Replace(Nom, ";", " ")
Nom = Replace(Nom, "'", "")
Nom = Replace(Nom, "[", "")
Nom = Replace(Nom, "]", "")
Nom = Replace(Nom, "(", "")
Nom = Replace(Nom, ")", "")
'AfficheEmail = """" & Nom & """[" + Email + "]"
'AfficheEmail = "<A href=""mailto:" & Email & """>" & Nom & "</A>"
'AfficheEmail = """" & Nom & """<" + Email + ">"
AfficheEmail = Nom + vbTab + Email + vcrlf
End Function
'Explore les dossiers (fonction réentrante)
Sub GetEmailFromFolder(MyFolder)
Dim myItemRec, myItem As Object
Dim myMailItem As Outlook.MailItem
'Tous les dossiers
For Each myItem In MyFolder.Folders
GetEmailFromFolder myItem
Next
i = 0
'Tous les mails
On Error Resume Next
For Each myItem In MyFolder.Items
If TypeName(myItem) = "MailItem" Then
i = i + 1
If i = 75 And MyFolder = "ovh" Then
i = i
End If
Set myMailItem = myItem
'Destinataire
For Each myItemRec In myMailItem.Recipients
addMail myItemRec.name, myItemRec.Address
Next
'Emetteur
addMail myMailItem.SenderName, myMailItem.SenderEmailAddress
'et dans le corp du mail
findMail myMailItem.Body
End If
Next
End Sub
'Rajoute une entrée au tableau emails() si l'email n'existe pas déjà
Sub addMail(Nom, Email)
Email = Trim(LCase(Email))
Nom = Trim(Nom)
If Email <> "" And InStr(Email, "@") > 0 And InStr(Email, ".") > 0 Then
'Vérification de l'unicité
Find = UBound(Filter(emails, Email, True, vbTextCompare))
If emails(1) = "" Then
emails(1) = Email
noms(1) = Nom
ElseIf Find = -1 Then
'On augmente la taille du tableau et on ajoute
ReDim Preserve emails(UBound(emails) + 1)
ReDim Preserve noms(UBound(noms) + 1)
emails(UBound(emails)) = Email
noms(UBound(noms)) = Nom
Else
'On préfère le plus grand si c'est pas une email
If Len(Nom) > Len(noms(Find)) And InStr(Nom, "@") = 0 Then
noms(Find) = Nom
End If
End If
End If
End Sub
Sub findMail(Body)
at = InStr(Body, "@")
Do While at > 0
d = at - 1
Do While carOk(Mid(Body, d, 1))
d = d - 1
If d = 0 Then
Exit Do
End If
Loop
f = at + 1
Do While carOk(Mid(Body, f, 1))
f = f + 1
If f = Len(Body) Then
Exit Do
End If
Loop
If d < at - 3 And f > at + 4 Then
addMail "body", Mid(Body, d + 1, f - d - 1)
End If
at = InStr(at + 1, Body, "@")
Loop
End Sub
Function carOk(c)
If c = "." Or c = "-" Or c = "_" Or (c >= "0" And c <= "9") Or (c >= "A" And c <= "Z") Or (c >= "a" And c <= "z") Then
carOk = True
Else
carOk = False
End If
End Function

Répondre à inpec

35

inpec, le 1 jui 2009 à 02:01:16
  • +1

'Déclaration des tableaux dynamiques globaaux contenant la liste des emails
Dim emails(), noms() As String
'Extrait dans Outlook la liste des emails (destinataire, émetteur, corp) du dossier sélectionné
'et crée un mail avec la liste des emails
Sub GetEmail()
Dim myOlApp As New Outlook.Application
Set rep = myOlApp.ActiveExplorer.CurrentFolder
' initialisation du tableau
ReDim Preserve emails(1), noms(1)
emails(1) = ""
noms(1) = ""
'On stocke les emails dans le tableau
GetEmailFromFolder rep
If emails(1) <> "" Then
NomFichier = "email-" & rep & ".xls"
Close #1
Open NomFichier For Output As #1
For i = 1 To UBound(emails)
Print #1, AfficheEmail(noms(i), emails(i))
Next
Close #1
Call Shell("excel.exe " & """" & NomFichier & """")
'Conversion du tableau en chaine
MsgBox UBound(emails) & " emails trouvés dans " & rep, vbInformation, "Done"
Else
MsgBox "Pas d'email trouvé dans " & rep, vbInformation, "Done"
End If

End Sub
Function AfficheEmail(Nom, Email)
If Nom = "" Then
'Si pas de nom on utilise la partie gauche de l'email
Nom = Mid(Email, 1, InStr(Email, "@") - 1)
End If
'Mise en forme du nom pour être bien reconnue par Outlook si on copie colle la liste dans le champs [À...]
Nom = Replace(Nom, ",", " ")
Nom = Replace(Nom, "@", "-")
Nom = Replace(Nom, ";", " ")
Nom = Replace(Nom, "'", "")
Nom = Replace(Nom, "[", "")
Nom = Replace(Nom, "]", "")
Nom = Replace(Nom, "(", "")
Nom = Replace(Nom, ")", "")
'AfficheEmail = """" & Nom & """[" + Email + "]"
'AfficheEmail = "<A href=""mailto:" & Email & """>" & Nom & "</A>"
'AfficheEmail = """" & Nom & """<" + Email + ">"
AfficheEmail = Nom + vbTab + Email + vcrlf
End Function
'Explore les dossiers (fonction réentrante)
Sub GetEmailFromFolder(MyFolder)
Dim myItemRec, myItem As Object
Dim myMailItem As Outlook.MailItem
'Tous les dossiers
For Each myItem In MyFolder.Folders
GetEmailFromFolder myItem
Next
'Tous les mails
On Error Resume Next
For Each myItem In MyFolder.Items
If TypeName(myItem) = "MailItem" Then
Set myMailItem = myItem
'Destinataire
For Each myItemRec In myMailItem.Recipients
addMail myItemRec.name, myItemRec.Address
Next
'Emetteur
addMail myMailItem.SenderName, myMailItem.SenderEmailAddress
'et dans le corp du mail
findMail myMailItem.Body
End If
Next
End Sub
'Rajoute une entrée au tableau emails() si l'email n'existe pas déjà
Sub addMail(Nom, Email)
Email = Trim(LCase(Email))
Nom = Trim(Nom)
If Email <> "" And InStr(Email, "@") > 0 And InStr(Email, ".") > 0 Then
'Vérification de l'unicité
Find = UBound(Filter(emails, Email, True, vbTextCompare))
If emails(1) = "" Then
emails(1) = Email
noms(1) = Nom
ElseIf Find = -1 Then
'On augmente la taille du tableau et on ajoute
ReDim Preserve emails(UBound(emails) + 1)
ReDim Preserve noms(UBound(noms) + 1)
emails(UBound(emails)) = Email
noms(UBound(noms)) = Nom
Else
'On préfère le plus grand si c'est pas une email
If Len(Nom) > Len(noms(Find)) And InStr(Nom, "@") = 0 Then
noms(Find) = Nom
End If
End If
End If
End Sub
Sub findMail(Body)
at = InStr(Body, "@")
Do While at > 0
d = at - 1
Do While carOk(Mid(Body, d, 1))
d = d - 1
If d = 0 Then
Exit Do
End If
Loop
f = at + 1
Do While carOk(Mid(Body, f, 1))
f = f + 1
If f = Len(Body) Then
Exit Do
End If
Loop
If d < at - 3 And f > at + 4 Then
addMail "body", Mid(Body, d + 1, f - d - 1)
End If
at = InStr(at + 1, Body, "@")
Loop
End Sub
Function carOk(c)
If c = "." Or c = "-" Or c = "_" Or (c >= "0" And c <= "9") Or (c >= "A" And c <= "Z") Or (c >= "a" And c <= "z") Then
carOk = True
Else
carOk = False
End If
End Function

Répondre à inpec

36

ioton12, le 1 jui 2009 à 09:50:26

Salut INPEC,

Comment vas-tu ? Pas trop fatigué ;) !

Alors je viens à l'instant de tester la macro, résultat il me manque toujours les emails des émetteurs...par contre je ne rencontre pas de message d'erreur, j'ai récupère bien les emails du destinataire et dans le corps des emails...Malheureusement pas l'émetteur...

snif...:'(

Je compte sur toi Dieu du VBA...

PS : Ya t-il un rapport avec ma config ?? (Outlook 2002 sp2 / IMAP + XP)

Répondre à ioton12

37

inpec, le 2 jui 2009 à 00:45:06

J'ai essayer avec imap, pas de pb
je n'ai pas 2002 peut être ?
si non dans le debugeur clic droit sur myMailItem fait ajouter espion ... puis ok , il doit y avoir un plus regarde si SenderEmailAddress et SenderName existe ?

Répondre à inpec

38

ioton12, le 2 jui 2009 à 09:51:02

Salut Inpec,

J'ai fais comme tu m'as dit....(ajouter un espion sur myMailItem)...

Je trouve bien SenderName, mais pas SenderEmailAddress ....

Si je met un espion sur myMailItem.SenderName, il me trouve bien le "nom" de l'émetteur, mais si je met un espion sur myMailItem.SenderEmailAddress, l'espion me dit : ''Propriété ou méthode non gérér par cet objet".

Voila !

Encore mille merci !

Répondre à ioton12

39

inpec, le 2 jui 2009 à 12:06:37

Trouve le nom de la propriete qui le fait bien (avec l'email)

Répondre à inpec

42

ioton12, le 2 jui 2009 à 16:12:10
  • +1

INPEC,

j'ai enfin trouvé, j'ai remplacer "myMailItem.SenderName", myMailItem.SenderEmailAddress par "findMail myMailItem.SenderName".

Merci mille fois pour ton aide !!

A bientot, pour dautre aventures VBA !

'Déclaration des tableaux dynamiques globaaux contenant la liste des emails
Dim emails(), noms() As String
'Extrait dans Outlook la liste des emails (destinataire, émetteur, corp) du dossier sélectionné
'et crée un mail avec la liste des emails

Sub GetEmail()
Dim myOlApp As New Outlook.Application
Set rep = myOlApp.ActiveExplorer.CurrentFolder
' initialisation du tableau
ReDim Preserve emails(1), noms(1)
emails(1) = ""
noms(1) = ""
'On stocke les emails dans le tableau
GetEmailFromFolder rep
If emails(1) <> "" Then
NomFichier = "email-" & rep & ".xls"
Close #1
Open NomFichier For Output As #1
For i = 1 To UBound(emails)
Print #1, AfficheEmail(noms(i), emails(i))
Next
Close #1
Call Shell("excel.exe " & """" & NomFichier & """")
'Conversion du tableau en chaine
MsgBox UBound(emails) & " emails trouvés dans " & rep, vbInformation, "Done"
Else
MsgBox "Pas d'email trouvé dans " & rep, vbInformation, "Done"
End If

End Sub
Function AfficheEmail(Nom, Email)
If Nom = "" Then
'Si pas de nom on utilise la partie gauche de l'email
Nom = Mid(Email, 1, InStr(Email, "@") - 1)
End If
'Mise en forme du nom pour être bien reconnue par Outlook si on copie colle la liste dans le champs [À...]
Nom = Replace(Nom, ",", " ")
Nom = Replace(Nom, "@", "-")
Nom = Replace(Nom, ";", " ")
Nom = Replace(Nom, "'", "")
Nom = Replace(Nom, "[", "")
Nom = Replace(Nom, "]", "")
Nom = Replace(Nom, "(", "")
Nom = Replace(Nom, ")", "")
'AfficheEmail = """" & Nom & """[" + Email + "]"
'AfficheEmail = "<A href=""mailto:" & Email & """>" & Nom & "</A>"
'AfficheEmail = """" & Nom & """<" + Email + ">"
AfficheEmail = Nom + vbTab + Email + vcrlf
End Function
'Explore les dossiers (fonction réentrante)
Sub GetEmailFromFolder(MyFolder)
Dim myItemRec, myItem As Object
Dim myMailItem As Outlook.MailItem
'Tous les dossiers
For Each myItem In MyFolder.Folders
GetEmailFromFolder myItem
Next
'Tous les mails
On Error Resume Next
For Each myItem In MyFolder.Items
If TypeName(myItem) = "MailItem" Then
Set myMailItem = myItem
'Destinataire
For Each myItemRec In myMailItem.Recipients
addMail myItemRec.Name, myItemRec.Address
Next
'Emetteur
findMail myMailItem.SenderName
'et dans le corp du mail
findMail myMailItem.Body
End If
Next
End Sub
'Rajoute une entrée au tableau emails() si l'email n'existe pas déjà
Sub addMail(Nom, Email)
Email = Trim(LCase(Email))
Nom = Trim(Nom)
If Email <> "" And InStr(Email, "@") > 0 And InStr(Email, ".") > 0 Then
'Vérification de l'unicité
Find = UBound(Filter(emails, Email, True, vbTextCompare))
If emails(1) = "" Then
emails(1) = Email
noms(1) = Nom
ElseIf Find = -1 Then
'On augmente la taille du tableau et on ajoute
ReDim Preserve emails(UBound(emails) + 1)
ReDim Preserve noms(UBound(noms) + 1)
emails(UBound(emails)) = Email
noms(UBound(noms)) = Nom
Else
'On préfère le plus grand si c'est pas une email
If Len(Nom) > Len(noms(Find)) And InStr(Nom, "@") = 0 Then
noms(Find) = Nom
End If
End If
End If
End Sub
Sub findMail(Body)
at = InStr(Body, "@")
Do While at > 0
d = at - 1
Do While carOk(Mid(Body, d, 1))
d = d - 1
If d = 0 Then
Exit Do
End If
Loop
f = at + 1
Do While carOk(Mid(Body, f, 1))
f = f + 1
If f = Len(Body) Then
Exit Do
End If
Loop
If d < at - 3 And f > at + 4 Then
addMail "body", Mid(Body, d + 1, f - d - 1)
End If
at = InStr(at + 1, Body, "@")
Loop
End Sub
Function carOk(c)
If c = "." Or c = "-" Or c = "_" Or (c >= "0" And c <= "9") Or (c >= "A" And c <= "Z") Or (c >= "a" And c <= "z") Then
carOk = True
Else
carOk = False
End If
End Function

Répondre à ioton12

57

alysse, le 23 sep 2009 à 11:01:10

Bonjour inpec

merci pour tous ces codes, c est bien la 1ere fois ou j 'arrive à faire fonctionner qq chose.
J' ai utilisé un des premiers codes pour extraire les adresses emails dans la creation d'un nouveau mail, ca marche nickel, mais serait il possible en gardant ce code d'inclure les adresses emails des destinataires qui etaient en copie ?

ca serait vraiment super si ca pouvait marcher,

merci pour ton aide

Répondre à alysse

64

claudio, le 14 oct 2009 à 16:03:43

Bonjour,

Votre proposition est généilae

Cependant , je tente de l'uutiliser dans un dossier de plus de 4000 email (des retours d'un emailing) et impossible de récupérer les adresses email contenues dans les messages avec expéditeur désigné

Que faire ?

Répondre à claudio

40

ioton12, le 2 jui 2009 à 15:14:38
  • +2

Je suis dsl Inpec, mais je pige rien au VBA !!

Explique moi STP !

Répondre à ioton12
Collection CommentÇaMarche.net