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 31/05/2008, 09h05   #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 synchro bi-directionnelle outlook-access 2K3 : suppression

Bonjour,

Avec le code ci dessous, je peux synchroniser les contacts outlook2k3 avec un bdd access 2k3 :

Code :
 
'Dans un module : 
 
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 MAPIFolder
Dim nM As NameSpace
Dim olApp As Outlook.Application
Dim i As Integer
Dim j As Integer
 
j = 1
 
' Affectation des objets
 
Set olApp = CreateObject("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("C:\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(2) = Nz(mycont.LastName, " ")
    rs.Fields(3) = Nz(mycont.FirstName, " ")
    rs.Fields(4) = mycont.Email1Address
    rs.Fields(1) = 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 MAPIFolder
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("C:\tempAcc\contacts.mdb")
Set rs = db.OpenRecordset("Select * From Contacts")
Set olApp = CreateObject("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(3)
stFilt = stFilt & """ And [LastName] = """ & rs.Fields(2) & """"
 
' 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(3)
        oCont.LastName = rs.Fields(2)
        oCont.Email1Address = rs.Fields(4)
        oCont.CompanyName = rs.Fields(1)
        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
 
 
'A placer dans outlookthissession
 
Private Sub Application_Startup()
 
Dim strFichier As String
 
    strFichier = "C:\tempAcc\contacts.mdb"
    If Dir(strFichier) <> "" And strFichier <> "" Then
        MettreAJourContact
        ParcourirContact
 
        MsgBox "Base de données Access synchronisée !"
 
    Else
 
        MsgBox "La Base de n'est pas accessible ! Vérifiez la connexion réseau ! La synchronisation ne peut se faire !", vbInformation
 
    End If
 
End Sub
 
 
Private Sub Application_Quit()
Dim strFichier As String
 
    strFichier = "C:\tempAcc\contacts.mdb"
    If Dir(strFichier) <> "" And strFichier <> "" Then
        MettreAJourContact
        ParcourirContact
        MsgBox "Base de données Access synchronisée !"
 
    Else
      
 
    End If
End Sub
 
 
 

Ce code fonctionne très bien mais je ne peux pas supprimer un contact que ce soit dans les contacts locaux outlook ou dans la bdd. Le code resynchronise la fiche supprimée.

Comment faire en sorte que lorsque une fiche est supprimée, elle le soit partout définitivement (outlook(s) et bdd).

Merci d'avance

Seb
sebinator est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 02/06/2008, 11h08   #2 (permalink)
Membre éprouvé
 
Avatar de Oliv-
 
Date d'inscription: mars 2006
Localisation: Tourcoing
Âge: 37
Messages: 454
Par défaut

Salut,
Ne peux tu pas ajouter un champ aSupprimer (dans access) et/ou ajouter [asupprimer] en catégorie (par exemple ) dans le contact
et tester ces 2 choses afin de suppression dans outlook et dans la bdd ?
Oliv- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/06/2008, 14h32   #3 (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,

Je vais tester ce que tu proposes, ce n'est pas une mauvaise idée.
sebinator est actuellement 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