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 :

Déplacer des mails d'Outlook vers un répertoire dans windows selon des critères


Sujet :

VBA Outlook

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Cadre de banque
    Inscrit en
    Février 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Cadre de banque

    Informations forums :
    Inscription : Février 2016
    Messages : 42
    Points : 8
    Points
    8
    Par défaut Déplacer des mails d'Outlook vers un répertoire dans windows selon des critères
    Bonjour,

    Je suis débutant en VBA avec Outlook et je réalise une opération manuelle et régulière que je voudrais automatiser :

    Dans ma boite mail, j'ai beaucoup de dossiers dans lesquels sont classés des mails avec pièces jointes
    Je voudrais au sein de chaque dossier, déplacer les mails (>3mois) et contenant dans le corps du texte les mots "libéré" ou "annulé" ou "annulation" pour les mettre dans un repetoire dans windows
    exemple : O:/Projet 01/Embg/nom du dossiers


    Je vous remercie pour l'aide que vous pourrez m'apporter

  2. #2
    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
    Bonjour,

    là la fonction recursive

    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
    67
    68
    69
    Option Explicit
    
    
    Sub Lance_Traitement()
    '---------------------------------------------------------------------------------------
    ' Procedure : Lance_Traitement
    ' Author    : Oliv
    ' Date      : 12/02/2016
    ' Purpose   :
    '---------------------------------------------------------------------------------------
    '
        Dim OL As Outlook.Application
        Dim olNS As Outlook.NameSpace
        Dim olFolder As Outlook.Folder
    
        Set OL = Outlook.Application
        Set olNS = OL.GetNamespace("MAPI")
    
        'soit on connait le dossier
        'Set olFolder = olNS.GetDefaultFolder(olFolderInbox).folders
    
        'soit on le choisi
        Set olFolder = olNS.PickFolder
    
        Call ProcessFolders(olFolder, True)
        MsgBox "Traitement terminé"
    End Sub
    
    Sub ProcessFolders(StartFolder As Outlook.MAPIFolder, SubFolder As Boolean)
    '---------------------------------------------------------------------------------------
    ' Procedure : ProcessFolder
    ' Author    : Oliv'
    ' Date      : 12/02/2016
    ' Purpose   : Traitement récursif sur les dossiers OUTLOOK
    '---------------------------------------------------------------------------------------
    '
        Dim objFolder As Outlook.MAPIFolder
        Dim objitem As Object
        
        'Dim objItem As Object
        On Error Resume Next
    
        ' do something specific with this folder
        Debug.Print StartFolder.FolderPath, StartFolder.Items.Count
        Debug.Print
        If StartFolder.DefaultItemType = olMailItem Then
            '  ICI LE TRAITEMENT POUR CHAQUE DOSSIER
            ' Call ProcessThisFolder(StartFolder)
        End If
    
        ' process all the items in this folder
        'ICI LE TRAITEMENT POUR TOUS LES ELEMENTS DU DOSSIER
    
        Dim i
        For i = StartFolder.Items.Count To 1
            Set objitem = StartFolder.Items(i)
            Call ProcessThisItem(objitem)
        Next i
    
        ' process all the subfolders of this folder
        'on traite tous les sous dossiers
        If SubFolder Then
            For Each objFolder In StartFolder.folders
                Call ProcessFolders(objFolder, SubFolder)
            Next
        End If
    
        Set objFolder = Nothing
    End Sub

    et le traitement du mail

    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
     
    Sub ProcessThisItem(objitem As Object)
    '---------------------------------------------------------------------------------------
    ' Procedure : ProcessThisItem
    ' Author    : Oliv
    ' Date      : 12/02/2016
    ' Purpose   :
    '---------------------------------------------------------------------------------------
    '
        If objitem.Class = olMail Then
            Dim MyMail As Outlook.MailItem
            Set MyMail = objitem
     
            If InStr(1, MyMail.Body, "libéré", vbTextCompare) Or InStr(1, MyMail.Body, "annulé", vbTextCompare) Or InStr(1, MyMail.Body, "annulation", vbTextCompare) Then
                If MyMail.CreationTime < DateAdd("m", -3, Date) Then
    'ici on sauvegarde
                    Call SavAs_mail_as_msg(MyMail, "c:\exportMail\")
    'ici on supprime l'Email   (à décommenter)          
                    'MyMail.Delete
                End If
            End If
        End If
     
     
    End Sub


    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
    Sub SavAs_mail_as_msg(MyMail As Outlook.MailItem, repertoire)
    '---------------------------------------------------------------------------------------
    ' Procedure : SavAs_mail_as_msg
    ' Author    : Oliv
    ' Date      : 12/02/2016
    ' Purpose   :
    '---------------------------------------------------------------------------------------
    '
    ' exemple repertoire = "c:\mail\"
     
     
        'Ici on construit le nom du fichier qui sera créé
        NomExport = MyMail.subject & MyMail.CreationTime
     
        'Ici on vérifie le répertoire où l'enregistrer
        If Right(repertoire, 1) <> "\" Then repertoire = repertoire & "\"
     
        'Ici on supprime les caractères non autorisé dans les noms de fichiers
        PathNomExport = repertoire & "Email " & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
        NomExport, "\", ""), "/", ""), ":", ""), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160) & ".msg"
     
        'Ici on vérifie que le fichier n'existe pas déjà sinon il serait écrasé
        n = 1
        MemPath = PathNomExport
        While Dir(PathNomExport) <> ""
            'MsgBox "Le fichier " & vbCr & PathNomExport & vbCr & "existe déjà", vbInformation
            PathNomExport = Left(MemPath, Len(MemPath) - 4) & "(" & n & ")" & ".msg"
            n = n + 1
     
        Wend
        MyMail.SaveAs PathNomExport, OlSaveAsType.olMSG
    End Sub

    et là un peu de lecture
    http://www.developpez.net/forums/blo.../debogage-vba/

    edit: corrections

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Cadre de banque
    Inscrit en
    Février 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Cadre de banque

    Informations forums :
    Inscription : Février 2016
    Messages : 42
    Points : 8
    Points
    8
    Par défaut
    Merci pour toutes ces informations.
    Je vais regarder tout cela.
    j'ai une question de débutant, à quoi sert la fonction récursive dans mon cas ?

  4. #4
    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
    à parcourir les dossiers et sous dossiers.
    mais on peut sans si tu lances la macro dossier par dossier

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Cadre de banque
    Inscrit en
    Février 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Cadre de banque

    Informations forums :
    Inscription : Février 2016
    Messages : 42
    Points : 8
    Points
    8
    Par défaut
    J'ai encore quelques questions globales de compréhension

    J'ai une bal dans laquelle il y a 80 dossiers contenant des mails dont certains à classer ailleurs.
    1 - Je lance la macro puis avec ProcessFolders (le traitement pour tous les mails)
    2 - J'y insère le ProcessThisItem pour selectionner en fonction du contenu

    Deux questions :

    - Comment je sélectionne aussi les mails > 3 mois ?
    - Comment je les déplace vers la destination d'arrivée o:\Projets01\Embg\Noms de dossiers ?

  6. #6
    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
    1-Tu copies tout les codes dans un module.

    2-Tu dois paramétrer les nom du dossier destinataire :

    en changeant cette ligne dans ProcessThisItem
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Call SavAs_mail_as_msg(MyMail, "c:\exportMail\")
    3-si tu veux supprimer le mail exporté tu dois dé-commenter (=enlever le ' ) la ligne 'MyMail.Delete

    4-et tu lances
    Lance_Traitement

    une fenêtre te demandera le dossier où commencer.


    la partie qui filtre les mots et la date c'est ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       If InStr(1, MyMail.Body, "libéré", vbTextCompare) Or InStr(1, MyMail.Body, "annulé", vbTextCompare) Or InStr(1, MyMail.Body, "annulation", vbTextCompare) Then
                If MyMail.CreationTime < DateAdd("m", -3, Date) Then

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Cadre de banque
    Inscrit en
    Février 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Cadre de banque

    Informations forums :
    Inscription : Février 2016
    Messages : 42
    Points : 8
    Points
    8
    Par défaut
    Merci encore pour ton aide. Elle m'est très précieuse.

    Dans Sub ProcessFolders tu fais un moment référence à ProcessThisFolder mais sans plus de détail.
    je ne sais si cela peut m'être utile.
    Petite question : que veut dire If objitem.Class = olMail ?

    Deuxième question :

    Avec Call SavAs_mail_as_msg, j'arrive effectivement à transférer mon fichier où je veux mais en inscrivant spécifiquement le chemin.
    Or j'ai de très nombreuses destinations possibles et les écrire manuellement me parait fastidieux.
    Y a_t_il un moyen pour générer cela autrement sachant que le nom du dossier d'arrivée = nom du dossier de départ?

    Exemple de chemin de destination : "O:\Projets01\DCC\EMBG\Nomdossier\sous-dossier
    Ce qui change ce sont les noms des dossiers et parfois des sous-dossiers.

  8. #8
    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
    Bonjour

    Citation Envoyé par clambsf Voir le message
    Merci encore pour ton aide. Elle m'est très précieuse.

    Dans Sub ProcessFolders tu fais un moment référence à ProcessThisFolder mais sans plus de détail.
    je ne sais si cela peut m'être utile.
    moi non plus ! c'est pour faire un traitement au niveau du dossier lui même, comme changer l'affichage par exemple.

    Petite question : que veut dire If objitem.Class = olMail ?
    c'est pour ne traiter que les EMAIL, car on pourrait avoir d'autres éléments outlook dans ce dossier (ar, contact, rdv,...)

    Deuxième question :

    Avec Call SavAs_mail_as_msg, j'arrive effectivement à transférer mon fichier où je veux mais en inscrivant spécifiquement le chemin.
    Or j'ai de très nombreuses destinations possibles et les écrire manuellement me parait fastidieux.
    Y a_t_il un moyen pour générer cela autrement sachant que le nom du dossier d'arrivée = nom du dossier de départ?

    Exemple de chemin de destination : "O:\Projets01\DCC\EMBG\Nomdossier\sous-dossier
    Ce qui change ce sont les noms des dossiers et parfois des sous-dossiers.
    tu peux récupérer le nom du dossier comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox Mymail.Parent.Name
    ou le chemin complet du dossier Outlook comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox Mymail.Parent.FolderPath
    avec la fonction split tu peux découper ce chemin, ci-dessous on ne garde que la partie sans la racine (= ton nom de boite)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox  Split(Mymail.Parent.FolderPath, "\", 4)(3)

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Cadre de banque
    Inscrit en
    Février 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Cadre de banque

    Informations forums :
    Inscription : Février 2016
    Messages : 42
    Points : 8
    Points
    8
    Par défaut
    Encore Merci,

    Cela fonctionne très bien.
    J'ai une dernière question :

    J'ai plusieurs BAL et les dossiers que je veux classer se répartissent sur 3 BAL.
    Sais-tu comment écrire la commande pour selectionner par défaut les trois BAL successivement ?


    Et puis j'ai essayé Set olFolder = olNS.GetDefaultFolder(olFolderInbox).Folders
    mais ça ne fonctionne pas (message d'erreur = Incompatibilité de type - erreur d'éxécution 13).

  10. #10
    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
    Il y a une erreur dans ce code commenté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     'soit on connait le dossier ici la boite de reception de la bal principale
        Set olFolder = olNS.GetDefaultFolder(olFolderInbox)

    ou une autre bal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Set olFolder = olNS.folders("autre boite")
     Set olFolder = olFolder.Store.GetDefaultFolder(olFolderInbox) ' ici le dossier boite de reception de cette autre boite
     Set olFolder = olFolder.folders("DOSSIERS") 'ici un sous dossier nommé DOSSIERS dans boite de reception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Set olFolder  = olNS.folders("autre boite")
     Set olFolder = olFolder.folders("DOSSIERS") 'ici un dossier nommé DOSSIERS à la racine de cette bal
     Set olFolder = olFolder.folders("SS DOSSIER") 'puis un sous dossier de DOSSIERS

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Cadre de banque
    Inscrit en
    Février 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Cadre de banque

    Informations forums :
    Inscription : Février 2016
    Messages : 42
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Comment dois-je définir la variable objfolder ?

  12. #12
    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
    Bonjour,
    c'est une erreur de copie utilise olFolder (j'ai rectifié ci-dessus)

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Cadre de banque
    Inscrit en
    Février 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Cadre de banque

    Informations forums :
    Inscription : Février 2016
    Messages : 42
    Points : 8
    Points
    8
    Par défaut
    Effectivement, j'avais corrigé.
    La macro fonctionne bien et les mails que je déplace dans windows arrivent bien à destination.
    MAIS la date de création du mail ne s'affiche pas dans le répertoire windows qui affiche la date du déplacement.
    Sais-tu comment faire pour afficher la date de création du mail ?

  14. #14
    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
    Le nom fu fichier doit être comme

    Email RE Badge tour09042014 123004.msg

    Est-ce là ton problème ou alors tu voudrais que la date de création du fichier dans le dossier windows soit la même que la dte de création du Mail ?

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Cadre de banque
    Inscrit en
    Février 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Cadre de banque

    Informations forums :
    Inscription : Février 2016
    Messages : 42
    Points : 8
    Points
    8
    Par défaut
    Oui c'est ça, je voudrais que la date de dossier création dans windows soit la même que la date de création du mail.

  16. #16
    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
    Il faut utiliser l'API SetFileTime,tu trouveras là un exemple http://excel.developpez.com/faq/?pag...reationFichier et un plus précis ici
    http://www.cathyastuce.com/vba/code-...dif-dates.html

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Cadre de banque
    Inscrit en
    Février 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Cadre de banque

    Informations forums :
    Inscription : Février 2016
    Messages : 42
    Points : 8
    Points
    8
    Par défaut
    Merci pour le lien,
    Ce n'est pas très clair pour moi et ça me pose plusieurs questions mais cela sort d'Outlook.
    En tout cas un merci pour toute ton aide.
    je vais clore cette discussion et peut-être en ouvrir un autre spécifique sur cette mise à jour de date.
    Très bonne journée

  18. #18
    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,

    t'es pas obligé de faire un autre sujet !

    Tu créés un nouveau MODULE

    et tu mets la code de cathy

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
    'http://www.cathyastuce.com/vba/code-source-excel/manipulation-fichiers/420-modif-dates.html
    Public Const OFS_MAXPATHNAME = 260
     
    Type OFSTRUCT
       cBytes As Byte
       fFixedDisk As Byte
       nErrCode As Integer
       Reserved1 As Integer
       Reserved2 As Integer
       szPathName(OFS_MAXPATHNAME) As Byte
    End Type
    Type FILETIME
            dwLowDate As Long
            dwHighDate As Long
    End Type
    Type SYSTEMTIME
            wYear As Integer
            wMonth As Integer
            wDayOfWeek As Integer
            wDay As Integer
            wHour As Integer
            wMinute As Integer
            wSecond As Integer
            wMillisecs As Integer
    End Type
     
     
    ' constante
    Public Const FILE_SHARE_READ = &H1
    Public Const FILE_SHARE_WRITE = &H2
    Public Const GENERIC_WRITE = &H40000000
    Public Const OPEN_EXISTING = 3
     
    ' declarations api
    Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" _
              (ByVal lpFileName As String, _
              ByVal dwDesiredAccess As Long, _
              ByVal dwShareMode As Long, _
              ByVal lpSecurityAttributes As Long, _
              ByVal dwCreationDisposition As Long, _
              ByVal dwFlagsAndAttributes As Long, _
              ByVal hTemplateFile As Long) As Long
    Declare Function LocalFileTimeToFileTime Lib "kernel32" _
              (lpLocalFileTime As FILETIME, _
              lpFileTime As FILETIME) As Long
    Declare Function SetFileTime Lib "kernel32" _
              (ByVal hFile As Long, _
              lpcreation As FILETIME, _
              lpLecture As FILETIME, _
              lpLastWriteTime As FILETIME) As Long
    Declare Function GetFileTime Lib "kernel32" _
            (ByVal hFile As Long, lpCreationTime As FILETIME, _
             lpLastAccessTime As FILETIME, _
             lpLastWriteTime As FILETIME) As Long
    Declare Function SystemTimeToFileTime Lib "kernel32" _
              (lpSystemTime As SYSTEMTIME, _
              lpFileTime As FILETIME) As Long
    Declare Function FileTimeToSystemTime Lib "kernel32" _
            (lpFileTime As FILETIME, _
             lpSystemTime As SYSTEMTIME) As Long
     
    Public Function GetFT(sDate) As FILETIME
        Dim udtSysTime As SYSTEMTIME
        Dim udtLocalTime As FILETIME
        Dim Ft As FILETIME
        Dim RetVal As Long
     
        With udtSysTime
            .wYear = Year(sDate)
            .wMonth = Month(sDate)
            .wDay = Day(sDate)
            .wDayOfWeek = Weekday(sDate) - 1
            .wHour = Hour(sDate)
            .wMinute = Minute(sDate)
            .wSecond = Second(sDate)
        End With
        RetVal = SystemTimeToFileTime(udtSysTime, udtLocalTime)
        RetVal = LocalFileTimeToFileTime(udtLocalTime, GetFT)
    End Function
     
    Public Function GetFileDateString(CT As FILETIME, sFormat As String) As String
      Dim ST As SYSTEMTIME
      Dim ds As Single
     
     'Convertir les infos du fichier en un format temps affichable
        If FileTimeToSystemTime(CT, ST) Then
            ds = DateSerial(ST.wYear, ST.wMonth, ST.wDay)
            GetFileDateString = Format$(ds, sFormat)
        Else
            GetFileDateString = ""
        End If
    End Function
     
    '******** MODIFIER UN FICHIER ***********************
    Public Sub ModifDate(sNomFichier As String, sDate As String, byType As Byte)
    'byType = 1 =>Date de creation
    'byType = 2 =>Date de Lecture
    'byType = 3 =>Date derniere ecriture
    'byType = 4 => toutes
        Dim hFile As Long
        Dim Ft As FILETIME
        Dim FTc As FILETIME
        Dim FTa As FILETIME
        Dim FTw As FILETIME
        Dim RetVal As String
     
        hFile = CreateFile(sNomFichier, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
        GetFileTime hFile, FTc, FTa, FTw
        Select Case byType
            Case 1
                ' modification Date de creation
                Ft = GetFT(sDate)
                RetVal = SetFileTime(hFile, Ft, FTa, FTw)
            Case 2
                ' modification Date de Lecture
                Ft = GetFT(sDate)
                RetVal = SetFileTime(hFile, FTc, Ft, FTw)
            Case 3
                ' modification Date derniere ecriture
                Ft = GetFT(sDate)
                RetVal = SetFileTime(hFile, FTc, FTa, Ft)
            Case 4
                ' modification toutes
                Ft = GetFT(sDate)
                RetVal = SetFileTime(hFile, Ft, Ft, Ft)
        End Select
    End Sub

    dans la macro SavAs_mail_as_msgtu mets cela APRES
    MyMail.SaveAs PathNomExport, OlSaveAsType.olMSG
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call ModifDate(CStr(PathNomExport), MyMail.CreationTime, 4)
    et voilà

  19. #19
    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
    ou presque ...
    concernant la date du Mail en fait il y a plusieurs dates :

    CreationTime
    Renvoie une Date indiquant l'heure de création de l'élément Outlook. En lecture seule.

    LastModificationTime
    Retourne une valeur Date spécifiant la date et l'heure de dernière modification de l'élément Outlook. En lecture seule.

    ReceivedTime
    Retourne une valeur Date qui indique la date et l'heure à laquelle l'élément a été reçu. En lecture seule.

    SentOn
    Retourne une valeur Date qui indique la date et l'heure d'envoi de l'élément Outlook. En lecture seule.

    pour les principales... voir ici https://msdn.microsoft.com/FR-FR/lib.../dn320330.aspx

    donc en fait cela dépend du sens de ton Email entrant ou sortant

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Cadre de banque
    Inscrit en
    Février 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Cadre de banque

    Informations forums :
    Inscription : Février 2016
    Messages : 42
    Points : 8
    Points
    8
    Par défaut
    La date que je veux est bien la creation date.
    J'ai tout copié, la macro se déroule sans anicroche mais en revanche je ne vois pas de modification de date.
    Dans modifDate, la macro ne teste que le case 4 et pour autant, je ne vois aucune modifie dans le répertoire.

    as-tu une idée ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Envoyer des mails d'excel vers Lotus Notes
    Par HERVE57 dans le forum Lotus Notes
    Réponses: 1
    Dernier message: 15/02/2012, 14h03
  2. Réponses: 3
    Dernier message: 07/12/2009, 11h31
  3. Téléchargement des mails sur Outlook
    Par consuling dans le forum Outlook
    Réponses: 0
    Dernier message: 30/06/2009, 17h20
  4. récupérer des mails sur outlook 2007 et en envoyer
    Par delphinew dans le forum Outlook
    Réponses: 10
    Dernier message: 07/10/2007, 17h02
  5. Recevoir des mails sans Outlook
    Par Nikkobass dans le forum VB.NET
    Réponses: 6
    Dernier message: 17/09/2007, 18h19

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