Règle de mails [VBA Outlook] - VB/VBA/VBS - Programmation
MarshPosté le 16-04-2012 à 15:16:01
Hello,
J'aurai besoin d'un coup de main sur du VBA (je ne suis pas développeur, même si j'arrive généralement à me dépatouiller pour faire ce dont j'ai besoin).
Objectifs de mon script : création automatique de folder et des règles de messages associés sur Outlook. En gros, dans mon boulot je fais du ticketing, et je créé à chaque fois un dossier dont le nom corresponds au numéro de l'incident. Tous mes échanges de mails avec les clients / constructeurs portent ensuite la référence de l'incident dans l'objet, et je voudrais rediriger automatiquement les mails dans les dossiers correspondants.
Ce que j'arrive à faire : - Saisir le numéro de l'incident - Créer le folder correspondant dans Outlook - Créer le dossier correspondant sur le disque (pour l'enregistrement des fichiers joints, etc) - Créer une règle pour rediriger le courier entrant matchant le numéro de l'incident dans le folder spécifié
Ce que je n'arrive pas à faire : - Créer une règle pour rediriger le courrier sortant matchant le numéro de l'incident dans le folder spécifié.
Sub Ouverture()
Dim myCases As String Dim myDirectory As String Dim fullPathCreation As String 'Spécifier ici le répertoire dans lequel vous voulez créer les tickets (ce répertoire doit déjà exister) myCases = "Tickets" 'Spécifier le répertoire local correspondant au ticket myDirectory = "D:\TICKETS\Test\"
Dim myolApp As Outlook.Application Dim myNamespace As Outlook.NameSpace
'Création du nouveau dossier dans le répertoire indiqué précedemment Set myolApp = CreateObject("Outlook.Application" ) Set myNamespace = myolApp.GetNamespace("MAPI" ) 'Demande à l'utilisateur le numéro de ticket FolderName = InputBox("Indiquer le numéro du ticket :" ) Set objStrCtc = myNamespace.GetDefaultFolder(olFolderInbox).Folders(myCases).Folders.Add(FolderName, olFolderInbox) objStrCtc.ShowAsOutlookAB = True 'Création du répertoire local fullPathCreation = myDirectory + FolderName If Len(Dir(fullPathCreation, vbDirectory)) = 0 Then MkDir fullPathCreation End If
Dim colRules As Outlook.Rules Dim oRule As Outlook.Rule Dim colRuleActions As Outlook.RuleActions Dim oMoveRuleAction As Outlook.MoveOrCopyRuleAction Dim oExceptSubject As Outlook.TextRuleCondition Dim oInbox As Outlook.Folder Dim oMoveTarget As Outlook.Folder
'Selectionne le folder cible de la règle Set oInbox = Application.Session.GetDefaultFolder(olFolderInbox) Set oMoveTarget = oInbox.Folders(myCases).Folders(FolderName)
'Récupère les règles existantes Set colRules = Application.Session.DefaultStore.GetRules()
'Créer les règles IN et OUT Set oRuleIn = colRules.Create(FolderName + "_IN", olRuleReceive) Set oRuleOut = colRules.Create(FolderName + "_OUT", olRuleSend)
'Définition la règle IN Set oExceptSubject = oRuleIn.Conditions.Subject With oExceptSubject .Enabled = True .Text = Array(FolderName) End With
Set oMoveRuleAction = oRuleIn.Actions.MoveToFolder With oMoveRuleAction .Folder = oMoveTarget .Enabled = True End With
'Définition la règle OUT Set oExceptSubject = oRuleOut.Conditions.Subject With oExceptSubject .Enabled = True .Text = Array(FolderName) End With
Set oMoveRuleAction = oRuleOut.Actions.MoveToFolder With oMoveRuleAction .Folder = oMoveTarget .Enabled = True End With
'Update the server and display progress dialog colRules.Save
End Sub
La partie qui déconne :
'Définition la règle OUT Set oExceptSubject = oRuleOut.Conditions.Subject With oExceptSubject .Enabled = True .Text = Array(FolderName) End With
Set oMoveRuleAction = oRuleOut.Actions.MoveToFolder With oMoveRuleAction .Folder = oMoveTarget .Enabled = True End With
Le message d'erreur qui m'est ressorti l'est sur le dernier .Enabled = True => impossible d'activer la règle. En effet lors de mes tests, lorsque je regarde dans la liste des règles après avoir lancé le script, les règles sont bien créées, mais la règle OUT n'est pas activée.
Le message d'erreur :
Citation :
Opération non valide. Impossible d'aciver cette action de règle, car la règle est en lecture seule, n'est pas valide pour le type de règle, ou cette action entre en conflit avec une autre action de la règle.
Cependant, je ne comprend pas. La règle n'est pas en lecture seule, et est valide pour ce type de règle ? Et je ne vois pas pourquoi elle entrerait en conflit avec une autre action de la règle. Surtout que l'autre partie (partie IN donc) fonctionne bien. Les types olRuleRecieve et olRuleSend sont les mêmes normalement...
Bref, je bloque, et mes recherches sur le net et les différents forums ne m'ont pas aidé
Marsh Posté le 16-04-2012 à 15:16:01
Hello,
J'aurai besoin d'un coup de main sur du VBA (je ne suis pas développeur, même si j'arrive généralement à me dépatouiller pour faire ce dont j'ai besoin).
Objectifs de mon script : création automatique de folder et des règles de messages associés sur Outlook. En gros, dans mon boulot je fais du ticketing, et je créé à chaque fois un dossier dont le nom corresponds au numéro de l'incident. Tous mes échanges de mails avec les clients / constructeurs portent ensuite la référence de l'incident dans l'objet, et je voudrais rediriger automatiquement les mails dans les dossiers correspondants.
Ce que j'arrive à faire :
- Saisir le numéro de l'incident
- Créer le folder correspondant dans Outlook
- Créer le dossier correspondant sur le disque (pour l'enregistrement des fichiers joints, etc)
- Créer une règle pour rediriger le courier entrant matchant le numéro de l'incident dans le folder spécifié
Ce que je n'arrive pas à faire :
- Créer une règle pour rediriger le courrier sortant matchant le numéro de l'incident dans le folder spécifié.
Sub Ouverture()
Dim myCases As String
Dim myDirectory As String
Dim fullPathCreation As String
'Spécifier ici le répertoire dans lequel vous voulez créer les tickets (ce répertoire doit déjà exister)
myCases = "Tickets"
'Spécifier le répertoire local correspondant au ticket
myDirectory = "D:\TICKETS\Test\"
Dim myolApp As Outlook.Application
Dim myNamespace As Outlook.NameSpace
'Création du nouveau dossier dans le répertoire indiqué précedemment
Set myolApp = CreateObject("Outlook.Application" )
Set myNamespace = myolApp.GetNamespace("MAPI" )
'Demande à l'utilisateur le numéro de ticket
FolderName = InputBox("Indiquer le numéro du ticket :" )
Set objStrCtc = myNamespace.GetDefaultFolder(olFolderInbox).Folders(myCases).Folders.Add(FolderName, olFolderInbox)
objStrCtc.ShowAsOutlookAB = True
'Création du répertoire local
fullPathCreation = myDirectory + FolderName
If Len(Dir(fullPathCreation, vbDirectory)) = 0 Then
MkDir fullPathCreation
End If
Dim colRules As Outlook.Rules
Dim oRule As Outlook.Rule
Dim colRuleActions As Outlook.RuleActions
Dim oMoveRuleAction As Outlook.MoveOrCopyRuleAction
Dim oExceptSubject As Outlook.TextRuleCondition
Dim oInbox As Outlook.Folder
Dim oMoveTarget As Outlook.Folder
'Selectionne le folder cible de la règle
Set oInbox = Application.Session.GetDefaultFolder(olFolderInbox)
Set oMoveTarget = oInbox.Folders(myCases).Folders(FolderName)
'Récupère les règles existantes
Set colRules = Application.Session.DefaultStore.GetRules()
'Créer les règles IN et OUT
Set oRuleIn = colRules.Create(FolderName + "_IN", olRuleReceive)
Set oRuleOut = colRules.Create(FolderName + "_OUT", olRuleSend)
'Définition la règle IN
Set oExceptSubject = oRuleIn.Conditions.Subject
With oExceptSubject
.Enabled = True
.Text = Array(FolderName)
End With
Set oMoveRuleAction = oRuleIn.Actions.MoveToFolder
With oMoveRuleAction
.Folder = oMoveTarget
.Enabled = True
End With
'Définition la règle OUT
Set oExceptSubject = oRuleOut.Conditions.Subject
With oExceptSubject
.Enabled = True
.Text = Array(FolderName)
End With
Set oMoveRuleAction = oRuleOut.Actions.MoveToFolder
With oMoveRuleAction
.Folder = oMoveTarget
.Enabled = True
End With
'Update the server and display progress dialog
colRules.Save
End Sub
La partie qui déconne :
'Définition la règle OUT
Set oExceptSubject = oRuleOut.Conditions.Subject
With oExceptSubject
.Enabled = True
.Text = Array(FolderName)
End With
Set oMoveRuleAction = oRuleOut.Actions.MoveToFolder
With oMoveRuleAction
.Folder = oMoveTarget
.Enabled = True
End With
Le message d'erreur qui m'est ressorti l'est sur le dernier .Enabled = True => impossible d'activer la règle.
En effet lors de mes tests, lorsque je regarde dans la liste des règles après avoir lancé le script, les règles sont bien créées, mais la règle OUT n'est pas activée.
Le message d'erreur :
Opération non valide. Impossible d'aciver cette action de règle, car la règle est en lecture seule, n'est pas valide pour le type de règle, ou cette action entre en conflit avec une autre action de la règle.
Cependant, je ne comprend pas. La règle n'est pas en lecture seule, et est valide pour ce type de règle ? Et je ne vois pas pourquoi elle entrerait en conflit avec une autre action de la règle.
Surtout que l'autre partie (partie IN donc) fonctionne bien. Les types olRuleRecieve et olRuleSend sont les mêmes normalement...
Bref, je bloque, et mes recherches sur le net et les différents forums ne m'ont pas aidé
Quelqu'un aurait une idée ?