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 :

Extraction pièce jointe Outlook en fct Objet du mail via Excel 2003 [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 59
    Points : 40
    Points
    40
    Par défaut Extraction pièce jointe Outlook en fct Objet du mail via Excel 2003
    Bonjour à tous,

    Je suis sous Outlook 2003.
    J'aimerais via une macro sur Excel 2003 :
    - pointer vers OutLook
    - Puis balayer les mails de la boite de reception
    - Si l'objet du mail = "TEST" et que le mail contient une pièce jointe,
    - Alors enregistrer la pièce jointe dans le dossier C:\...

    Pour eviter les problèmes de version Outlook, j'ai commencé à utiliser des déclarations tardives :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Extraire()
    Dim OlApp As Object
    Dim OLmail As Object
    Dim pceJointe As Object
    Dim x As Integer
    Dim y As Integer
     
    Set OlApp = CreateObject("Outlook.Application")
    Set OLmail = OlApp.CreateItem(0)
    Set pceJointe = ILmail.Attachment
    Et ensuite j'ai trouvé ceci :
    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
    If Inbox.DefaultItemType = 0 Then
            For Each OLmail In Inbox.Items
                'If Not OLmail.Attachments.Count = 0 Then
                  If Item.Subject = "TEST" Then
                    For y = 1 To OLmail.Attachments.Count
                         Set pceJointe = OLmail.Attachments(y)
                            x = x + 1
                            pceJointe.SaveAsFile "C:\extraction\" & x & "_" & pceJointe.Filename
                        Set pceJointe = Nothing
                   'End If
                    Next y
                End If
            Next OLmail
        Else
            MsgBox (Inbox.DefaultItemType)
        End If
     
    End Sub
    J'ai donc quelques morceaux de code mais je n'arrive pas à assembler l'ensemble. Ca me donne pas mal d'erreur. Et je n'arrive pas à trop à avancer...

    Auriez vous quelques pistes svp ?

    Merci d'avance et bonne journée !

  2. #2
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2014
    Messages : 35
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    Tu peux essayer ca:

    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
    Sub Extraire()
     
        Dim myOlApp As Outlook.Application
        Dim myFolder As folder
        Dim myNameSpace As NameSpace
        Dim Mail As Object
        Dim strID As Outlook.MailItem
        Dim PJ As Object
        Set myOlApp = Outlook.Application
        Set myNameSpace = myOlApp.GetNamespace("MAPI")
        Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
     
        'Boucle sur tous les mail dans la boite de reception
        For Each Mail In myFolder.Items
            If Mail.Subject = "TEST" And Mail.Attachment > 0 Then
                For Each PJ In Mail.Attachment
                    PJ.SaveAsFile "Ton dossier"
                Next
            End If
        Next
     
        Set myOlApp = Nothing
        Set myNameSpace = Nothing
        Set myFolder = Nothing
     
    End Sub

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    En utilisant ton code, j'obtiens l'erreur suivante :
    "Erreur compilation
    Type défini par l'utilisateur non défini"

    Je crois que l'erreur s'affiche parce que je suis sous Excel 2003. Visiblement sous Excel 2007 ton code fonctionnerait.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    À quel endroit survient l'erreur ?
    MPi²

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Sur le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim myOlApp As Outlook.Application
    D'après ce que j'ai pu lire à droite à gauche, il faut utiliser les déclarations tardives (Late Binding)

  6. #6
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2014
    Messages : 35
    Points : 51
    Points
    51
    Par défaut
    As-tu ajouté la Référence Microsoft Outlook XX.X Object Library?
    Dans Outil → Référence

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Dans ton premier message, tu utilises des objets
    Je ne vois de ...Dim myOlApp As Outlook.Application...

    Si tu ne veux pas utiliser de références, ce qui est préférable pour la portabilité, déclare tes variables Outlook (Application, MailItem, Attachments,...) As Object et enlève les références à Outlook de la liste de choix.
    MPi²

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Lorsque j'utilise la référence ...Microsoft Outlook XX.X Object Library... et que j'utilise
    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
    Sub Extraireéé()
     
        Dim myOlApp As Outlook.Application
        Dim myFolder As Outlook.MAPIFolder
        Dim myNameSpace As NameSpace
        Dim Mail As Object
        Dim strID As Outlook.MailItem
        Dim PJ As Object
        Dim pceJointe As Outlook.Attachment
     
        Set myOlApp = Outlook.Application
        Set myNameSpace = myOlApp.GetNamespace("MAPI")
        Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
     
        'Boucle sur tous les mail dans la boite de reception
        For Each Mail In myFolder.Items
            If Mail.Subject = "TEST" And Mail.Attachment > 0 Then 'Erreur !!!
                For Each PJ In Mail.Attachment
                    PJ.SaveAsFile "Ton dossier"
                Next
            End If
        Next
     
        Set myOlApp = Nothing
        Set myNameSpace = Nothing
        Set myFolder = Nothing
     
    End Sub
    L'erreur survient sur ...If Mail.Subject = "TEST" And Mail.Attachment > 0 Then...

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Mail.Subject = "TEST" And Mail.Attachments(1) > 0 Then
    Si tu peux avoir plusieurs fichiers attachés, il faudra alors boucler les Attachments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to Mail.Attachments.Count
       'vérification du Attachments(i)
    Next
    MPi²

  10. #10
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2014
    Messages : 35
    Points : 51
    Points
    51
    Par défaut
    En effet, je m'étai un peu précipité.
    Ca devrait marché avec:

    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
    Sub Extraireéé()
     
        Dim myOlApp As Outlook.Application
        Dim myFolder As Outlook.MAPIFolder
        Dim myNameSpace As NameSpace
        Dim Mail As Object
        Dim strID As Outlook.MailItem
        Dim PJ As Object
        Dim pceJointe As Outlook.Attachment
     
        Set myOlApp = Outlook.Application
        Set myNameSpace = myOlApp.GetNamespace("MAPI")
        Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
     
        'Boucle sur tous les mail dans la boite de reception
        For Each Mail In myFolder.Items
            If Mail.Subject = "TEST" And Mail.Attachments.Count > 0 Then
                For Each PJ In Mail.Attachments
                    PJ.SaveAsFile "Ton dossier"
                Next
            End If
        Next
     
        Set myOlApp = Nothing
        Set myNameSpace = Nothing
        Set myFolder = Nothing
     
    End Sub
    Par contre oublie pas de changer "Ton dossier" par "C:/......."

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Merci beaucoup pour vos conseils !
    J'ai donc maintenant un code qui fonctionne (en utilisant les référances) :
    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
    Sub Extraire()
     
        Dim myOlApp As Outlook.Application
        Dim myFolder As Outlook.MAPIFolder
        Dim myNameSpace As NameSpace
        Dim Mail As Object
        Dim pceJointe As Outlook.Attachment
     
        Set myOlApp = Outlook.Application
        Set myNameSpace = myOlApp.GetNamespace("MAPI")
        Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
     
        'Boucle sur tous les mail dans la boite de reception
        For Each Mail In myFolder.Items
            If Mail.Subject = "TEST" Then
                If Mail.Attachments(1) = 1 Then
                    Set pceJointe = Mail.Attachments(1)
                    pceJointe.SaveAsFile "C:\...\TEST.xls"
                End If
            End If
        Next
     
        Set myOlApp = Nothing
        Set myNameSpace = Nothing
        Set myFolder = Nothing
     
    End Sub
    Par contre, j'aurais aimé transformer ce code de facon à avoir une portabilité entre Excel 2003 et excel 2007. Et puis d'un poste à l'autre sans passer par les références...

    C'est pour ca que je parlais des déclarations tardives avec Dim... As Object.
    Je vais essayer de plancher pour transformer le code précédent en code sans référence.

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

Discussions similaires

  1. Extraction pièces jointes Outlook via VBA
    Par pontoise dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 14/07/2017, 14h34
  2. Extraction pièces jointes CSV
    Par sebo13 dans le forum Langage
    Réponses: 9
    Dernier message: 29/01/2010, 16h51
  3. Extraction pièces jointes Outlook via VBA
    Par roidurif dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 22/12/2009, 09h56
  4. [Perl] Récupérer une pièce jointe outlook
    Par cyberps2 dans le forum Langage
    Réponses: 2
    Dernier message: 05/07/2009, 15h34
  5. enregistrer les pièces jointes outlook selon un objet
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 08/05/2009, 18h02

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