VB/OUtlook messages lu/non-lu, [Résolu]

cs_juha 12 Messages postés jeudi 4 octobre 2007Date d'inscription 22 octobre 2007 Dernière intervention - 4 oct. 2007 à 15:50 - Dernière réponse : cs_juha 12 Messages postés jeudi 4 octobre 2007Date d'inscription 22 octobre 2007 Dernière intervention
- 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
Afficher la suite 

11 réponses

Répondre au sujet
cs_juha 12 Messages postés jeudi 4 octobre 2007Date d'inscription 22 octobre 2007 Dernière intervention - 10 oct. 2007 à 13:37
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_juha
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 5 oct. 2007 à 00:08
0
Utile
Le mieux serait que tu mettes ton bout de code et la partie qui ne va pas...

MPi²
Commenter la réponse de cs_MPi
cs_juha 12 Messages postés jeudi 4 octobre 2007Date d'inscription 22 octobre 2007 Dernière intervention - 8 oct. 2007 à 14:35
0
Utile
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
Commenter la réponse de cs_juha
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 8 oct. 2007 à 16:52
0
Utile
Essaie en enlevant le
    Else
        Exit for
dans la dernière boucle

est-ce que c'est mieux ?

MPi²
Commenter la réponse de cs_MPi
cs_juha 12 Messages postés jeudi 4 octobre 2007Date d'inscription 22 octobre 2007 Dernière intervention - 9 oct. 2007 à 07:35
0
Utile
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
Commenter la réponse de cs_juha
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 9 oct. 2007 à 11:25
0
Utile
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²
Commenter la réponse de cs_MPi
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 9 oct. 2007 à 11:29
0
Utile
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²
Commenter la réponse de cs_MPi
cs_juha 12 Messages postés jeudi 4 octobre 2007Date d'inscription 22 octobre 2007 Dernière intervention - 9 oct. 2007 à 13:27
0
Utile
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.
Commenter la réponse de cs_juha
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 9 oct. 2007 à 23:56
0
Utile
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²
Commenter la réponse de cs_MPi
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 11 oct. 2007 à 11:34
0
Utile
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²
Commenter la réponse de cs_MPi
cs_juha 12 Messages postés jeudi 4 octobre 2007Date d'inscription 22 octobre 2007 Dernière intervention - 11 oct. 2007 à 13:10
0
Utile
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.
Commenter la réponse de cs_juha

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.