Bonjour,
Quand je sélectionne un mail reçu, j'aimerai faire une macro pour "créer une demande de réunion" à l'expéditeur de ce mail.
Avez-vous une idée ?
Merci de votre aide.
Bonjour,
Quand je sélectionne un mail reçu, j'aimerai faire une macro pour "créer une demande de réunion" à l'expéditeur de ce mail.
Avez-vous une idée ?
Merci de votre aide.
Bonjour et bienvenue sur le Forum Outlook
bien sur que c'est possible et que l'on a plein d'idées
par contre de ton côté tu en es où ? début de macro, version d'application (des méthodes pour faciliter ceci sont intégrés dans OL2007).
Dolphy
Bonjour,
Je débute en VBA mais j'ai quelques notions de base en macro Excel.
Professionnellement je tourne sous Outlook 2003 et c'est sous 2003 que je devrai faire cette macro.
A la maison je suis sous 2007 et cela m'intéresserai aussi beaucoup de pouvoir le faire.
Merci de votre accueil.
Dailyplanet
Salut,
ça tombe bien aujourd'hui, c'est la sortie d'un nouveau tuto sur l'initiation au VBA d'Outlook http://dolphy35.developpez.com/article/outlook/vba/
pour 2007 tu peux t'inspirer de ce code http://dolphy35.developpez.com/artic...ok/vba/#LV-A-5
pour 2003 c'est plus complexe
Impreigne toi du tuto et reviens nous donner ton avancement on pourra t'aider.
Dolphy
Merci, je vais y bosser ce week-end.
Par contre les 2 liens pointent sur le tuto Initiation VBA Outlook...
As-tu le lien pour le code Outlook 2007 ?
Dailyplanet
re,
pour 2007 c'est le second, il faut utiliser l'événement ItemContextMenuDisplay de l'objet Application du module de classe ThisOutlookSession.
il te permet de créer un contrôle dans le menu contextuel (clic droit) sur un message ensuite tu utilise l'objetAppointmentItem http://dolphy35.developpez.com/artic...ook/vba/#LVI-C
Dolphy
re,
je viens de m'apercevoir qu'il te manque un truc dans le tuto (il faut que je le rajoute)
Attention seulement sous Outlook 2007
colle cette macro dans le module de classe ThisOutlookSession :
ceci va créer lors du clic de droit un contrôle appelé Demande de réunion
ensuite colle cette macro :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Private Sub Application_ItemContextMenuDisplay( _ ByVal CommandBar As Office.CommandBar, _ ByVal Selection As Selection) Dim objButton As CommandBarButton Dim intButtonIndex As Integer Dim intCounter As Integer 'Test si 1 seul mail est sélectionné If Selection.Count = 1 Then 'Test si la sélection correspond à un E-mail If Selection.Item(1).Class = olMail Then Set objButton = CommandBar.Controls.Add( _ msoControlButton, , , , True) With objButton .Style = msoButtonIconAndCaption .Caption = "Demande de réunion" .FaceId = 463 .OnAction = "Projet 1.ThisOutlookSession.CreationReunion" End With End If End If End Sub
elle permet de créer la réunion.
Pour 2003 tu peux appelé la macro depuis Outils -> Macro -> Macro ou ALT+F8
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub CreationReunion() '--------------------------------------------------------------------------------------- ' Procédure : CreationReunion ' Auteur : Dolphy35 - http://dolphy35.developpez.com/ ' Date : 16/05/2008 ' Détail : Création d'une nouvelle entrée du calendrier '--------------------------------------------------------------------------------------- ' 'Déclaration des objets Dim objOutlook As Outlook.Application Dim objReunion As Outlook.AppointmentItem Dim objExplorer As Outlook.Explorer Dim objSelection As Outlook.Selection Dim objMail As Object Dim strMail As String Dim strSujet As String 'Instance des Objets Set objOutlook = Outlook.Application 'Instance de l'application Set objExplorer = objOutlook.ActiveExplorer Set objSelection = objExplorer.Selection Set objReunion = objOutlook.CreateItem(olAppointmentItem) 'Instance de la nouvelle entrée du calendrier 'Récupère les infos du mail reçu For Each objMail In objSelection With objMail strMail = .SenderEmailAddress strSujet = .Subject End With Next 'définition de la réunion With objReunion .MeetingStatus = olMeeting .Subject = strSujet .Location = "Mon Bureau" .Recipients.Add (strMail) .Display End With 'Vide des instances Set objOutlook = Nothing Set objReunion = Nothing Set objExplorer = Nothing Set objSelection = Nothing End Sub
pour le mettre dans le menu contextuel celà doit être possible mais je n'ai pas le temps de me pencher sur le PB. A moins que quelqu'un est un code tout fait
Dolphy
Alors là Dolphy35 chapeau
Le menu contextuel "Demande de réunion" est bien là,
La macro fonctionne parfaitement bien en faisant Outils, Macro, Exécuté.
Par contre rien ne se passe quand je clique sur le menu contextuel "Demande de réunion".
Ne devrais-je pas associer le menu contextuel et la macro.
Si oui, comment fait-on ?
Dailyplanet
re,
pour assigner une action au contrôle c'est cette ligne :
contrôle bien que ton projet s'appel Projet 1. Sinon change le nom
Code : Sélectionner tout - Visualiser dans une fenêtre à part .OnAction = "Projet 1.ThisOutlookSession.CreationReunion"
Menu Affichage Explorateur de projet ou Ctrl+R en haut tu as le nom de ton projet ex: Projet 1 (VBAProject.OTM)
selon la syntaxe la macro doit être placée dans le module ThisOutlookSession
Dolphy
Merci Dolphi35 grâce à toi mon problème est "presque" réglé.
Juste encore un petit truc,
Un pop-up "Avis de sécurité Microsoft Office Outlook" concernant "ThisOutlookSession" s'affiche à chaque démarrage de Outlook me demandant si je veux:
- Approuver tous les documents de cette éditeur
- Activer les macros
- Désactiver les macros
En "bon élève" j'ai parcouru les excellents tuto's pour savoir quelle option choisir sans mettre en péril la sécurité de mon ordi. J'ai pas trouvé la réponse.
Quel est ton avis. Puis-je accepter "Approuver tous les documents de cet éditeur" ?
Ca c'est pour Outlook 2007, après je tente tout seul pour 2003 !
Dailyplanet
Salut,
L'idéal est un signature numérique ce qui garantit l'authenticité des macros par son éditeur. Ensuite Outlook est différent d'Excel par exemple, il n'est pas possible d'intégrer une macro dans un mail. Les macros dans Excel sont intégrés dans le fichier ce qui n'est pas le cas dans Outlook. Donc le seul moyen d'avoir une macro malveillante serait d'exécuter un fichier joint au mail. Perso je ne fais aucun contrôle comme ça plus de message
A toi de voire
Dolphy
Tout fonctionne parfaitement pour Outlook 2007 et je t'en remercie.
Maintenant j'ai copié le code dans VBA Outlook 2003.
La macro fonctionne bien mais en faisant clic droit sur le mail je n'ai pas le bouton "Demande de réunion".
Est-ce compliqué ? As-tu une idée ?
Dailyplanet
Salut,
C'est normale le premier code ne focntionne que sous 2007, je l'ai mis en gras et rouge pourtant
pour 2003 tu peux y accèder par le menu outils -> macro etc...
je n'ai rien sous le coude en code, mais je pourrais essayer de trouver une astuce, cela pourrait intérresser d'autre personnes.
je vais voir ce que je peux faire la semaine prochaine
Dolphy
Salut,
Ce matin, au bureau, j'ai collé le code dans mon Outlook 2003.
J'ai juste un petit problème
Aux mails que j'ai envoyé je reçois le message d'erreur suivant lors de l'exécution de la macro:
Microsoft Visual Basic
Les zones A, Cc, ou Cci doivent contenir au moins un nom ou une liste de distribution
Y-a-t-il moyen de corriger cela ?
De plus, dans ma demande de réunion créé par la macro, j'aimerai ajouter un texte standard.
A quel endroit du code dois-je ajouter ce texte.
Merci beaucoup pour le soutien
Dailyplanet
Salut,
Ce message survient car tu n'a pas de mail sélectionné dans ta boîte de réception
Sinon pour ajouter du texte il faut utiliser la méthode Body, dans le with objReunion ajoute cette ligne :
pour ce qui est de 2003, je n'ai pas de code permettant d'ajouter un contrôle dans le menu contextuel comme sous 2007 mais voici un bout de code qui permet d'ajouter un bouton dans le menu d'Outlook permettant la même chose
Code : Sélectionner tout - Visualiser dans une fenêtre à part .Body = "Bonjour"
Code à mettre dans le module de classe ThisOutlookSession :
Dolphy
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Private Sub Application_Startup() '--------------------------------------------------------------------------------------- ' Procédure : Application_Startup ' Auteur : Dolphy35 - http://dolphy35.developpez.com/ ' Date : 19/05/2008 ' Détail : Création d'un controle dans le menu d'Outlook '--------------------------------------------------------------------------------------- ' 'Déclarations desobjets Dim objExplorer As Outlook.Explorer Dim objCommandBar As Office.CommandBar Dim objControl As Office.CommandBarButton 'instance des objets Set objExplorer = Outlook.ActiveExplorer Set objCommandBar = objExplorer.CommandBars.Item("Menu Bar") Set objControl = objCommandBar.Controls.Add(, , , , True) 'objet Control With objControl .Caption = "Créer une réunion" .FaceId = 463 .Style = msoButtonIconAndCaption .Tag = "Créer une réunion" .OnAction = "Projet 1.ThisOutlookSession.CreationReunion" .Visible = True End With 'libération des instances Set objExplorer = Nothing Set objCommandBar = Nothing Set objControl = Nothing End Sub
Salut,
Merci pour ta réponse. La méthode .Body ...parfait
Pour le bouton, il est bien là mais sans effet.
J'ai essayé de modifier le code, mais sans succès.
J'ai toujours une deuxième solution pour ajouter un bouton assigné à une macro dans la barre d'outil: click droit sur la barre d'outils, Personnaliser, Commandes, Macros, glisser le bouton qui correspond à la macro de ThisOutlookSession.
Si tu peux trouver l'erreur c'est avec plaisir que je suis preneur
Dailyplanet
Salut,
Sinon tu mets la macro : CreationReunion dans un nouveau module et tu remplace cette ligne :
par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part .OnAction = "Projet 1.ThisOutlookSession.CreationReunion"
Dolphy
Code : Sélectionner tout - Visualiser dans une fenêtre à part .OnAction = "CreationReunion"
C'est SUPER Dolphy35 j'ai exactement ce que je veux et je t'en remercie
Peut-être un petit détail de cosmétique (après je clos le chapitre) :
Si je veux créer une ou deux ligne d'espace avant le texte "Bonjour" dans la corps de ma demande de réunion (code .Body = "Bonjour") y-a-t-il un code ?
Dailyplanet
Tu mets des chr(13) chr(10)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager