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ération de mail outlook via Excel [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut récupération de mail outlook via Excel
    Bonjour,


    Afin de pouvoir récupérer des informations de outlook sur une boite mail, j'ai trouvé cette fonction :

    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
     
    Public Sub test()
     
    Dim OutlookApp As Object
    Dim O_NomDomaine As Object
    Dim O_Dossier As Object
    Dim O_MailItem As Object
    Dim OutlookApp_Cree As Boolean
     
    Application.ScreenUpdating = False
     
    On Error Resume Next
    Set OutlookApp = GetObject(, "Outlook.Application")
        If OutlookApp Is Nothing Then
            Set OutlookApp = CreateObject("Outlook.Application")
                OutlookApp_Cree = True
            If OutlookApp Is Nothing Then
                MsgBox "Impossible d'ouvrir MS Outlook.", _
                        vbExclamation, "Erreur d'ouverture"
                Exit Sub
            End If
        End If
     
    On Error GoTo 0
     
    Set O_NomDomaine = OutlookApp.GetNamespace("MAPI")
    Set O_Dossier = O_NomDomaine.GetDefaultFolder(6)
     
     
     
    For Each O_MailItem In O_Dossier.Items
        MsgBox O_MailItem.Object
        MsgBox O_MailItem.Email1Address
        MsgBox O_MailItem.Categories
        MsgBox O_MailItem.CreationTime
     
    Next
     
    If OutlookApp_Cree Then OutlookApp.Quit
     
    Application.ScreenUpdating = True
     
    Set O_Dossier = Nothing
    Set O_NomDomaine = Nothing
    Set OutlookApp = Nothing
     
    End Sub
    Malheureusement, celle-ci plante sur la ligne 32-35 (tous les msgbox en fait).

    J'ai cherché sur les FAQ et autre, mais je ne trouve pas l’information que je veux.

    Pour vous expliquer un peu mon souci, j'ai besoin de récupérer des informations sur des mails dans une boite bien précise : l'expéditeur du message, l'objet, la date de réception et la catégorie.
    Pour le moment, j'essaye de tester sur ma boite mail voir dans un premier temps si ça fonctionne, mais ce n'est malheureusement pas le cas.

    Par ailleurs, mon but final et de pouvoir récupérer des mails reçus sur une boite publique sur un intervalle de date donné. Si quelqu'un à une piste pour pouvoir pointer sur une BAL spécifique, je suis preneur ou si vous pouvez me guider pour que j'arrive à mes fins

    je vous remercie pour votre lecture, et votre aide
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Bon en fait j'ai trouvé. j'ai trouvé une autre macro :

    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
    Public Sub test()
     
        Dim olApp As Outlook.Application
        Dim dossierContacts As Outlook.MAPIFolder
        Dim Contact As Outlook.ContactItem
        Dim i As Integer, j As Integer
     
        Set olApp = New Outlook.Application
        Set BoiteR = olApp.GetNamespace("MAPI").GetDefaultFolder(6)
     
    For Each O_MailItem In BoiteR.Items
        MsgBox O_MailItem.Subject
        MsgBox O_MailItem.SenderName
        MsgBox O_MailItem.Categories
        MsgBox O_MailItem.CreationTime
        MsgBox O_MailItem.SenderEmailAddress
     
    Next
     
    If OutlookApp_Cree Then OutlookApp.Quit
     
    Application.ScreenUpdating = True
     
    Set O_Dossier = Nothing
    Set O_NomDomaine = Nothing
    Set OutlookApp = Nothing
     
    End Sub
    Par contre, avec la commande :

    ça pointe sur ma boite de réception : Comment puis-je faire pour la faire pointer sur une boite générique,ou une boite de dossiers publics de Outlook ?
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Pour la première tu ne peux pas la messageboxer... C'est un objet...
    La deuxième propriété je ne la connais pas.

    Remplace ces deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MsgBox O_MailItem.Object
        MsgBox O_MailItem.Email1Address
    par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MsgBox O_MailItem.subject
        MsgBox O_MailItem.from

  4. #4
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Ça marche effectivement mieux avec Subject Thanks

    Maintenant j'arrive à récupérer les infos de ma boite de réception. Maintenant, et comme je l'ai dit plus haut, je voudrait récupérer d'une boite générique, que j'ai sur mon poste. Pour cela, j'ai écrit ça (bouts de code récupérés ça et là) :

    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
    Public Sub test()
     Dim boiteR As Outlook.Namespace
        Dim olApp As Outlook.Application
        Dim objNomBoite As Recipient
        Dim objDossier As Outlook.MAPIFolder
        Set olApp = New Outlook.Application
        Set boiteR = olApp.GetNamespace("MAPI")
        Set objNomBoite = boiteR.CreateRecipient("nom_boite_commune")
        Set objDossier = Application.Session.GetSharedDefaultFolder(objNomBoite, olFolderInbox)
     
     
    For Each O_MailItem In boiteR.Items
        MsgBox O_MailItem.Subject
        MsgBox O_MailItem.SenderName
        MsgBox O_MailItem.Categories
        MsgBox O_MailItem.CreationTime
        MsgBox O_MailItem.SenderEmailAddress
     
    Next
     
    If OutlookApp_Cree Then OutlookApp.Quit
     
    Application.ScreenUpdating = True
     
    Set O_Dossier = Nothing
    Set O_NomDomaine = Nothing
    Set OutlookApp = Nothing
     
    End Sub
    Malheureusement, ça plante sur la ligne 9, me disant "propriété ou méthode non géré par cet objet".

    Je ne comprend pas, car en vérifiant les propriétés de la fonction, ça devrait marcher, car je veux effectivement récupérer les mails de ma boite commune, de la boite de réception.

    Si quelqu'un à une idée, de toute façon je cherche de mon côté
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Je ne comprends pas bien ta question...

    Moi j'utilise cette fonction que j'avais pompé quelque part il y a quelques temps

    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
    Public Function GetFolder(strFolderPath As String) As Object 'MAPIFolder
    ' strFolderPath needs to be something like
    '   "Public Folders\All Public Folders\Company\Sales" or
    '   "Personal Folders\Inbox\My Folder" ''
     
    Dim apOL As Object 'Outlook.Application '
    Dim objNS As Object 'Outlook.NameSpace '
    Dim colFolders As Object 'Outlook.Folders '
    Dim objFolder As Object 'Outlook.MAPIFolder '
    Dim arrFolders() As String
    Dim I As Long
     
    On Error GoTo TrapError
     
        strFolderPath = Replace(strFolderPath, "/", "\") 
        arrFolders() = Split(strFolderPath, "\")
     
        Set apOL = CreateObject("Outlook.Application")
        Set objNS = apOL.GetNamespace("MAPI")
     
     
        On Error Resume Next
     
        Set objFolder = objNS.Folders.Item(arrFolders(0))
     
        If Not objFolder Is Nothing Then
            For I = 1 To UBound(arrFolders)
                Set colFolders = objFolder.Folders
                Set objFolder = Nothing
                Set objFolder = colFolders.Item(arrFolders(I))
     
                If objFolder Is Nothing Then
                    Exit For
                End If
            Next
        End If
     
        Set GetFolder = objFolder
        Set colFolders = Nothing
        Set objNS = Nothing
        Set apOL = Nothing
     
     
    End Function

  6. #6
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Citation Envoyé par EngueEngue Voir le message
    Je ne comprends pas bien ta question...

    Moi j'utilise cette fonction que j'avais pompé quelque part il y a quelques temps
    Intéressante. Si je comprend bien ta fonction prend tous les dossiers présents dans la boite que tu indiques dans ton argument de la fonction (strFolderPath) ?

    Pourrais-tu me donner un exemple de son utilisation ?
    Comment tu fais par la suite pour récupérer par exemple dans la boite de réception le nom de l'expéditeur, via ta fonction ?
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  7. #7
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Non, elle récpère un objet MAPIFolder à partir d'un chemin d'accès.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objDossier = GetFolder("Personal Folders\Inbox\My Folder\nom_boite_commune")

  8. #8
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    J'ai trouvé A force de prendre des bout de code un peu partout, on s'en mélange les pinceaux

    Donc voici le code (c'était une erreur sur les variables en fait) :

    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
    Public Sub test()
     Dim boiteR As Outlook.Namespace
        Dim olApp As Outlook.Application
        Dim objNomBoite As Recipient
        Dim objDossier As Outlook.MAPIFolder
        Set olApp = New Outlook.Application
        Set boiteR = olApp.GetNamespace("MAPI")
        Set objNomBoite = boiteR.CreateRecipient("nom_boite_commune")
        Set objDossier = olApp.Session.GetSharedDefaultFolder(objNomBoite, olFolderInbox)
     
     
    For Each O_MailItem In boiteR.Items
        MsgBox O_MailItem.Subject
        MsgBox O_MailItem.SenderName
        MsgBox O_MailItem.Categories
        MsgBox O_MailItem.CreationTime
        MsgBox O_MailItem.SenderEmailAddress
     
    Next
     
    If OutlookApp_Cree Then OutlookApp.Quit
     
    Application.ScreenUpdating = True
     
    Set O_Dossier = Nothing
    Set O_NomDomaine = Nothing
    Set OutlookApp = Nothing
     
    End Sub
    Et là, je boucle bien sur mon dossier commun

    Désolé pour le dérangement et merci à EngueEngue
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. envoie de mail automatique sur outlook via Excel 2003
    Par shakelife dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/12/2011, 09h04
  2. Réponses: 4
    Dernier message: 28/04/2011, 16h50
  3. [XL-2003] Envoi mail Outlook via VBA Excel erreur
    Par altra dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/08/2009, 17h50
  4. Outlook via excel vba
    Par joss56 dans le forum Outlook
    Réponses: 3
    Dernier message: 09/01/2008, 23h03
  5. Outlook via Excel
    Par mennix dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/12/2007, 06h57

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