VB/OUtlook messages lu/non-lu,

Résolu
cs_juha Messages postés 12 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 22 octobre 2007 - 4 oct. 2007 à 15:50
cs_juha Messages postés 12 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 22 octobre 2007 - 11 oct. 2007 à 13:10
Bonjour,

Ce que j'aimerais faire c'est déplacer les messages de un dossier "NON-LU" si il ne sont pas encore lu et dès qu'ils le sont les redéplacer dans un autre dossier "LU".

Je sais pas si j'ai été assez clair.

Merci d'avance

Julien

11 réponses

cs_juha Messages postés 12 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 22 octobre 2007
10 oct. 2007 à 13:37
Voilà ce que donne ma boucle maintenant:

For I = myFolder.Items.Count To 1 Step -1
                 
        If myItem.UnRead = True Then
                   
            myItem.Move myFolderNnLU
                     
        Else
            myItem.Move myFolderLU
                       
        End If
               
    Next I

Le problème c'est que myItem n'est pas spécifié dans ma boucle alors le programme plante.
Et comment dois-je déclarer la variable I?

Merci d'avance.
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 oct. 2007 à 00:08
Le mieux serait que tu mettes ton bout de code et la partie qui ne va pas...

MPi²
0
cs_juha Messages postés 12 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 22 octobre 2007
8 oct. 2007 à 14:35
Bonjour,

Voici mon code, ce qui ne fonctionne pas, il traite seulement 2 ou 3 e-mail et ensuite il quitte la boucle.

Je ne comprends pas trop d'ou vient le problème.

Merci de votre aide.

Private Sub Application_NewMail()

Dim myOlApp As Outlook.Application
Dim myNameSpace As Outlook.NameSpace
Dim myFolder As Outlook.MAPIFolder
Dim myFolderNnLU As Outlook.MAPIFolder
Dim myFolderLU As Outlook.MAPIFolder
Dim myItem As Outlook.MailItem
Dim myItem2 As Outlook.MailItem
Dim ns As NameSpace
Dim inBox As MAPIFolder

Set myOlApp = CreateObject("Outlook.Application")
Set myNameSpace = myOlApp.GetNamespace("MAPI")

'Sélectionne boîtes de réception OK.
Set ns = GetNamespace("MAPI")
Set inBox = ns.Folders("Boîte aux lettres - Cattin Joël")
Set myFolder = inBox.Folders("Boîte de réception") ' Enter correct subfolder name.

'Répertoire "Non-LU"
Set myFolderNnLU = myFolder.Folders("Non-LU")

'Répertoire "LU"
Set myFolderLU = myFolder.Folders("LU")

'Déplacer les messages du répertoire "Boîtes de réception" vers le répertoire "LU / NON-LU"

        For Each myItem In myFolder.items
               
                If myItem.UnRead = True Then
                   
                        myItem.Move myFolderNnLU
                           
                   Else
                        myItem.Move myFolderLU
               
                End If
               
            Next myItem
           
           
  
        For Each myItem2 In myFolderNnLU.items
               
                If myItem2.UnRead = False Then
                   
                        myItem2.Move myFolderLU
                       
                Else
               
                    Exit For
                                  
                End If
               
            Next myItem2

End Sub
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
8 oct. 2007 à 16:52
Essaie en enlevant le
    Else
        Exit for
dans la dernière boucle

est-ce que c'est mieux ?

MPi²
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_juha Messages postés 12 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 22 octobre 2007
9 oct. 2007 à 07:35
Merci de votre réponse,

Oui je l'avais déjà supprimé, mais j'ai toujours le même problème c'est qu'il en déplace 2-3 puis plus rien.

Pourtant c'est une simple boucle, c'est vraiment bizare.

Si vous avez d'autre idée ça serait le bien venu.

SAlutations
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
9 oct. 2007 à 11:25
As-tu essayé en pas-à-pas (F8) ?

Aussi, après le début de boucle (ex: For Each myItem In myFolder.items), tu pourrais mettre un message pour voir combien de "mail" sont trouvés et voir s'il n'y aurait pas un problème là.
Quelque chose comme ...
Msgbox myFolder.items.Count

MPi²
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
9 oct. 2007 à 11:29
Une autre idée me vient...
Comme tu utilises For Each ... qui comptabilise tous les fichiers et qu'ensuite, tu les déplaces, ça peut peut-être causer un problème. Le même genre de problème que lorsque tu supprimes des lignes d'une liste en commençant par le début...

Il serait peut-être préférable que tu utilises une boucle du genre
For I = MyFolder.Items.Count To 1 step - 1

MPi²
0
cs_juha Messages postés 12 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 22 octobre 2007
9 oct. 2007 à 13:27
Merci pour vos réponses,

Oui je test à chaque fois avec le pas à pas.

Avec le Msgbox myFolder.items.Count il me trouve bien le bon nombre de message.

Avec cette boucle For I = MyFolder.Items.Count To 1 step - 1, j'ai le problème que j'ai plus ma variable myItem et alors mes If ne sont plus valide.

Je comprends pas trop ou utiliser cette boucle.

Merci d'avance.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
9 oct. 2007 à 23:56
Tu les utilises aux mêmes endroits que tes For Each. En fait, tu les remplaces tout simplement.

Il faudrait par contre vérifier si c'est ....Count ou ....Count - 1
Je n'ai pas testé, mais quelquefois il faut utiliser des boucles de 1 à Count (ou inverse) et d'autres fois de 0 à Count - 1

MPi²
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
11 oct. 2007 à 11:34
Dans ta boucle originale, tu mettais
        For Each myItem In myFolder.items
myItem devient donc un item de la collection "myFolder.items"

Je pense donc, sans tester, que tu dois spécifier ce qu'est myItem dans la nouvelle boucle... quelque chose comme:
For I = myFolder.Items.Count To 1 Step -1
    set myItem = myFolder.Items(I)
    If myItem.UnRead = True Then
    ....

MPi²
0
cs_juha Messages postés 12 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 22 octobre 2007
11 oct. 2007 à 13:10
Merci, mais j'ai fais autrement et ça marche.

For I = myFolderNnLU.Items.Count To 1 Step -1
     For Each myItem2 In myFolderNnLU.Items
               
        If myItem2.UnRead = False Then
                   
            myItem2.Move myFolderLU
                     
        End If
           
        Next myItem2
     Next I

Problème résolu.
0
Rejoignez-nous