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

Outlook Discussion :

Supression Mail dans Outlook


Sujet :

Outlook

  1. #1
    Futur Membre du Club
    Supression Mail dans Outlook
    Bonjour a tous,

    J'ai créer une Macro VBA dans Outlook pour permettre au utilisateur de ranger leur Mail dans des dossier spécifique propre a notre process, et cette macro marche très bien.
    Toutefois je n'arrive pas a résoudre un point qui me parait bête et pourtant je ne trouve pas de solution, c'est que une fois le mail enregistrer dans le dossier, je voudrais le mettre dans le dossier "Élément supprimée de Outlook", j'ai essayer plusieurs solution sans succès, pourriez vous me venir en aide ?

    Merci par avance

    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
     
     Private Sub LanceSurSelection()
        Dim MonOutlook As Outlook.Application
        Dim LeMail As Object
        Dim LesMails As Outlook.Selection
        Set MonOutlook = Outlook.Application
     
        Set LesMails = MonOutlook.ActiveExplorer.Selection
     
        For Each LeMail In LesMails
            sav_mail_as_msg LeMail
        Next LeMail
     
        Set LesMails = Nothing
     
        'MsgBox "Fin de traitement"
    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
    33
     
    Private Sub sav_mail_as_msg(Optional objCurrentMessage As Object)
     
        If objCurrentMessage Is Nothing Then Set objCurrentMessage = ActiveInspector.CurrentItem
     
        'Extraction et formatage de la date
        Annee = Mid(objCurrentMessage.CreationTime, 7, 4)
        Mois = Mid(objCurrentMessage.CreationTime, 4, 2)
        Jour = Mid(objCurrentMessage.CreationTime, 1, 2)
        Heure = Mid(objCurrentMessage.CreationTime, 12, 5)
        'Ici on construit le nom du fichier qui sera créé
        NomExport = Annee & Mois & Jour & "-" & Heure & "-" & MailSens & " - " & objCurrentMessage.Subject
     
        'Ici on défini le répertoire où l'enregistrer
        'repertoire = "c:\Cmc Interface\"
        'repertoire = BrowseForFolder("Choisissez la destination", SDossier(5, 0)) & "\"
     
        'Ici on supprime les caractères non autorisé dans les noms de fichiers
        PathNomExport = RepArchiv & 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
        objCurrentMessage.SaveAs PathNomExport, OlSaveAsType.olMSG
     
    End Sub

  2. #2
    Expert éminent
    Salut,
    Simplement comme cela.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     For Each LeMail In LesMails
            sav_mail_as_msg LeMail
    lemail.delete
        Next LeMail


    mais si tu boucles avec des suppressions ou déplacements il faut faire une boucle inverse pour ne pas zapper d'Emails

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    For i = LesMails.count To 1 Step -1
        Set LeMail = LesMails(i)
        sav_mail_as_msg LeMail
        lemail.delete
    Set LeMail =nothing
    Next i

  3. #3
    Futur Membre du Club
    Merci Oliv-

    Mais j'ai déjà essayer ce script "LeMail.delete" dans ma recherche de solution, et ça bug

  4. #4
    Expert éminent
    Pourrais tu être plus précis ? qu'est ce qui bug le mail n'est pas supprimé ? ou le programme ne traite pas tous les Emails ? dans le second cas il faut utiliser la boucle for i...step-1

  5. #5
    Futur Membre du Club
    Voici 3 captures d’écran
    Le programme modifie
    Le message d'erreur
    Et l’écran VBA de deboguage avec la ligne surligne






  6. #6
    Expert éminent
    Qu'est ce qu'il a de particulier ce mail ? il est dans une boite partagée ?

    chez moi cela fonctionne très bien.

  7. #7
    Futur Membre du Club
    Non il n'a rien de particulier, d’ailleurs je reproduit l'erreur avec des mails différents.

    Ça pourrait pas être un problème de complément que je n'est pas et il ne reconnait pas la commande ?

  8. #8
    Expert éminent
    IL FAUT IMPERATIVEMENT UTILISER UNE BOUCLE FOR I= ...STEP -1 et pas for each

    tu peux aussi le déplacer

    Set myDestFolder = session.GetDefaultFolder(olFolderDeletedItems)

    lemail.Move myDestFolder

  9. #9
    Futur Membre du Club
    Merci cette commande marche et ma permis de comprendre le problème,

    Car en faite dans mon Outlook je reçois deux boite mail différente, Ma perso (en Exchange), et ma pro (en pop).
    Ma macros est faite pour être utilise avec ma boite pro, mais je suppose que la commande "delete" cherche a supprimer dans ma boite perso.

    Et la quand j'ai utilise ton code de déplacement il a bien retire le mail de ma boite de réception pro, mais la mis dans le dossier supprimer de mon perso.
    Donc la question suivante est comment avec cette même commande envoyer le mail dans le dossier supprimer de ma pro, ou stipuler qu'il faut supprimer dans ma boite pro ?

  10. #10
    Expert éminent
    je pense déjà qu'il serait préférable de paramétrer ta bal pro en IMAP, c'est peut être la raison de l'échec.


    sinon on peut choisir le dossier de destination comme cela
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    Set myDestFolder = Application.Session.Stores("bal@societe.com").GetDefaultFolder(olFolderDeletedItems)


    ou comme cela pour trouver à partir du mail

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Set myDestFolde = lemail.Parent.Store.GetDefaultFolder(olFolderDeletedItems)

  11. #11
    Futur Membre du Club
    Je suis pas fan du protocole IMAP c'est pour ça que ma boite perso est en Exchange beaucoup mieux.

    En tous cas mon problème est complètement résolue, je te remercie.

  12. #12

###raw>template_hook.ano_emploi###