Problème pour la fabrication d'une Macro de recherche dans Outlook 2003

Rose Pourpre Messages postés 5 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 30 octobre 2006 - 26 oct. 2006 à 05:34
Rose Pourpre Messages postés 5 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 30 octobre 2006 - 30 oct. 2006 à 03:36
Bonsoir,



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 





 




Voilà je suis nouvelle sur votre Forum, et je viens demander l'aide d'une âme (ou des âmes) charitable.


Voici, mon problème, je travaille avec Outlook 2003 avec plusieurs comptes de messageries, pour des raisons évidentes de facilités, j'ai crée plusieurs règles, mais sous Outlook 2003 les arguments de créations pour celles-ci sont assez peut nombreuses et pas toujours fonctionnelles.



 




Pour être plus claire, J'utilise Outlook 2003 (Fr) avec Kis 6 (KasperSky) configuré comme ma règle principale.


En résumé :


0-KasperSky


1-Ajout d'un drapeau vert quant je suis la cible.


2-Ajout d'un drapeau jaune quant dans l'objet il y a [!! SPAM] ou [?? Probable Spam].


3-Ajout d'un drapeau orange quant dans l'objet il y [adulte].


4-Ajout d'un drapeau violet quant je ne suis pas la cible.


5-Ajout d'un drapeau rouge quant dans l'objet il y [!! VIRUS].


6-Règle de classement des mails de l'expéditeur 1.


7-Règle de classement des mails de l'expéditeur 2.


…………………….


…………………….


…………………….


…………………….


Dans mon "Dossier personnel" (sous Outlook 2003), j'ai les répertoires habituels plus un autre de ma création que j'ai nommée "Archive", dans celui-ci j'ai aussi crée différentes rubriques (Amis, Administration, Provider, Famille, Informatique, Clients, …..), chacune de ces rubriques possèdent des sous rubriques (par exemple pour Amis : Paul, Amandine, Louis, Michel, etc..) et chacune de ces sous rubriques est subdiviser en deux (Reçus et Envoyés).


Cela peut paraître assez lourd, mais cela me fait gagner beaucoup de temps, car chacun des mails que je reçois est directement classé (ainsi que ceux que j'envoie), cela me permet de les retrouver plus facilement et rapidement.


Les seuls mails qui finissent par se retrouver tous seuls dans ma boite de réceptions sont ceux qui passent entre les mailles (chose que je rectifie au fur et à mesure).



 




Malheureusement rien n'est parfait, lorsque je veux répondre aux mails qui sont arrivé et non lu, je suis obliger de faire une "Recherche avancée" dans Outlook 2003, avec comme seuls critères "Dans Archives" (le nom de mon répertoire de classement dans "Dossier Personnel") et "non lu(s)".



 




Ce que j'aimerai et qui m'est complètement inaccessible pour l'instant (par rapport aux macros et autres), car je suis complètement une néophyte dans ce secteur, c'est de faire (ou de trouver) une macro qui rechercherai dans mon répertoire "Archives" (dans Outlook 2003) et ses sous-répertoires, les mails "Non lus" pour les annoter "Lus", puis en faire une "copie" (seulement des "Non lus") dans ma "Boîte de réception" en les annotant (seulement les copies) "Non lus" et en leurs assignant un "drapeau bleu".



 




Merci d'avance de l'aide que vous donnerez à une débutante complètement dépassé par cela.


 
A voir également:

7 réponses

cs_wape Messages postés 262 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 19 décembre 2010 12
26 oct. 2006 à 13:16
Bonjour,

Voici un petit exemple qui pourra peut-être t'aider :

Sub Recherche()


Dim oNms As NameSpace
Dim oFdr As MAPIFolder
Dim oFd1 As MAPIFolder
Dim oFd2 As MAPIFolder
Dim oFd3 As MAPIFolder
Dim oItm As MailItem
Dim oItc As MailItem


Set oNms = Application.GetNamespace("MAPI")


'Se positionner dans le dossier "Archives"
Set oFdr = oNms.Folders("Dossiers personnels").Folders("Archives")

'Parcourir les sous-dossiers du 1er niveau
For Each oFd1 In oFdr.Folders
   'Parcourir les sous-dossiers du 2ème niveau
   For Each oFd2 In oFd1.Folders
      'Parcourir les sous-dossiers du 3ème niveau
      For Each oFd3 In oFd2.Folders
         'Parcourir les messages
         For Each oItm In oFd3.Items
            'Traiter uniquement les messages non lus
            If oItm.UnRead = True Then
               'Afficher l'emplacement et le sujet du message traité (pour debug)
               'MsgBox "Message traité: " & oFd1.Name & "/" & oFd2.Name & "/" & oFd3.Name & "/" & oItm.Subject
               'Créer une copie du message original
               Set oItc = oItm.Copy
               'Mettre le drapeau bleu sur la copie
               oItc.FlagIcon = olBlueFlagIcon
               'Déplacer la copie dans la boîte de réception
               oItc.Move oNms.GetDefaultFolder(olFolderInbox)
               'Marquer le message original comme lu
               oItm.UnRead = False
            End If
         Next oItm
      Next oFd3
   Next oFd2
Next oFd1


'Libérer les ressources
Set oItc = Nothing
Set oItm = Nothing
Set oFd3 = Nothing
Set oFd2 = Nothing
Set oFd1 = Nothing
Set oFdr = Nothing
Set oNms = Nothing


End Sub

wape
0
Rose Pourpre Messages postés 5 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 30 octobre 2006
26 oct. 2006 à 22:02
Bonsoir,



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 





 





 




Merci beaucoup pour le code, mais je l'avoue je ne sais pas trop ce qui se passe avec, voilà j'ai copié ton code dans une Macro, et lors du premier essai j'ai eu une erreur que j'ai pu corriger facilement (ce n'était pas une erreur de code mais de pluriel "Dossiers personnels" pour "Dossier personnel").



 




Mais lors du second essai une autre erreur est survenu dans Microsoft Visual-Basic la ligne mit en cause est celle contenant "Next oItm".



 




Comme je l'ai dit, je ne comprends pas grand-chose à cela, pourrais tu si évidement tu as le temps me dire ce qui ne va pas.



 




Tout de fois je te remercie quant même pour ce code.



 




J'ai aussi une autre question, je me souviens qu'avant dans l'Excel, il y avait une fonction qui permettait d'enregistrer dans une macro certaines séquences aux claviers et à la souris pour les traduire en code par la suite pour la fabrication de macro d'automatisation, est ce que cela existe encore dans Outlook 2003 (je ne suis pas chez pour l'instant, c'est une chose que je vérifierai à mon retour, mais je te pose quant même la question on ne sait jamais) ?



 





 




Merci d'avance encore une fois du temps que tu as mit pour me répondre et de celui que tu pourrais mettre à me rerépondre.


 
0
Rose Pourpre Messages postés 5 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 30 octobre 2006
26 oct. 2006 à 23:22
Re-Bonsoir,



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 





 




En somme voici exactement ce que j'aimerai que face cette macro (sans lancement automatique) :


1-Recherche dans "Archives" et ses sous dossiers (peut importe le nombre), des mails non-lus.


2-Application de deux actions sur le résultat (uniquement) de cette recherche :



  
 a-Copie des mails résultant de la recherche dans la "Boîte de réception".



    b-Transformations des mails (pas ceux de la "Boîte de réception") "non lus" en "Lu".


3-Recherche dans "Boite de réception" (pas des sous dossier), des mails non-lus.


4-Ajout d'un drapeau bleu, sur tous les mails résultant de cette recherche.



 




Quant j'y pense comme cela c'est sûre cela semble facile, mais quant je chipote pour voir comment faire, je m'embourbe et cela bien au dessus de ma tête.



 





 





 




P.S. Pour l'histoire des macros et Excel, je viens de vérifier, et la version 2003 possède toujours cette fonction, il est bien dommage que Outlook 2003 ne possède pas le même genre de fonctions, car cela simplifierai bien les choses.


 
0
cs_wape Messages postés 262 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 19 décembre 2010 12
26 oct. 2006 à 23:42
Bonsoir,

Pourrais-tu me dire exactement quel est le message d'erreur qui s'affiche à l'écran lorque la macro s'arrête sur la ligne "Next oItm" ?

Question subsidiaire : par rapport au dossier "Archives", les mails non lus se trouvent-ils forcément dans l'un des sous-sous-sous-dossiers "Reçus" ou peuvent-ils être ailleurs ?

wape
0

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

Posez votre question
Rose Pourpre Messages postés 5 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 30 octobre 2006
27 oct. 2006 à 01:13
Re-Bonsoir,

Pour commecer merci d'éssayer de résoudre l'un de mes problèmes, qui pour moi est insurmontable.

Pour répondre à ta première question voici ce qui est mit :
Erreur d'exécution '13':
Incompatibilité de type
Si je clique sur le bouton "Débogage", le programme Visual Basic s'ouvre et les deux mot "Next oItm" sont surligné en jaune.

Pour répondre à ta seconde question, les mails ne se trouve jamais dans la racine de "Archives", mais toujours dans l'un de ses sous répertoires, et il peut arrivé que cela ne soit pas directement dans un "Reçus" (quant je n'ai pas le temps de faire une rêgle je les classe sommairement pour par la suite plus facilement savoir quels mails ne possèdent pas de rêgles)

 
0
cs_wape Messages postés 262 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 19 décembre 2010 12
27 oct. 2006 à 12:49
Bonjour,

Merci des réponses. Ci-dessous un nouveau code, qui remplace le précédent :

Option Explicit


Dim oNms As NameSpace


Sub Recherche()


Dim oFdr As MAPIFolder
Dim oFdx As MAPIFolder


Set oNms = Application.GetNamespace("MAPI")


'Se positionner dans le dossier "Archives"
Set oFdr = oNms.Folders("Dossier personnel").Folders("Archives")


'Lire récursivement les sous-dossiers de "Archives"
For Each oFdx In oFdr.Folders
   Call LectureSousDossier(oFdx)
Next oFdx


End Sub


Sub LectureSousDossier(oFdr As MAPIFolder)


Dim oFdx As MAPIFolder
Dim oItm As MailItem
Dim oItc As MailItem
Dim oIts As Items


'Parcourir les éléments
Set oIts = oFdr.Items
For Each oItm In oIts
   'Vérifier qu'il s'agit bien d'un mail
   If oItm.Class = olMail Then
      'Traiter uniquement les messages non lus
      If oItm.UnRead = True Then
         'Créer une copie du message original
         Set oItc = oItm.Copy
         'Mettre le drapeau bleu sur la copie
         oItc.FlagIcon = olBlueFlagIcon
         'Déplacer la copie dans la boîte de réception
         oItc.Move oNms.GetDefaultFolder(olFolderInbox)
         'Marquer le message original comme lu
         oItm.UnRead = False
      End If
   End If
Next oItm


For Each oFdx In oFdr.Folders
   Call LectureSousDossier(oFdx)
Next oFdx


End Sub

wape
0
Rose Pourpre Messages postés 5 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 30 octobre 2006
30 oct. 2006 à 03:36
Bonsoir,



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 





 





 





 




Je viens de rentrer se soir de mon Weekend, encore merci de ton aide mais ton code pose encore un problème.


Le message d'erreur est identique à celui qui se trouve plus haut, et lorsque je clique sur "Débogage" cette fois ci les mots surlignés de jaune sont "Next oItm".



 




Mais les personnes chez qui j'ai passé le Weekend, mon parlé d'une fonction qui se trouve sous Outlook 2003 qui chez moi était désactivé (Mon fichier Pst date de Outlook 97, ce qui fait qu'il a masqué certaines fonctions), je les ai cherché et je viens de la trouver.


En sommes Outlook 2003 permet de fabriquer des dossiers "Virtuels" qui contiennent le résultat d'une recherche prédéfini à l'avance.


Dans mon cas, j'ai crée (et recrée certains qui ont été mit sous silence à cause de mon fichier PST), 4 dossiers "virtuels", que j'ai aussi placé dans mes Favoris d'Outlook 2003 :


1-Courrier indésirable non lu : ne contient que les mails "non lu" de se dossier.


2-Courrier "non lu" : contient les mails "non lu" de tous les dossiers sauf de entre autres les Courrier indésirables.


3-Courrier volumineux : comme son non le dit.


4- Pour le suivi : contient les mails possédant une annotation à suivre.


Ces dossiers se présents de la même manière qu'un dossier normal dans Outlook 2003, mais ne sont en fin de compte que "virtuels", ils ne contiennent pas vraiment de mail mais que le résultat d'une recherche (sans aucun chichi, pour ainsi dire).



 




En somme, par exemple lorsque je reçois un mail, celui-ci est traité par l'ensemble de mes règles (celle dont j'ai déjà parlé plus haut), une fois cela fait, ces mêmes règles ne peuvent laisser les mails que dans trois endroits bien précis :


1-Boite de réception.


2-Courrier indésirable.


3-Mon dossier "Archives"


Peut importe où se situe ces mails dans ces endroits, puisque non lu ils apparaitront tous dans mes dossiers "Virtuels".


Une fois ma lecture de ces dit mails faite, ils perdent automatiquement leurs status de "non lu", et donc ne font plus partie de ces dit dossiers, en somme exactement que ce que fait ta macro.



 




Encore une fois merci d'avoir essayé de m'aider, mais cette solution est bien plus pratique encore que mon idée de départ.



 





 




Tout de fois, comme tu peux le voir j'ai quant même essayé ta macro, c'était quant même le minimum que je pouvais faire, puisque tu as prit de ton temps pour répondre à ma demande.


Mais tout de fois sans avoir la maîtrise de ce genre de choses, je voudrais de te poser une question pour un peut mieux essayer de comprendre les macros et autres :


Pourquoi utilises-tu un balayage (un scanne) du répertoire archive avec une boucle définie pour ce faire au lieu des fonctions "
Search", "AdvancedSearch", "
SearchSubFolders" par exemple, y a-t-il une raison particulière ?




Car cette technique, consomme relativement beaucoup de ressources et de temps (je possède plus de 3.000 mails classé, que je ressors très souvent pour plusieurs raison).


Je compte quant même essayé de me lancer dans l'apprentissage de la création de macro c'est pour cela que je me permets de te poser cette question (n'y voit pas une critique, ce n'est vraiment pas mon but).



 




Je te remercie quant même du temps que tu m'as consacré.


 
0
Rejoignez-nous