IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

récupérer les données d'outlook avec VBA excel


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 4
    Points
    4
    Par défaut récupérer les données d'outlook avec VBA excel
    Bonjour,

    Mon problème est le suivant : au fait, je dois récupérer dans un fichier excel les données des mails d'outlook (expéditeur, destinataires, object, corps du mail, nom de la pièce jointe) et cela dans tous les répertoires et sous répertoires d'outlook (j'ai 6 répertoires dans lesquels il y a 5 niveaux de sous répertoires). n'ayant jamais travaillé sur outlook via vba excel, je cherche depuis le matin sur internet et je ne trouve pas mon bonheur .

    L'histoire des sous répertoires est très importante, car l'objectif est de pouvoir parcourir et récupérer les données dans tous les dossiers d'outlook ...

    Merci d'avance pour votre aide docteurs

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonsoir,

    Un début de piste pour une recherche dans :
    - dossier personnel nommé "Dossier 2011"
    - un sous-dossier nommé "Ma Recherche"

    Malheureusement j'ai une erreur sur la boucle des mails For Each email In AppFolder.Items qui m'oblige à utiliser
    un très laid On Error Resume Next.
    Et par conséquent la liste des mails doit être incomplète ...

    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
    Option Explicit
     
    Dim ri As Long
     
    Private Sub CommandButton1_Click()
     
      ri = 2
     
      Dim app As Outlook.Application
      Dim AppNs As Outlook.Namespace
      Dim AppFolder As Outlook.MAPIFolder  '  MAPIFolder
     
      Set app = New Outlook.Application
      Set AppNs = app.GetNamespace("MAPI")
      Set AppFolder = AppNs.Folders.Item("Dossier 2011") .Folders.Item("Ma Recherche")
     
      Call ProcessFolder(AppFolder)
     
     Set AppFolder = Nothing
      Set AppNs = Nothing
     ' app.Quit
      Set app = Nothing
    End Sub
     
    Sub ProcessFolder(AppFolder As Outlook.MAPIFolder)
     
        Dim email As Outlook.MailItem
     
        Dim AppSubFolder As Outlook.Folders 'MAPIFolder
     
        For Each AppSubFolder In AppFolder.Folders
            Cells(ri, 1).Value = AppSubFolder.Name
            ri = ri + 1
            ProcessFolder AppSubFolder
        Next AppSubFolder
     
        On Error Resume Next
        For Each email In AppFolder.Items
            Cells(ri, 2).Value = email.ReceivedTime
            Cells(ri, 3).Value = email.SenderEmailAddress
            Cells(ri, 4).Value = email.Subject
            Cells(ri, 5).Value = email.CC
            Cells(ri, 6).Value = email.Body
     
            If email.Attachments.Count > 0 Then
                Dim ci As Integer
                ci = 1
                Dim emailAttachement As Outlook.Attachment
                For Each emailAttachement In email.Attachments
                    Cells(ri, 6 + ci).Value = emailAttachement.Filename
                    ci = ci + 1
                Next emailAttachement
            End If
     
            ri = ri + 1
        Next
    End Sub

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par BlueMonkey Voir le message
    Malheureusement j'ai une erreur sur la boucle des mails For Each email In AppFolder.Items qui m'oblige à utiliser
    un très laid On Error Resume Next.
    Et par conséquent la liste des mails doit être incomplète ...
    Bonjour,

    La raison en est que tu n'as pas que des mails dans ce dossier.
    Par exemple, des "Meeting request"...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonjour,

    Effectivement, en reprenant le code en prenant en compte le qu'il n'y avait pas que des mails dans le dossier,
    on peut retirer le On Error Resume Next.

    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
    Option Explicit
     
    Dim ri As Long
     
    Private Sub CommandButton1_Click()
     
      ri = 2
     
      Dim app As Outlook.Application
      Dim AppNs As Outlook.Namespace
      Dim AppFolder As Outlook.MAPIFolder  '  MAPIFolder
     
      Set app = New Outlook.Application
      Set AppNs = app.GetNamespace("MAPI")
      Set AppFolder = AppNs.Folders.Item("dossier 2012") '.Folders.Item("Ma Recherche")
     
      Call ProcessFolder(AppFolder)
     
     Set AppFolder = Nothing
      Set AppNs = Nothing
     ' app.Quit
      Set app = Nothing
    End Sub
     
    Sub ProcessFolder(AppFolder As Outlook.MAPIFolder)
     
        Dim email As Outlook.MailItem
        Dim obj As Object
     
        Dim AppSubFolder As Outlook.MAPIFolder 'Outlook.Folders
     
        For Each AppSubFolder In AppFolder.Folders
            Cells(ri, 1).Value = AppSubFolder.Name
            ri = ri + 1
            ProcessFolder AppSubFolder
        Next AppSubFolder
     
       ' On Error Resume Next
        For Each obj In AppFolder.Items
            If TypeOf obj Is Outlook.MailItem Then
               Set email = obj
               Cells(ri, 2).Value = email.ReceivedTime
               Cells(ri, 3).Value = email.SenderEmailAddress
               Cells(ri, 4).Value = email.Subject
               Cells(ri, 5).Value = email.CC
               Cells(ri, 6).Value = email.Body
     
               If email.Attachments.Count > 0 Then
                   Dim ci As Integer
                   ci = 1
                   Dim emailAttachement As Outlook.Attachment
                   For Each emailAttachement In email.Attachments
                       Cells(ri, 6 + ci).Value = emailAttachement.Filename
                       ci = ci + 1
                   Next emailAttachement
               End If
     
               ri = ri + 1
            End If
        Next
    End Sub

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour votre réponse. Par contre j'ai 2 questions :
    1/ à quoi correspondent les 2 dossiers : "dossier 2012" et "Ma recherche" ?
    2/ est-ce que le code lit systematiquement dans tous les dossiers et sous dossiers (il y a 5 niveaux de sous dossiers) ?

    Merci beaucoup

    Malco

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonjour,

    1/ à quoi correspondent les 2 dossiers : "dossier 2012" et "Ma recherche" ?
    Le dossier 2012 est le nom du fichier personnel contenant les emails.
    "Ma recherche" est un sous-dossier de ce dossier personnel.

    2/ Est-ce que le code lit systematiquement dans tous les dossiers et sous dossiers (il y a 5 niveaux de sous dossiers) ?
    Oui. ProcessFolder est une fonction récursive.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub ProcessFolder(AppFolder As Outlook.MAPIFolder)
       '... 
        For Each AppSubFolder In AppFolder.Folders
            '...
            ProcessFolder AppSubFolder
            '...
        Next AppSubFolder

Discussions similaires

  1. [XL-2010] envoi mail outlook avec vba excel
    Par fazpedro dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 30/09/2014, 10h27
  2. Récupérer les données en Ajax avec jQuery
    Par Rony Rauzduel dans le forum jQuery
    Réponses: 12
    Dernier message: 28/02/2013, 13h59
  3. [XL-2007] envoi mail outlook avec vba excel
    Par yaco32 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/01/2013, 15h57
  4. envoi mail outlook avec vba excel
    Par momolamoto dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/09/2010, 10h45
  5. Réponses: 2
    Dernier message: 08/05/2009, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo