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 :

[VBA] Enregistrer mes mails sur le disque dur ET détruire les originaux dans Outlook [OL-2007]


Sujet :

VBA Outlook

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 23
    Points
    23
    Par défaut [VBA] Enregistrer mes mails sur le disque dur ET détruire les originaux dans Outlook
    Bonjours à tous,

    J'utilise la procédure d'Oliv "sav_mail_as_msg" pour enregistrer une sélection de mails non ouverts dans un répertoire que j'ai choisi ( grace à un formulaire créé à cet effet ) : c'est la procédure "LanceSurSelection" toujours et encore d'Oliv :

    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
    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
         LeMail.Delete
     
     Next LeMail
     
    Set LesMails = Nothing
     
    End sub


    Certes, j'ai beaucoup modifié le code de la procédure principale "sav_mail_as_msg" puisque :

    1.- je peux par inputbox modifier le sujet du mail et donc le nom du futur fichier enregistré sur le disque dur,

    2.- je sépare les pièces jointes en les numérotant ( 1 sur 4, 2 sur 4,...), le début du nom de fichier est le nom du fichier-mail et la fin le nom de la pièce jointe.

    Bref, rien d'extraordinaire sauf à y passer beaucoup de temps....

    Je coince, bêtement, sur un problème apparemment très simple : après avoir choisi le répertoire de destination, changé éventuellement le sujet du mail, enregistré le mail sur le disque dur, séparé les pièces jointes et les avoir enregistré dans le même répertoire en utilisant le même nom pour une grande partie, je voudrais tout simplement détruire le mail qui se trouve dans outlook et qui ne sert donc plus à rien.

    Eh bien non ! je n'y arrive pas. LeMail.delete dans ma procédure ci dessus ne fonctionne pas. Alors, les mails étant sélectionnés, je reviens dans l'explorateur et je suis obligé de faire "Suppr" : j'ai honte.

    Qui aurait une idée ?

    Le messages est "Erreur d'exécution -2147352567 (80020009) Impossible de supprimer cet élément"

    Une précision : dans la procédure principale, j'ai bien pris soin d'enregistrer le mail en cours ( ObjCurrentMessage ) surtout si j'ai changé son nom. Et pourtant, VBA ne veut pas comme si l'objet CurrentMessage n'était pas disponible ! Où merdois-je ?

    Merci d'avance au Magicien qui trouvera la solution.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    Salut,

    J'ai déjà eu le même problème des fois ça marche des fois ça marche pas et je n'ai jamais identifié le problème. Donc pour le résoudre je le déplace dans les éléments supprimés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'Déclaration
    Dim fldElementSupprime As Outlook.MAPIFolder
    'Instanciation "monNSpace correspond à ma banque MAPI
    Set fldElementSupprime = monNSpace.GetDefaultFolder(olFolderDeletedItems)
    'Exécution
    monMail.Move (fldElementSupprime)
    Sinon j'ai réussi à utiliser le delete en inversant ma boucle...

    J'utilise une boucle For Next

    Avant je faisait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = 1 to NombreMail
       [...]
    Next i
    Maintenant je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = NombreMail to 1 Step -1
       [...]
    next
    Car le problème dans le premier cas tu te place sur le mail N°1... Ensuite tu le supprime Donc dans ta boucle tu passe sur le mail N°2... mais en fait le nouveau mail à traiter est denouveau le mail N°1... Je sais pas si je suis clair... Et donc du coup au bout d'un certain nombre de mail tu te place sur un mail qui n'existe pas avec ta boucle.
    donc si tu pars du dernier au premier tu n'as plus de problème...

    En espérant t'avoir aidé !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Merci de ton aide Ptikir.

    Les deux solutions sont astucieuses : je vais les tester.

    Mais, franchement, c'est râlant de ne pas comprendre pourquoi , non ? C'est vrai que si çà marche.... Mais quand même.

    Ps: je viens de comprendre ton mail n° 2 qui devient le mail n° 1 quand on supprime le précédent.... Mais c'est le mail en cours qui compte non ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Une des deux solutions testée : déplacer vers la poubelle ! Ca marche.

    Pour ceux que ça interesse le code :

    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
    Function LanceSurSelection()
     
        Dim MonOutlook As Outlook.Application
        Dim LeMail As Object
        Dim LesMails As Outlook.Selection
        Set MonOutlook = Outlook.Application
        Set LesMails = MonOutlook.ActiveExplorer.Selection
     
     '=============================================
     
         Dim myNameSpace As Outlook.NameSpace
         Dim MaPoubelle As Outlook.MAPIFolder
     
         Set myNameSpace = MonOutlook.GetNamespace("MAPI")
         Set MaPoubelle =MyNameSpace.GetDefaultFolder(olFolderDeletedItems)
     
     '=============================================
     
        For Each LeMail In LesMails
     
               sav_mail_as_msg LeMail
               [......autres opérations sur le mail en cause....]
     
               'déplacement du mail vers le dossier "poubelle" d'outlook
               Set LeMail = LeMail.Move(MaPoubelle)
     
        Next LeMail
     
     Set LesMails = Nothing      
     
    End Function

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    Salut!

    Pour en revenir à ta première réponse petite explication...

    tu as 3 mails mail(1), mail(2) et mail(3)

    dans la boucle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = 1 à nombre_de_mail '(ici = 3)
     
    next i
    tu te place sur le mail(1) et tu le supprime. donc ton mail(2) devient mail(1) et mail(3) devient mail(2)

    Donc quand tu arriveras sur la suppression de ton mail(3) il y aura une erreur car ce mail n'existe plus

    Alors que dans la boucle inversée tu n'as pas ce problème.

    Pense à mettre résolu sur ton post a ++

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    Re-salut,

    J'étais en train de bosser sur un problème similaire au tien aujourd'hui et j'ai trouvé à quoi celà est dû ;-)

    http://www.developpez.net/forums/d77...s/#post4453362

    Voilà a ++

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Pas mauvais le Ptikir.....

    Moi aussi je viens de (commencer à ) comprendre !

    C'est décidé : j't'appelerai Grand'Kir .

    Encore merci.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Script Interressant
    bonjour JackRussel,

    Ton script à l'air très intéressent, en tout cas ton projet et je cherche exactement la même fonction.
    As-tu après test de ton script,possibilité de le partager?

    A bientôt Merci.

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

Discussions similaires

  1. [OL-2013] Enregistrer automatiquement un mail envoyé sur son disque dur
    Par tibou22 dans le forum VBA Outlook
    Réponses: 2
    Dernier message: 17/07/2014, 17h52
  2. Enregistrer une vidéo sur le disque dur
    Par bbattia dans le forum WinDev
    Réponses: 2
    Dernier message: 25/08/2011, 01h26
  3. [CS3] Enregistrer une vidéo sur le disque dur
    Par vouvou dans le forum Flash
    Réponses: 1
    Dernier message: 03/08/2010, 13h06
  4. Réponses: 3
    Dernier message: 26/07/2007, 17h01
  5. Réponses: 2
    Dernier message: 24/04/2007, 09h03

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