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

VBA Outlook Discussion :

Extraire les pièces jointes de mails enregistrés dans un dossier Windows


Sujet :

VBA Outlook

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Extraire les pièces jointes de mails enregistrés dans un dossier Windows
    Bonjour,
    J'ai un répertoire sous Windows (et non dans ma boite outlook) dans lequel j'enregistre des mails qui contiennent des pièces jointes.
    Pouvez-vous me donner le code VBA pour ouvrir ces fichiers et extraire les pièces jointes dans un autre dossier ?
    D'avance merci de votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 269
    Points
    34 269
    Par défaut
    Salut,

    quels ont été tes essais jusqu'à présent ?

    Sur quelle étape rencontres tu des soucis ?
    - la boucle sur les fichiers
    - l'ouverture et extraction des PJ
    - l'enregistrement des PJ
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonsoir,
    Il faut utiliser OpenSharedItem, ensuite pour extraire les pj c'est comme un mail classique.

    voici un exemple,
    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
    Public Sub OpenSharedMSG()
     
        Dim oNamespace As NameSpace
        Dim oSharedItem As MailItem
        Dim oFolder As Folder
     
        On Error GoTo ErrRoutine
     
        ' Get a reference to a NameSpace object.
        Set oNamespace = Application.GetNamespace("MAPI")
     
        ' Open .msg.
        Set oSharedItem = oNamespace.OpenSharedItem( _
            "C:\temp\Mise à jour CRM.msg")
     
     
     
    EndRoutine:
        On Error GoTo 0
        Set oSharedItem = Nothing
        Set oFolder = Nothing
        Set oNamespace = Nothing
    Exit Sub
     
    ErrRoutine:
        Select Case Err.Number
            Case 287 ' &H0000011F
                ' This error occurs if the code is run by an
                ' untrusted application, and the user chose not to
                ' allow access.
                MsgBox "Access to Outlook was denied by the user.", _
                    vbOKOnly, _
                    Err.Number & " - " & Err.Source
            Case -2147024894  ' &H80070002
                ' Occurs if the specified file or URL could not
                ' be found, or the file or URL cannot be
                ' processed by the OpenSharedItem method.
                MsgBox Err.Description, _
                    vbOKOnly, _
                    Err.Number & " - " & Err.Source
            Case -2147352567  ' &H80020009
                ' Occurs if the specified file or URL is not valid,
                ' or you attempt to use the Move method on
                ' an Outlook item that represents a shared item.
                MsgBox Err.Description, _
                    vbOKOnly, _
                    Err.Number & " - " & Err.Source
            Case Else
                ' Any other error that may occur.
                MsgBox Err.Description, _
                    vbOKOnly, _
                    Err.Number & " - " & Err.Source
        End Select
     
        GoTo EndRoutine
    End Sub

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    @Oliv- : J'ai essayé ton code mais il ne fonctionne pas. J'ai modifié le lien "C:..." et ai positionné les bibliothèques Outlook. Mais le message renvoyé est le suivant : "Erreur d'exécution 438 : Propriété ou méthode non gérée par cet objet".
    Il plante sur Set oNamespace = Application.GetNamespace("MAPI")

    @Jean Philipp André : Je débute sur VBA Outlook. Je ne pense pas avoir de problème sur la boucle. Par contre ce que je voudrais faire et que n'arrive pas à faire, c'est d'ouvrir le mail que j'ai au préalable enregistré sur dans un répertoire windows, ouvrir la pièce jointe (ou l'enregistrer dans un dossier Windows). J'ai essayé la fonction "OpenSharedItem" mais sans succès.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub OpenSharedMSG()
     
        Dim oNamespace As Namespace
        Dim oSharedItem As MailItem
        Dim oFolder As Folder
     
        ' Get a reference to a NameSpace object.
        Set oNamespace = Application.GetNamespace("MAPI")
     
        ' Open .msg.
        Set oSharedItem = oNamespace.OpenSharedItem(ThisWorkbook.Path & "\Fichiers_Sources\TEST.msg")
     
    End Sub
    Merci de votre aide.

  5. #5
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    dans quel programme lances tu ce code ?

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Je le lance via Excel 2010.

  7. #7
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Salut,

    C'est très important !

    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
    62
    63
    64
    65
    66
    Public Sub OpenSharedMSG()
     
    Dim OL As Object
        If UCase(Application) = "OUTLOOK" Then
            Set OL = Application
        Else
            Set OL = CreateObject("outlook.application")
        End If
     
        Dim oNamespace As OBJECT 'namespace
        Dim oSharedItem As object 'MailItem
        Dim oFolder As Object 'Folder
     
        On Error GoTo ErrRoutine
     
        ' Get a reference to a NameSpace object.
        Set oNamespace = OL.GetNamespace("MAPI")
     
        ' Open .msg.
        Set oSharedItem = oNamespace.OpenSharedItem( _
            "C:\temp\Mise à jour CRM.msg")
     
    For each pj in osharedItem.attachments
    pj.saveas &c:\temp \"& pj.filename
    Next pj
     
     
    EndRoutine:
        On Error GoTo 0
        Set oSharedItem = Nothing
        Set oFolder = Nothing
        Set oNamespace = Nothing
    Exit Sub
     
    ErrRoutine:
        Select Case Err.Number
            Case 287 ' &H0000011F
                ' This error occurs if the code is run by an
                ' untrusted application, and the user chose not to
                ' allow access.
                MsgBox "Access to Outlook was denied by the user.", _
                    vbOKOnly, _
                    Err.Number & " - " & Err.Source
            Case -2147024894  ' &H80070002
                ' Occurs if the specified file or URL could not
                ' be found, or the file or URL cannot be
                ' processed by the OpenSharedItem method.
                MsgBox Err.Description, _
                    vbOKOnly, _
                    Err.Number & " - " & Err.Source
            Case -2147352567  ' &H80020009
                ' Occurs if the specified file or URL is not valid,
                ' or you attempt to use the Move method on
                ' an Outlook item that represents a shared item.
                MsgBox Err.Description, _
                    vbOKOnly, _
                    Err.Number & " - " & Err.Source
            Case Else
                ' Any other error that may occur.
                MsgBox Err.Description, _
                    vbOKOnly, _
                    Err.Number & " - " & Err.Source
        End Select
     
        GoTo EndRoutine
    End Sub

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci de ton aide !
    J'ai adapté un peu et ça fonctionne comme cela.
    Je n'ai plus qu'à faire la boucle sur les fichiers, je devrais m'en sortir à présent.
    Encore merci.

    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
     
    Public Sub OpenSharedMSG()
     
        Dim OL As Object
        Set OL = CreateObject("outlook.application")
     
        Dim oNamespace As Object
        Set oNamespace = OL.GetNamespace("MAPI")
     
        Dim Mail As Object
        Set Mail = oNamespace.OpenSharedItem(ThisWorkbook.Path & "\Fichiers_Sources\TEST.msg")
     
        Date_Mail = Format(Mail.ReceivedTime, "YYYYMMDD HHMMSS")
     
        For Each PJ In Mail.Attachments
            If Right(PJ.Filename, 5) = ".xlsx" Then
                PJ.SaveAsFile ThisWorkbook.Path & "\Fichiers_Sources\" & Left(PJ.Filename, Len(PJ.Filename) - 5) & Date_Mail & ".xlsx"
            End If
        Next PJ
     
    End Sub

Discussions similaires

  1. Extraire des pièces jointes et les sauvegarder
    Par LANGAZOU dans le forum VBA Outlook
    Réponses: 30
    Dernier message: 17/04/2019, 14h53
  2. Extraire les pièces jointes à partir des archives outlook
    Par h_faty dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 08/08/2014, 10h11
  3. Extraire les pièces jointes de tous les dossiers Outlook
    Par SilkyRoad dans le forum Contribuez
    Réponses: 0
    Dernier message: 29/12/2011, 09h47
  4. extraire les piéces jointes d'un mail ds outlook
    Par khayour dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/06/2008, 15h43
  5. [VBA Outlook] taille des pièces jointes
    Par greg778 dans le forum VBA Outlook
    Réponses: 10
    Dernier message: 29/04/2008, 19h20

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