Recup de corps de mails dans Excel plante sans raison appare

La Macro est ci-dessous, j'ai beau la passer en pas à pas détaillé cela me fait pareil et ça m’énerve, passé 5 emails récupéré il sort de la procédure si je la relance il continue tranquillement, pour exemple je crée 10 brouillons ou il y a juste écrit "je teste"

il récupère les 5 premiers, et il sort, je relance aussi sec il en traite 3 de plus , puis 1 puis 1.

La question donc existe il un moyen différent de coder sans cette boucle

 for Each i In dossiersource.items 

$

un truc du style

while not  dossiersource.items is nothing
set i = dossiersource.items  'ça ne marche pas on doit devoir le coder differement mais je ne sais pas
Sub LireMessagesDUnDossierEtLeDeplacerVersUnAutre()
    Dim olApp As Object, NS As Object, Dossier As Object
    Dim DossierDest As Object, DossierCible As Object
    Dim i As Object, x As Long, R As Object, Ligne As Long
    Set olApp = CreateObject("Outlook.Application")
    Set NS = olApp.GetNamespace("MAPI")
    Set dossiersource = NS.Folders(1).Folders("Boîte de réception").Folders("reception").Folders("test")
    Set DossierDest = NS.Folders(1).Folders("Boîte de réception").Folders("reception").Folders("test").Folders("traité")
    With Sheets("Feuil1")
        For Each i In dossiersource.items
            Ligne = Ligne + 1
            .Cells(Ligne, 1) = i.Subject
            Ligne = Ligne + 1
            For x = 0 To UBound(Split(i.Body, vbCrLf))
                Ligne = Ligne + 1
                .Cells(Ligne, 2) = Split(i.Body, vbCrLf)(x)
            Next x
            Ligne = Ligne + 1
            .Columns(2).AutoFit
            'Var = ThisWorkbook.Path & "\" & i.CreationTime & " - " & i.Subject & ".msg"
            i.Move DossierDest
            'Application.Wait Time + TimeSerial(0, 0, 5)
            ' Mail_tool
        Next i
    End With
    Set NS = Nothing
    Set olApp = Nothing

End Sub

Bonjour,

2-3 trucs pour essayer d'avancer :

  • dossiersource.items contient-il tes 10 items lorsque tu arrives dessus ?
  • en pas à pas est-ce qu'il les exécute tous ou sort-il brusquement sur une instruction ?
  • ajoute un DoEvents en fin de boucle, ça ne fera pas de mal
eric

Re,

j'ai rajouté ça en debut de procédure dans la boucle

For Each i In dossiersource.items
            MsgBox "nombre d'emails trouvés :  " & dossiersource.items.Count

et du coup il m'affiche bien le bon nombre d'email.

en pas à pas il sort tranquilement apres le next comme si il n'y avait plus rien a faire

tant qu'au Doevent, je regarderais tout à l'heure sur google comment l'utiliser car je ne connais pas du tout.

Merci

plus judicieux de le mettre à la fin, au moins je sais maintenant qu'il se fout de moi, il me dit qu'il en reste 5 mais il sort quand même de la boucle For Next,

For Each i In dossiersource.items
            Ligne = Ligne + 1
            .Cells(Ligne, 1) = i.Subject
            Ligne = Ligne + 1
            For x = 0 To UBound(Split(i.Body, vbCrLf))
                Ligne = Ligne + 1
                .Cells(Ligne, 2) = Split(i.Body, vbCrLf)(x)
            Next x
            Ligne = Ligne + 1
            .Columns(2).AutoFit
            'Var = ThisWorkbook.Path & "\" & i.CreationTime & " - " & i.Subject & ".msg"
            i.Move DossierDest
            'Application.Wait Time + TimeSerial(0, 0, 5)
            Mail_tool
            MsgBox "nombre d'emails trouvés :  " & dossiersource.items.Count
        Next i

Ok c'est bon j'ai rajouté une boucle pour tester le nombre d'emails afin que même si il sort de la boucle for il y retourne

m'enfin ......

Mystère et boule de gomme mais cela fonctionne maintenant !!!!!

While dossiersource.items.Count <> "0"
        For Each i In dossiersource.items
            Ligne = Ligne + 1
            .Cells(Ligne, 1) = i.Subject
            Ligne = Ligne + 1
            For x = 0 To UBound(Split(i.Body, vbCrLf))
                Ligne = Ligne + 1
                .Cells(Ligne, 2) = Split(i.Body, vbCrLf)(x)
            Next x
            Ligne = Ligne + 1
            .Columns(2).AutoFit
            'Var = ThisWorkbook.Path & "\" & i.CreationTime & " - " & i.Subject & ".msg"
            i.Move DossierDest
            'Application.Wait Time + TimeSerial(0, 0, 5)
            Mail_tool
            MsgBox "nombre d'emails trouvés :  " & dossiersource.items.Count
        Next i
      Wend

J'ai l'impression qu'à chaque déplacement d'email ta liste se décale d'un cran vers le haut et en passant au suivant du coup tu n'en traites qu'un sur 2.

Balaie tes items en sens inverse, du dernier au 1er avec une boucle for i = x to 1 step -1.

eric

Non il les traite correctement je mets les emails en non lus comme ça je les vois passer d'un dossier à l'autre et en meme temps je le vois etre traité dans mon dossier.

Je viens de mettre 953 emails dans le dossier test il a bien affiché 953 non lus messages, puis il les a passé dans le dossier traité et toujours 953 messages non lus, et j'ai bien 954 ligne dans me dossier excel vu que j'ai une ligne d'entête. Non ça marche parfaitement.

Si ce n'est que Outlook me génère une erreur dans le code VBA pas d'espace mémoire apres 150-200 emails, je suis obligé de fermer et de relancer outlook et ça recommence sans que j'ai été obligé d’éteindre excel juste arrêter la procédure et la relancer comme il ne copie le message qu'à la fin il reste dans le dossier non traité.

non franchement c'est nickel

mis à part les quelques erreurs àa marche du tonnerre, il ne me reste plus qu'à exploiter les données recueillies.

Merci !!!!

Je te parlais du fonctionnement avant que tu mettes le palliatif approximatif de relancer tant qu'il en trouve...

Je pense que ça serait une façon plus propre et plus correcte de traiter le problème.

Mais bon, si tu ne veux pas tester...

Franchement Eric, je te remercie de ton aide.

Concernant mon palliatif aproximatif il fonctionne et cela me va bien surtout avec mes maigres connaissances.

Mais tu as raison il ne traite ps les objets dans l'ordre et c'est pour ça qu'il saute des étapes et qu’il sort de la première boucle.

J'ai eu beau lui faire faire des pauses, lancer des doevents, afficher le next object, il n'en démords pas, il a un comportement erratique au vu de mes connaissances. Aussi je me contenterai de mon palliatif.

Encore merci,

Rechercher des sujets similaires à "recup corps mails plante raison appare"