![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre Confirmé
![]() |
Bonjour à tous,
J'ai un code en vba (cf tuto partage de contact sans exchange). Actuellement j'ai un bouton dans ma barre de menu qui me permet de l'éxécuter. Je souhaite que le code s'éxécute à l'ouverture et à la fermeture d'outlook de maniere automatique. Comment fait-on ? Merci d'avance Seb |
|
|
|
|
|
#2 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: mars 2006
Localisation: Tourcoing
Âge: 37
Messages: 454
|
SAlut,
tu peux laisser ta macro où elle est et dans ThisOutlookSession il faut utiliser les événements qui vont bien : Au lancement : Code :
Private Sub Application_Startup() tamacro end sub Code :
Private Sub Application_Quit() tamacro end sub Pour l'ouverture de outlook l'idéal est de "signer electroniquement" ton code pour éviter d'accepter les macros à chaque fois.
__________________
Have a nice day. ![]() Oliv' OUI à l'utilisation, NON au « copillage » Merci de citer la source |
|
|
|
|
|
#3 (permalink) |
![]() |
Salut,
pensé à consulter la page de cours, il y a des tutos intéressants qui répondent souvent aux questions http://outlook.developpez.com/cours/tuto en question : Initiation au VBA d'OutlookDolphy
__________________
Initiation au VBA d'Outlook Je ne réponds pas aux questions techniques par MP
|
|
|
|
|
|
#4 (permalink) |
|
Membre Confirmé
![]() |
Merci pour vos réponses,
J'utilise le tuto "comment partager les contacts sans exchange" Il y a un comportement bizarre... J'ai ajouté ParcourirContact et MettreAJourContact dans Application_Startup et Application_Quit et le probleme c'est qu'il m'ajoute sans cesse les mêmes fiches dans la base access. De plus, à chaque fois que j'ouvre outlook, il affiche la boite de configuration (install office) outlook. Est-ce normal ? seb Code :
Option Explicit Public Sub ParcourirContact() '************************************************************************* ' Routine qui va parcourir les enregistrements présents dans le répertoire ' contacts et copier les enregistrements manquants dans la base de données ' Macro crée pour article DVP par Olivier Lebeau '************************************************************************* Dim oCont As ContactItem Dim oFold As Folder Dim nM As NameSpace Dim olApp As Outlook.Application Dim i As Integer Dim j As Integer j = 1 ' Affectation des objets Set olApp = Outlook.Application Set nM = olApp.GetNamespace("MAPI") Set oFold = nM.GetDefaultFolder(olFolderContacts) i = oFold.Items.Count ' Boucle pour parcourir les contacts locaux For j = 1 To i ' Appel à la fonction AccesADB avec comme paramètre le contactItem AccesADB (oFold.Items(j)) Next j End Sub Public Function AccesADB(mycont As ContactItem) '************************************************************************** ' Fonction appelée pour envoyer vers la base de données les nouveaux ' contacts ' Fonction écrite pour article DVP par Olivier Lebeau '************************************************************************** On Error Resume Next Dim db As DAO.Database Dim rs As DAO.Recordset Dim sql As String sql = "SELECT Contacts.*, Contacts.Nom, Contacts.[Prénom] " sql = sql & " FROM Contacts " sql = sql & " Where Contacts.Nom = """ & mycont.LastName sql = sql & """ AND Contacts.[Prénom] = """ & mycont.FirstName & """;" ' Debug.Print sql ' Vous devez spécifier le chemin complet de votre base de données Set db = OpenDatabase("E:\TempACC\contacts.mdb") Set rs = db.OpenRecordset(sql) ' Debug.Print rs.RecordCount '********************************************************************** ' La liste des champs traités peut être augmentée en fonction de vos ' besoins. Par facilité, je n'ai volontairement mis que 3 champs ' Si vous rencontrez des problèmes avec les lignes Fields("xxxxx") ' je vous conseille d'utiliser l'index du champ Fields(2) '********************************************************************** If rs.RecordCount = 0 Then rs.AddNew rs.Fields("Nom") = Nz(mycont.LastName, " ") rs.Fields("Prénom") = Nz(mycont.FirstName, " ") rs.Fields("Adresse de messagerie") = mycont.Email1Address rs.Fields("Société") = Nz(mycont.CompanyName, " ") rs.Update End If '********************************************************************** ' Libération des objets '********************************************************************** rs.Close db.Close Set rs = Nothing Set db = Nothing End Function Public Sub MettreAJourContact() '****************************************************************************** ' Procédure pour récupérer les enregistrements présents dans la base de ' données et les injecter dans le répertoire contact. '****************************************************************************** On Error Resume Next Dim oCont As ContactItem Dim oCo As ContactItem Dim oFold As Folder Dim nM As NameSpace Dim olApp As Outlook.Application Dim stFilt As String Dim rs As DAO.Recordset Dim db As DAO.Database '****************************************************************************** ' Affectation des objets '****************************************************************************** Set db = OpenDatabase("E:\TempACC\contacts.mdb") Set rs = db.OpenRecordset("Select * From Contacts") Set olApp = Outlook.Application Set nM = olApp.GetNamespace("MAPI") Set oFold = nM.GetDefaultFolder(olFolderContacts) '****************************************************************************** ' Boucle pour parcourir les enregistrements de la table '****************************************************************************** While Not rs.EOF 'Filtre pour recherche des données déjà existantes dans les contacts locaux stFilt = "[FirstName] = """ & rs.Fields("Prénom") stFilt = stFilt & """ And [LastName] = """ & rs.Fields("Nom") & """" ' Recherche avec filtre Set oCo = oFold.Items.Find(stFilt) ' procédure décisionnelle pour copie des données If oCo = "Nothing" Then ' Si pas de données, on les ajoute Set oCont = oFold.Items.Add oCont.FirstName = rs.Fields("Prénom") oCont.LastName = rs.Fields("Nom") oCont.Email1Address = rs.Fields("Adresse de messagerie") oCont.CompanyName = rs.Fields("Société") oCont.Save End If ' Déplacement vers l'enregistrement suivant. rs.MoveNext Wend ' Libération des objets rs.Close db.Close Set rs = Nothing Set db = Nothing End Sub |
|
|
|
![]() |
![]() |
||
Exécuter du code à l'ouverture et fermeture d'outlook
|
||
| Outils de la discussion | |
|
|