Re,
Premièrement quelques remarques par rapport à la gestion de ta macro : je ne pense vraiment pas qu'utiliser Excel pour exécuter cette macro soit le plus optimal. Il faudra ouvrir un fichier Excel à chaque fois pour exécuter la macro, si quelqu'un est déjà dessus, ça ne marchera pas...
Je pense que le plus simple, est de créer une mini procédure en expliquant à l'utilisateur comment installer la macro, une fois installée, elle peut être lancée depuis Outlook très facilement... Il suffit de créer un bouton dans le bandeau, l'opérateur n'aura qu'à cliquer sur le bouton pour trier ses mails.
Exemple de bouton :
Mais il faut tout de même une base de donnée pour pouvoir trier correctement les mails dans les bons dossiers. C'est pourquoi, je garderai un fichier Excel avec un tableau connaissant l'arborescence des dossiers.
J'ai re-écrite ta macro, voilà comment j'ai procédé :
- J'ai gardé ton fichier Excel avec un tableau pour l'arborescence.
- Avoir ce fichier sans lancer la macro dessus permet d'avoir une maintenance aisée de celui-ci. Ainsi, si un jour tu dois rajouter des dossiers, il ne te reste qu'à les rajouter dans ton tableau.
- Tu mets ce fichier Excel sur le réseau de ton entreprise et le tour est joué...
- J'ai créé une macro sur outlook
- Cette macro ne fait que lire les données du tableau Excel puis le ferme
- Cette macro filtre et trie les mails aux bons endroits
- Voilà, c'est terminé !
La macro VBA pour Outlook à placer dans un nouveau module :
Sub Rgmt()
Dim oNs As Outlook.NameSpace
Dim oBoiteRecpt As Outlook.MAPIFolder
Dim oFiltre As Outlook.Items
Dim oDossierDest As Outlook.MAPIFolder
Dim eSrc As Workbook
Dim arr() As Variant
Dim i As Integer, j As Integer
Set eSrc = Workbooks.Open("C:\Users\XXXX\Downloads\rangement-emails.xlsm", True, True) 'À modifier
arr() = eSrc.Worksheets("Feuil1").Range("Tbl_Paramètres2").Value 'À modifier
eSrc.Close False
Set eSrc = Nothing
Set oNs = Application.GetNamespace("MAPI")
Set oBoiteRecpt = oNs.GetDefaultFolder(olFolderInbox)
For i = 1 To UBound(arr)
Set oFiltre = oBoiteRecpt.Items.Restrict("[Categories] = '" & arr(i, 1) & "' AND [UnRead] = False AND [ReceivedTime] < '" & DateValue(DateAdd("d", -5, Now())) & "'")
For j = oFiltre.Count To 1 Step -1
If arr(i, 3) = "" Then
Set oDossierDest = oBoiteRecpt.Folders(arr(i, 2))
ElseIf arr(i, 4) = "" Then
Set oDossierDest = oBoiteRecpt.Folders(arr(i, 2)).Folders(arr(i, 3))
Else
Set oDossierDest = oBoiteRecpt.Folders(arr(i, 2)).Folders(arr(i, 3)).Folders(arr(i, 4))
End If
oFiltre(j).Move oDossierDest
Next j
Next
Set oDossierDest = Nothing
Set Items = Nothing
Set oFolder = Nothing
Set oNs = Nothing
End Sub
Le fichier Excel :
J'ai créé un tableau plus petit pour faire des essais en interne, je l'ai laissé pour te donner une idée.
J'ai utilisé des tableaux structurés, il faut vraiment avoir le reflexe d'utiliser cet outil qui est vraiment très pratique.
Dis moi si ça marche
Bonne journée,
Baboutz
PS: Si la macro marche, je ne pense pas pour autant qu'elle soit terminée.. Que se passe-t-il si un dossier ou sous-dossier n'est pas créer chez l'opérateur qui exécute la macro ? Que se passe t'il si la catégorie n'existe pas ? Ça risque deplanter...