none
Outlook/attribution de catégories à tous les emails d'un répertoire. RRS feed

  • Question

  • bonjour,

    J'aimerais dans Outlook 2010, créer une macro qui attribue une catégorie à tous les emails d'un répertoire. J'ai trouvé ce code mais il ne fonctionne pas (sous Outlook 2007 et 2010). Dans le détail, il sélectionne un répertoire et lui attribue une catégorie qui a le même nom que ce dernier. La manip ne fonctionne que sur l'email sélectionné lors du lancement de la macro. Quelqu'un pourrait-il m'expliquer pourquoi ou mieux trouver une alternative qui marche :) ?

    D'avance merci !

    Sub essai()
     
    'Déclaration des Objets et variables
    Dim MonApply As Outlook.Application
    Dim Expl As Explorer
    Dim myNameSpace As NameSpace
    Dim myFolder As MAPIFolder
    Dim myItems As Items
    Dim xi As Integer
     
    'Instance des Objets
        Set MonApply = Outlook.Application 'Application Outlook
     
        'Expl nous donne le dossier courant
        Set Expl = ActiveExplorer
        'Permet d'accéder à toutes les données Outlook qui y sont stockées
        Set myNameSpace = MonApply.GetNamespace("MAPI")
     
        'On recupère l'ID du dossier courant puis on se positionne dans ce dossier
        'pour recupérer tous les messages
        Set myFolder = myNameSpace.GetFolderFromID(Expl.CurrentFolder.EntryID)
     
        'La variable myItems prendra comme valeur
        'tous les messages du dossier courant
     
        Set myItems = myFolder.Items
     
        For xi = 1 To myItems.Count
          myItems.Item(xi).Categories = myFolder.Name 'le problème se situe dans ce for: seul l'item sélectionné au moment du lancement de la macro est pris en compte et pas les autres.
     
        Next xi
     
    End Sub
    mardi 24 août 2010 12:47

Réponses

  • j'ai trouvé finalement, j'ai juste oublié de sauver la modification... le code ci dessous fonctionne (sans sendkeys et sans display)...

    Sub essai()
    
    'Déclaration des Objets et variables
    Dim MonApply As Outlook.Application
    Dim Expl As Explorer
    Dim myNameSpace As NameSpace
    Dim myFolder As MAPIFolder
    Dim myItems As Items
    
    'Instance des Objets
      Set MonApply = Outlook.Application 'Application Outlook
       'Expl nous donne le dossier courant
      Set Expl = ActiveExplorer
      'Permet d'accéder à toutes les données Outlook qui y sont stockées
      Set myNameSpace = MonApply.GetNamespace("MAPI")
       'On recupère l'ID du dossier courant puis on se positionne dans ce dossier
      'pour recupérer tous les messages
      Set myFolder = myNameSpace.GetFolderFromID(Expl.CurrentFolder.EntryID)
       'La variable myItems prendra comme valeur
      'tous les messages du dossier courant
       Set myItems = myFolder.Items
       For Each it In myItems
       it.Categories = "urgent ou boulot"
       it.Save
       Next
    
    End Sub
    • Marqué comme réponse jeepeez mercredi 25 août 2010 07:33
    • Non marqué comme réponse jeepeez jeudi 26 août 2010 06:38
    • Modifié jeepeez jeudi 26 août 2010 06:40 vrai réponse
    • Marqué comme réponse jeepeez jeudi 26 août 2010 06:55
    mardi 24 août 2010 18:34

Toutes les réponses

  • bonjour celegorm,

    as-tu le même problème si tu utilise cette méthode,

    For Each it In myItems

    isabelle

    Le 2010-08-24 08:47, celegorm a écrit :
    bonjour,

    J'aimerais dans Outlook 2010, créer une macro qui attribue une catégorie à tous les emails d'un répertoire. J'ai trouvé ce code mais il ne fonctionne pas (sous Outlook 2007 et 2010). Dans le détail, il sélectionne un répertoire et lui attribue une catégorie qui a le même nom que ce dernier. La manip ne fonctionne que sur l'email sélectionné lors du lancement de la macro. Quelqu'un pourrait-il m'expliquer pourquoi ou mieux trouver une alternative qui marche :) ?

    D'avance merci !

    Sub essai()
    
    'Déclaration des Objets et variables
    Dim MonApply As Outlook.Application
    Dim Expl As Explorer
    Dim myNameSpace As NameSpace
    Dim myFolder As MAPIFolder
    Dim myItems As Items
    Dim xi As Integer
    
    'Instance des Objets
        Set MonApply = Outlook.Application 'Application Outlook
         'Expl nous donne le dossier courant
        Set Expl = ActiveExplorer
        'Permet d'accéder à toutes les données Outlook qui y sont stockées
        Set myNameSpace = MonApply.GetNamespace("MAPI")
         'On recupère l'ID du dossier courant puis on se positionne dans ce dossier
        'pour recupérer tous les messages
        Set myFolder = myNameSpace.GetFolderFromID(Expl.CurrentFolder.EntryID)
         'La variable myItems prendra comme valeur
        'tous les messages du dossier courant
         Set myItems = myFolder.Items
         For xi = 1 To myItems.Count
          myItems.Item(xi).Categories = myFolder.Name 'le problème se situe dans ce for: seul l'item sélectionné au moment du lancement de la macro est pris en compte et pas les autres.
         Next xi
    
    End Sub
    mardi 24 août 2010 15:31
  • si je supprime

     For xi = 1 To myItems.Count
      myItems.Item(xi).Categories = myFolder.Name 
      Next xi
    

     et le remplace par

    For Each it In myItems
     myItems.Item(it).Categories = "urgent ou boulot"
      Next it

    ça me met "erreur d'exécution 13, incompatibilité de type".

    truc "amusant", avec le code ci dessous, chaque email du répertoire sélectionné est bien affiché.

    For xi = 1 To myItems.Count
    myItems.Item(xi).Display
    Next xi
    

    merci quand même de votre aide

    • Modifié jeepeez mardi 24 août 2010 16:03 présentation
    mardi 24 août 2010 16:01
  • essaie comme ça,

    For Each it In myItems
     it.Display
    Next

    ps/ est tu certain de l'existance de la catégorie "urgent ou boulot"

    isabelle
     Le 2010-08-24 12:01, celegorm a écrit : si je supprime

     For xi = 1 To myItems.Count
       myItems.Item(xi).Categories = myFolder.Name
       Next xi
    

      et le remplace par

    For Each it In myItems
     myItems.Item(it).Categories = "urgent ou boulot"
        Next it

    ça me met "erreur d'exécution 13, incompatibilité de type".

    truc "amusant", avec le code ci dessous, chaque email du répertoire sélectionné est bien affiché.

    For xi = 1 To myItems.Count
    myItems.Item(xi).Display
    Next xi
    

    merci quand même de votre aide

    mardi 24 août 2010 16:27
  • j'ai essayé

    For Each it In myItems
     it.Display
    Next

    ça marche parfaitement

    j'ai ensuite modifié le nom de ma catégorie en "urgent" (des fois que les espaces créent un pb)... mais pas de changement avec ce code:

    For Each it In myItems
     it.Categories = "urgent"
    Next
    seul le premier email est mis dans la catégorie "urgent"...
    mardi 24 août 2010 16:40
  • et comme ceci,

    For Each it In myItems
       it.ShowCategoriesDialog
     Next

     isabelle

    mardi 24 août 2010 17:22
  • intéressant...! j'arrive bien au menu catégories de chaque email... mais comment faire pour cocher la case automatiquement ?

    le "mystère" reste entier pour le "bug" de la fonction myItems.Item(it).Categories...

    mardi 24 août 2010 17:28
  • j'ai trouvé finalement, j'ai juste oublié de sauver la modification... le code ci dessous fonctionne (sans sendkeys et sans display)...

    Sub essai()
    
    'Déclaration des Objets et variables
    Dim MonApply As Outlook.Application
    Dim Expl As Explorer
    Dim myNameSpace As NameSpace
    Dim myFolder As MAPIFolder
    Dim myItems As Items
    
    'Instance des Objets
      Set MonApply = Outlook.Application 'Application Outlook
       'Expl nous donne le dossier courant
      Set Expl = ActiveExplorer
      'Permet d'accéder à toutes les données Outlook qui y sont stockées
      Set myNameSpace = MonApply.GetNamespace("MAPI")
       'On recupère l'ID du dossier courant puis on se positionne dans ce dossier
      'pour recupérer tous les messages
      Set myFolder = myNameSpace.GetFolderFromID(Expl.CurrentFolder.EntryID)
       'La variable myItems prendra comme valeur
      'tous les messages du dossier courant
       Set myItems = myFolder.Items
       For Each it In myItems
       it.Categories = "urgent ou boulot"
       it.Save
       Next
    
    End Sub
    • Marqué comme réponse jeepeez mercredi 25 août 2010 07:33
    • Non marqué comme réponse jeepeez jeudi 26 août 2010 06:38
    • Modifié jeepeez jeudi 26 août 2010 06:40 vrai réponse
    • Marqué comme réponse jeepeez jeudi 26 août 2010 06:55
    mardi 24 août 2010 18:34
  • argrrr..
    NNTPBridge est en blème
    isabelle

    Le 2010-08-27 20:47, isabelleV a écrit :

    merci celegorm pour ce retour, ah! je garde "il faut se rappeler la sauvegarde" @+ isabelle

    samedi 28 août 2010 01:17