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

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

Votre réponse

11 réponses

Meilleure réponse
Messages postés
12
Date d'inscription
jeudi 4 octobre 2007
Dernière intervention
22 octobre 2007
- 10 oct. 2007 à 13:37
3
Merci
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.

Merci cs_juha 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_juha
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 5 oct. 2007 à 00:08
0
Merci
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
Messages postés
12
Date d'inscription
jeudi 4 octobre 2007
Dernière intervention
22 octobre 2007
- 8 oct. 2007 à 14:35
0
Merci
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 8 oct. 2007 à 16:52
0
Merci
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
Messages postés
12
Date d'inscription
jeudi 4 octobre 2007
Dernière intervention
22 octobre 2007
- 9 oct. 2007 à 07:35
0
Merci
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 9 oct. 2007 à 11:25
0
Merci
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 9 oct. 2007 à 11:29
0
Merci
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
Messages postés
12
Date d'inscription
jeudi 4 octobre 2007
Dernière intervention
22 octobre 2007
- 9 oct. 2007 à 13:27
0
Merci
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 9 oct. 2007 à 23:56
0
Merci
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 11 oct. 2007 à 11:34
0
Merci
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
Messages postés
12
Date d'inscription
jeudi 4 octobre 2007
Dernière intervention
22 octobre 2007
- 11 oct. 2007 à 13:10
0
Merci
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.