Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Outlook > VBA Outlook
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2012, 09h16   #1
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
Par défaut Ranger un mail dans un dossier en fonction de son objet

Bonjours a tous et bonne année

J'utilise 2 codes :
- le premier pour modifier l'objet d'un mail :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Sub Objet_CN()
 
    Dim Exp As Explorer
    Dim Sel As Selection
    Dim Itm As MailItem
 
 
    Set Exp = ActiveExplorer
    Set Sel = Exp.Selection
 
    For Each Itm In Sel
        Itm.Subject = Format(Itm.ReceivedTime, "yyyy/mm/dd") & " _ CN _ " & Itm.Subject
        Itm.Subject = Replace(Itm.Subject, "/", "-")
 
        Itm.Save
 
 
    Next Itm
 
        Set Itm = Nothing
        Set Sel = Nothing
        Set Exp = Nothing
 
End Sub
 '-------------------------------------------------------------------------
Sub Objet_FR()
 
    Dim Exp As Explorer
    Dim Sel As Selection
    Dim Itm As MailItem
 
 
    Set Exp = ActiveExplorer
    Set Sel = Exp.Selection
 
    For Each Itm In Sel
        Itm.Subject = Format(Itm.ReceivedTime, "yyyy/mm/dd") & " _ FR _ " & Itm.Subject
        Itm.Subject = Replace(Itm.Subject, "/", "-")
 
        Itm.Save
 
 
    Next Itm
 
        Set Itm = Nothing
        Set Sel = Nothing
        Set Exp = Nothing
 
End Sub
qui me donne un truc du style :
Citation:
Document
qui devient
Citation:
2011-12-21 _ CN _ Document
-le second code me sert a ranger mon mail dans un dossier :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Sub sav_mail_as_msg(Optional objCurrentMessage As Object)
'By Oliv' juillet 2007 pour OUTLOOK 2003
    If objCurrentMessage Is Nothing Then Set objCurrentMessage = ActiveInspector.CurrentItem
    'Ici on construit le nom du fichier qui sera créé
    NomExport = objCurrentMessage.Subject ' & objCurrentMessage.CreationTime
    'Ici on défini le répertoire où l'enregistrer
    repertoire = "\\Hp\FCL\Messages Outlook\"
    'repertoire = BrowseForFolder("Choisissez la destination", SDossier(5, 0)) & "\"
    'Ici on supprime les caractères non autorisé dans les noms de fichiers
    PathNomExport = repertoire & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
    NomExport, "\", ""), "/", ""), ":", ""), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160) & ".msg"
        'PathNomExport = repertoire & "Email " & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
        'NomExport, "\", ""), "/", ""), ":", ""), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160) & ".msg"
 
    'Ici on vérifie que le fichier n'existe pas déjà sinon il serait écrasé
    n = 1
    MemPath = PathNomExport
    While Dir(PathNomExport) <> ""
        MsgBox "Le fichier " & vbCr & PathNomExport & vbCr & "existe déjà", vbInformation
        PathNomExport = Left(MemPath, Len(MemPath) - 4) & "(" & n & ")" & ".msg"
        n = n + 1
    Wend
    objCurrentMessage.SaveAs PathNomExport, OlSaveAsType.olMSG
End Sub
 '-------------------------------------------------------------------------
Sub LanceSurOuvert()
    sav_mail_as_msg
End Sub
  '-------------------------------------------------------------------------
Sub LanceSurSelection()
    Dim MonOutlook As Outlook.Application
    Dim LeMail As Object
    Dim LesMails As Outlook.Selection
    Set MonOutlook = Outlook.Application
    Set LesMails = MonOutlook.ActiveExplorer.Selection
    For Each LeMail In LesMails
        sav_mail_as_msg LeMail
    Next LeMail
    Set LesMails = Nothing
    MsgBox "Fin de traitement"
End Sub


Mes 2 codes marche mais je voudrais modifier le second pour que mon mail soit ranger dans le dossier en fonction de l'objet.
Par exemple dans ce cas, le mail "2011-12-21 _ CN _ Document" doit étre ranger dans le dossier "\\Hp\FCL\Messages Outlook\CN\"

PS : mon premier code existe plusieurs fois en remplaçant CN par FR ou CC ou MO.
J'ai donc plusieurs modification d'objet possible

En espérant avoir été suffisamment clair, merci d'avance de votre aide.
FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h09   #2
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
J'ai plus ou moins résolu mon problème avec le code suivant:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Sub sav_mail_as_msg(Optional objCurrentMessage As Object)
'By Oliv' juillet 2007 pour OUTLOOK 2003
    If objCurrentMessage Is Nothing Then Set objCurrentMessage = ActiveInspector.CurrentItem
    'Ici on construit le nom du fichier qui sera créé
    NomExport = objCurrentMessage.Subject ' & objCurrentMessage.CreationTime
    NomDos = Mid(objCurrentMessage.Subject, 14, 5)
    'Ici on défini le répertoire où l'enregistrer
 
    If NomDos = "CN  _" Then
        repertoire = "\\Hp\FCL\Messages Outlook\CN\"
    Else
    If NomDos = "FR  _" Then
        repertoire = "\\Hp\FCL\Messages Outlook\FR\"
    End If
    End If
 
 
    'repertoire = BrowseForFolder("Choisissez la destination", SDossier(5, 0)) & "\"
    'Ici on supprime les caractères non autorisé dans les noms de fichiers
    PathNomExport = repertoire & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
    NomExport, "\", ""), "/", ""), ":", ""), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160) & ".msg"
        'PathNomExport = repertoire & "Email " & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
        'NomExport, "\", ""), "/", ""), ":", ""), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160) & ".msg"
 
    'Ici on vérifie que le fichier n'existe pas déjà sinon il serait écrasé
    n = 1
    MemPath = PathNomExport
    While Dir(PathNomExport) <> ""
        MsgBox "Le fichier " & vbCr & PathNomExport & vbCr & "existe déjà", vbInformation
        PathNomExport = Left(MemPath, Len(MemPath) - 4) & "(" & n & ")" & ".msg"
        n = n + 1
    Wend
    objCurrentMessage.SaveAs PathNomExport, OlSaveAsType.olMSG
End Sub
Le problème est qu'il y a 16 lignes semblable à :
Code :
1
2
3
4
    If NomDos = "FR" Then
        repertoire = "\\Hp\FCL\Messages Outlook\FR\"
 
    End If
Sa fait un peu beaucoup

Y a t'il un moyen de simplifier ???

Et si "NomDos" ne correspond a rien comment faire en sorte que le mail soit envoyé dans un autre dossier "A Trier" par exemple dans "\\Hp\FCL\Messages Outlook\" ???
FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h42   #3
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 26
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Spécialiste progiciel
Secteur : Service public

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 597
Points : 1 597
Envoyer un message via MSN à carden752
Bonjour,

Pourquoi ne pas utiliser la fonction mid pour couper une chaine de caractère.

Quelque chose de ce style :

Code :
 repertoire = "\\Hp\FCL\Messages Outlook\" & mid(NomDos,2) & "\"
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 16h41   #4
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
Je vois se que tu veu dire mais malheureusement ton solution ne peut pas fonctionner dans tous les cas.

En effet j'ai des cas qui vont resembler à :
Code :
1
2
3
4
    If NomDos = "CT" Then
        repertoire = "\\Hp\FCL\Messages Outlook\Contrat\"
 
    End If
FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 20h08   #5
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
bonsoir,

un Select Case :

Code :
1
2
3
4
5
6
7
8
Select Case NomDos
    Case "CN  _"
        repertoire = "\\Hp\FCL\Messages Outlook\CN\"
    Case "FR"
        repertoire = "\\Hp\FCL\Messages Outlook\FR\"
 Case Else
  repertoire = "\A_TRIER\"
 End Select
bbil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 14h00   #6
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
beaucoup pour votre aide.

Je crois (grâce a vous) avoir reussi se que je voulais.

FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h26.


 
 
 
 
Partenaires

Hébergement Web