Forum des développeurs  

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é.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Outlook > VBA Outlook

Réponse
 
Outils de la discussion
Vieux 27/05/2008, 09h02   #1 (permalink)
Membre Confirmé
 
Date d'inscription: novembre 2007
Localisation: IDF-Bretagne
Âge: 35
Messages: 202
Envoyer un message via MSN à sebinator
Par défaut Exécuter du code à l'ouverture et fermeture d'outlook

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
sebinator est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 27/05/2008, 10h32   #2 (permalink)
Membre éprouvé
 
Avatar de Oliv-
 
Date d'inscription: mars 2006
Localisation: Tourcoing
Âge: 37
Messages: 454
Par défaut

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
A la fermeture

Code :
Private Sub Application_Quit()
tamacro
end sub
Attention aux erreurs qui pourraient empecher outlook de se fermer correctement.

Pour l'ouverture de outlook l'idéal est de "signer electroniquement" ton code pour éviter d'accepter les macros à chaque fois.
Oliv- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 27/05/2008, 10h50   #3 (permalink)
Responsable Outlook
 
Avatar de Dolphy35
 
Date d'inscription: octobre 2004
Localisation: Rennes
Messages: 3 278
Envoyer un message via MSN à Dolphy35 Envoyer un message via Skype™ à Dolphy35
Par défaut

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'Outlook


Dolphy
__________________
Initiation au VBA d'Outlook
venez défier mabrute
Je ne réponds pas aux questions techniques par MP
Dolphy35 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 27/05/2008, 12h26   #4 (permalink)
Membre Confirmé
 
Date d'inscription: novembre 2007
Localisation: IDF-Bretagne
Âge: 35
Messages: 202
Envoyer un message via MSN à sebinator
Par défaut

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
 
 
sebinator est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 28/05/2008, 10h43   #5 (permalink)
Membre Confirmé
 
Date d'inscription: novembre 2007
Localisation: IDF-Bretagne
Âge: 35
Messages: 202
Envoyer un message via MSN à sebinator
Par défaut

j'ai compris et surtout j'ai relu les commentaires dans le tuto

mon soucis se situe sur l'interprétation des noms de champs :

rs.Fields("Nom")

J'ai remplacé le nom par l'index du champ et cela fonctionne.
sebinator est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Outlook > VBA Outlook

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide