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 :

Enregistrer un mail (.msg) et les pièces jointes qu'il contient (+ décompresser)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2019
    Messages : 7
    Par défaut Enregistrer un mail (.msg) et les pièces jointes qu'il contient (+ décompresser)
    Bonjour à toutes et tous,

    Je suis encore un néophyte dans Excel et le VBA mais j'essaie de progresser de jour en jour.

    Je possède un fichier Excel de suivi de mes travaux (une ligne par sujet) et j'y ai déjà implémenté des boutons/macros afin de créer automatiquement les dossiers et sous-dossiers dans un répertoire bien spécifique, pour chaque sujet.

    Je voulais savoir s'il était possible de coder une macro qui irait :
    -soit rechercher dans la boite de réception d'outlook l'e-mail dont l'objet du mail correspondrait à une valeur désirée et le copierait dans le dossier relatif au sujet en cours ;
    -soit rechercher le seul e-mail actuellement ouvert dans outlook et le copierait dans le dossier relatif au sujet en cours ?

    Par exemple, si j'ai actuellement 3 sujets qui se nomment "sujet A, sujet B, sujet C", chacun sur une ligne différente de ma feuille Excel (A1 = "sujet A", A2 = "sujet B"...), si je clique sur la cellule "sujet B" et sur le bouton "Créer dossiers", la macro crée automatiquement un dossier "sujet B" et des sous-dossiers "Dossier 1, Dossier 2, Dossier 3" dans un répertoire partagé bien spécifique.
    Imaginons que ma boite de réception outlook contienne uniquement 2 messages (un message dont l'objet serait "bonjour, ça va ?" et un autre dont l'objet serait "sujet B pour application s.v.p").
    Je souhaiterais pouvoir sélectionner la même cellule de ma feuille Excel que lors de la création automatique de dossiers (sujet B) et lancer une macro qui irait comparer ma boite de réception outlook au contenu de la cellule sélectionnée ("sujet B") et dès qu'il y a une correspondance entre un objet d'e-mail et la valeur de la cellule (ici l'e-mail "sujet B pour application s.v.p" contient bien le texte "sujet B" de la cellule), il viendrait copier l'e-mail en question (au format .msg) dans le sous-dossier "Dossier 1" précédemment créé. J'aurais donc au final au sein du répertoire partagé un dossier nommé "sujet B" contenant 3 sous-dossiers et dont le sous-dossier 1 contiendrait "Sujet B pour application s.v.p.msg".

    Une telle chose est-elle réalisable ?
    Si oui, est-il également possible de décharger toutes les pièces jointes du mail dans même dossier où l'on vient de décharger le mail ?
    Si oui, est-il également possible de dé-ziper automatiquement tous les .zip qui pourraient éventuellement être présents en pièce-jointe du mail ?


    D'avance merci pour votre aide.

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2019
    Messages : 7
    Par défaut
    Bonjour à tou(te)s !

    Puis-je remonter ce topic ?

    PS : je n'ai pas réussi à éditer mon message... bizarre (je suppose qu'au-delà d'un certain temps, on ne peut plus).

    Bonne journée à tous

  3. #3
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 033
    Par défaut
    Bonjour.
    On peut extraire des message de Outlook depuis Excel, et détacher les pièces jointes.
    Par exemple voici un code qui recherche dans la boîte de réception les messages qui contiennent un libellé désiré dans leur objet et détache les pièces jointes:

    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
    '----------------------------------------------------------------------------------------
    Function DetachePiecesJointesTDFV() As Boolean
    '----------------------------------------------------------------------------------------
    ' Détache toutes les pièces jointes de la boîte de réception Outlook dont le sujet
    ' contient le mot clé "[TDFV.XLSM:" et les enregistre dans le dossier Téléchargements.
    ' Retourne : Vrai si tout s'est bien passé ou Faux en cas d'erreur.
    '----------------------------------------------------------------------------------------
    Dim i As Long, PJ As Outlook.Attachment
     
    Err.Clear
    On Error GoTo Gest_Err
     
    Dim olApp As Outlook.Application
    Set olApp = GetObject("", "Outlook.Application") ' Déclaration objet Outlook.
     
    Dim MyNameSpace As Outlook.Namespace
    Set MyNameSpace = olApp.GetNamespace("MAPI")
     
    Dim MaBoite As Object
    Set MaBoite = MyNameSpace.GetDefaultFolder(olFolderInbox)
     
    ' Boucle la boîte de recéption:
    For i = 1 To MaBoite.Items.Count
        ' Si l'élément est du type message:
        If MaBoite.Items(i).Class = 43 Then
            ' Si le sujet contient le mot clé:
            If InStr(1, MaBoite.Items(i).Subject, "[TDFV.XLSM:") > 0 Then
                ' Détache les pièces jointes: 
                For Each PJ In MaBoite.Items(i).Attachments
                    PJ.SaveAsFile Environ("USERPROFILE") & "\Downloads\" & PJ.Filename
                Next PJ
            End If
        End If
    Next i
     
    DetachePiecesJointesTDFV = True
     
    Gest_Err:
    If Err.Number <> 0 Then
        MsgBox "Erreur:" _
            & Chr(10) & Chr(13) & Chr(10) & Chr(13) _
            & Err.Number & " : " & Err.Description, vbCritical
    End If
     
    Set olApp = Nothing
    Set MaBoite = Nothing
     
    End Function
    Pour décompresser on peut utiliser 7-Zip.
    Ici l'on par du principe que le répertoire où est 7z.exe est connu :
    Exemple pour décompresser tous les fichiers zip du dossier C:\TDFV dans le même dossier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call UnZip("C:\TDFV\*.zip.*", "C:\TDFV\")
    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
    '----------------------------------------------------------------------------------------
    Public Function UnZip(StrSource As String, StrDest As String) As Long
    '----------------------------------------------------------------------------------------
    ' Décompresse les fichiers sources dans le répertoire de destination.
    '----------------------------------------------------------------------------------------
    Dim StrCommand As String
    Dim ZipExe As String
     
    ZipExe = "C:\Program Files\7-Zip\7z.exe"
     
    StrCommand = Chr(34) & ZipExe & Chr(34) & " e " _
                & Chr(34) & StrSource & Chr(34) _
                & " -o" _
                & Chr(34) & StrDest & Chr(34) _
                & ""
     
    UnZip = Shell(StrCommand, vbHide)
     
    End Function
    Ne pas oublier l'aide dans Outlook et le forum du site : https://outlook.developpez.com/faq/

    Bonne continuation.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2019
    Messages : 7
    Par défaut
    Bonjour Laurent,

    Merci beaucoup pour votre réponse très complète !

    Je teste tout ça dès que possible et je vais lire la FAQ sur Outlook afin d'en apprendre un peu plus sur les liens VBA-Outlook.

    Bonne journée.

    N.B. : je laisse la discussion ouverte, étant donné que je n'ai pas encore implémenté la solution, au cas où j'aurais d'éventuelles futures questions.

Discussions similaires

  1. [XL-2007] "Workflow" Userform et mail - Faire suivre les pièces jointes
    Par EuUud dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/10/2018, 10h33
  2. [OL-2010] Enregistrer les pièces jointes et les supprimer : conflit de mail
    Par illight dans le forum VBA Outlook
    Réponses: 8
    Dernier message: 22/05/2015, 11h24
  3. Réponses: 2
    Dernier message: 27/01/2015, 19h02
  4. Réponses: 0
    Dernier message: 18/01/2015, 11h59
  5. Réponses: 0
    Dernier message: 21/11/2012, 17h52

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