OVH Cloud OVH Cloud

Contacts outlook dans word...

9 réponses
Avatar
JLuc
Salut le NG,
Il y a queques mois, j'avais poser la question suivante : comment
recuperer les contacts de outlook pour les utiliser dans word ?

N'ayant pas obtenu de reponses concretes (propositions de
publipostage), j'ai du jouer du clavier. A l'epoque je vous avais
propose le code si j'y arrivais ... c'est chose faite, donc voici le
resultat de mes reflections.
P.S. : pour que ca fonctionne bien, il faut verifier la reference
"Microsoft Outlook 9.0 Object Library" si elle n'y est pas, l'ajouter.
Bonne journee a tous.
JLuc


Option Explicit

' Déclaration des variables
Dim present As Boolean
Dim chemin As String
Dim namefile As String
Dim TableOutlook() As String
Dim variable(1, 1 To 3) As String
Dim define_emetteur As String
Dim define_dest As String
Dim define_societe As String
Dim define_objet As String
Dim define_fax As String
Dim define_nbr As Integer
Dim define_date As String
Dim define_numero As Integer

Private Sub UserForm_Initialize()
Dim ol As Outlook.Application
Dim ns As Outlook.NameSpace
Dim fld As Outlook.MAPIFolder
Dim itm As Outlook.ContactItem
Dim i, x, y, pos As Integer
Dim entry As Template
Dim NumeroFax As Integer

ComboBox1.ColumnCount = 3
' Reference a un objet Outlook
On Error Resume Next
Set ol = GetObject(, "Outlook.Application")

' Si pas ouvert (Outlook) creation
If Err.Number <> 0 Then
Set ol = CreateObject("Outlook.Application")
End If
On Error GoTo 0

' Creation d'un objet Namespace
Set ns = ol.GetNamespace("MAPI")
On Error Resume Next

' Creation d'un objet MapiFolder
Set fld = ns.GetDefaultFolder(olFolderContacts)

' Redimentionnement du tableau
ReDim TableOutlook(1 To fld.Items.Count, 1 To 3)

' Recuperation de tous les enregistrements
For i = 1 To fld.Items.Count
Set itm = fld.Items(i)
TableOutlook(i, 1) = itm.CompanyName
TableOutlook(i, 2) = itm.FullName
TableOutlook(i, 3) = itm.BusinessFaxNumber
Next i
Set ol = Nothing

' Trie du tableau ****************************************************
For x = 1 To UBound(TableOutlook)
variable(1, 1) = TableOutlook(x, 1)
variable(1, 2) = TableOutlook(x, 2)
variable(1, 3) = TableOutlook(x, 3)
pos = x
If x < UBound(TableOutlook) Then
For y = x + 1 To UBound(TableOutlook)
Select Case variable(1, 1)
Case Is = TableOutlook(y, 1)
If variable(1, 2) > TableOutlook(y, 2) Then
variable(1, 1) = TableOutlook(y, 1)
variable(1, 2) = TableOutlook(y, 2)
variable(1, 3) = TableOutlook(y, 3)
pos = y
End If
Case Is > TableOutlook(y, 1)
variable(1, 1) = TableOutlook(y, 1)
variable(1, 2) = TableOutlook(y, 2)
variable(1, 3) = TableOutlook(y, 3)
pos = y
End Select
Next
TableOutlook(pos, 1) = TableOutlook(x, 1)
TableOutlook(pos, 2) = TableOutlook(x, 2)
TableOutlook(pos, 3) = TableOutlook(x, 3)
End If
TableOutlook(x, 1) = variable(1, 1)
TableOutlook(x, 2) = variable(1, 2)
TableOutlook(x, 3) = variable(1, 3)
Next
' Fin de trie ********************************************************

' Recuperation des infos
ComboBox1.List() = TableOutlook()

9 réponses

Avatar
AB
Bonjour,

Ce n'est pas tous les jours, par les temps qui courent, qu'on peut tirer son
chapeau à quelqu'un. Je n'ai pas testé ton code : je laisse ce soin à
d'autres plus concernés que moi. Mais je tiens à te remercier (et je pense
que je peux le faire au nom de tous)de le partager avec les autres membres
de ce forum.
Chapeau, Jean Luc !
André


"JLuc" a écrit dans le message de news:

Salut le NG,
Il y a queques mois, j'avais poser la question suivante : comment
recuperer les contacts de outlook pour les utiliser dans word ?

N'ayant pas obtenu de reponses concretes (propositions de publipostage),
j'ai du jouer du clavier. A l'epoque je vous avais propose le code si j'y
arrivais ... c'est chose faite, donc voici le resultat de mes reflections.
P.S. : pour que ca fonctionne bien, il faut verifier la reference
"Microsoft Outlook 9.0 Object Library" si elle n'y est pas, l'ajouter.
Bonne journee a tous.
JLuc


Option Explicit

' Déclaration des variables
Dim present As Boolean
Dim chemin As String
Dim namefile As String
Dim TableOutlook() As String
Dim variable(1, 1 To 3) As String
Dim define_emetteur As String
Dim define_dest As String
Dim define_societe As String
Dim define_objet As String
Dim define_fax As String
Dim define_nbr As Integer
Dim define_date As String
Dim define_numero As Integer

Private Sub UserForm_Initialize()
Dim ol As Outlook.Application
Dim ns As Outlook.NameSpace
Dim fld As Outlook.MAPIFolder
Dim itm As Outlook.ContactItem
Dim i, x, y, pos As Integer
Dim entry As Template
Dim NumeroFax As Integer

ComboBox1.ColumnCount = 3
' Reference a un objet Outlook
On Error Resume Next
Set ol = GetObject(, "Outlook.Application")

' Si pas ouvert (Outlook) creation
If Err.Number <> 0 Then
Set ol = CreateObject("Outlook.Application")
End If
On Error GoTo 0

' Creation d'un objet Namespace
Set ns = ol.GetNamespace("MAPI")
On Error Resume Next

' Creation d'un objet MapiFolder
Set fld = ns.GetDefaultFolder(olFolderContacts)

' Redimentionnement du tableau
ReDim TableOutlook(1 To fld.Items.Count, 1 To 3)

' Recuperation de tous les enregistrements
For i = 1 To fld.Items.Count
Set itm = fld.Items(i)
TableOutlook(i, 1) = itm.CompanyName
TableOutlook(i, 2) = itm.FullName
TableOutlook(i, 3) = itm.BusinessFaxNumber
Next i
Set ol = Nothing

' Trie du tableau ****************************************************
For x = 1 To UBound(TableOutlook)
variable(1, 1) = TableOutlook(x, 1)
variable(1, 2) = TableOutlook(x, 2)
variable(1, 3) = TableOutlook(x, 3)
pos = x
If x < UBound(TableOutlook) Then
For y = x + 1 To UBound(TableOutlook)
Select Case variable(1, 1)
Case Is = TableOutlook(y, 1)
If variable(1, 2) > TableOutlook(y, 2) Then
variable(1, 1) = TableOutlook(y, 1)
variable(1, 2) = TableOutlook(y, 2)
variable(1, 3) = TableOutlook(y, 3)
pos = y
End If
Case Is > TableOutlook(y, 1)
variable(1, 1) = TableOutlook(y, 1)
variable(1, 2) = TableOutlook(y, 2)
variable(1, 3) = TableOutlook(y, 3)
pos = y
End Select
Next
TableOutlook(pos, 1) = TableOutlook(x, 1)
TableOutlook(pos, 2) = TableOutlook(x, 2)
TableOutlook(pos, 3) = TableOutlook(x, 3)
End If
TableOutlook(x, 1) = variable(1, 1)
TableOutlook(x, 2) = variable(1, 2)
TableOutlook(x, 3) = variable(1, 3)
Next
' Fin de trie ********************************************************

' Recuperation des infos
ComboBox1.List() = TableOutlook()




Avatar
JLuc
Je pense qu'il est normal d'avoir un retour pour des questions qui ont
ete posees et qui ont recues des reponses (bonnes ou pas). Car si des
contributeurs se sont penches decu, c'est que, quelque part, ca les
interesse aussi ;o)
J'ai repondu a quelques posts, que ce soit sur word ou excel et c'est
assez frustrant quand on a pas de retour d'une solution proposee !
C'est pourquoi je m'applique a toujours repondre a ceux qui cherchent
pour moi :oÞ
A+
JLuc


Bonjour,

Ce n'est pas tous les jours, par les temps qui courent, qu'on peut tirer son
chapeau à quelqu'un. Je n'ai pas testé ton code : je laisse ce soin à
d'autres plus concernés que moi. Mais je tiens à te remercier (et je pense
que je peux le faire au nom de tous)de le partager avec les autres membres de
ce forum.
Chapeau, Jean Luc !
André


"JLuc" a écrit dans le message de news:

Salut le NG,
Il y a queques mois, j'avais poser la question suivante : comment recuperer
les contacts de outlook pour les utiliser dans word ?

N'ayant pas obtenu de reponses concretes (propositions de publipostage),
j'ai du jouer du clavier. A l'epoque je vous avais propose le code si j'y
arrivais ... c'est chose faite, donc voici le resultat de mes reflections.
P.S. : pour que ca fonctionne bien, il faut verifier la reference
"Microsoft Outlook 9.0 Object Library" si elle n'y est pas, l'ajouter.
Bonne journee a tous.
JLuc


Option Explicit

' Déclaration des variables
Dim present As Boolean
Dim chemin As String
Dim namefile As String
Dim TableOutlook() As String
Dim variable(1, 1 To 3) As String
Dim define_emetteur As String
Dim define_dest As String
Dim define_societe As String
Dim define_objet As String
Dim define_fax As String
Dim define_nbr As Integer
Dim define_date As String
Dim define_numero As Integer

Private Sub UserForm_Initialize()
Dim ol As Outlook.Application
Dim ns As Outlook.NameSpace
Dim fld As Outlook.MAPIFolder
Dim itm As Outlook.ContactItem
Dim i, x, y, pos As Integer
Dim entry As Template
Dim NumeroFax As Integer

ComboBox1.ColumnCount = 3
' Reference a un objet Outlook
On Error Resume Next
Set ol = GetObject(, "Outlook.Application")

' Si pas ouvert (Outlook) creation
If Err.Number <> 0 Then
Set ol = CreateObject("Outlook.Application")
End If
On Error GoTo 0

' Creation d'un objet Namespace
Set ns = ol.GetNamespace("MAPI")
On Error Resume Next

' Creation d'un objet MapiFolder
Set fld = ns.GetDefaultFolder(olFolderContacts)

' Redimentionnement du tableau
ReDim TableOutlook(1 To fld.Items.Count, 1 To 3)

' Recuperation de tous les enregistrements
For i = 1 To fld.Items.Count
Set itm = fld.Items(i)
TableOutlook(i, 1) = itm.CompanyName
TableOutlook(i, 2) = itm.FullName
TableOutlook(i, 3) = itm.BusinessFaxNumber
Next i
Set ol = Nothing

' Trie du tableau ****************************************************
For x = 1 To UBound(TableOutlook)
variable(1, 1) = TableOutlook(x, 1)
variable(1, 2) = TableOutlook(x, 2)
variable(1, 3) = TableOutlook(x, 3)
pos = x
If x < UBound(TableOutlook) Then
For y = x + 1 To UBound(TableOutlook)
Select Case variable(1, 1)
Case Is = TableOutlook(y, 1)
If variable(1, 2) > TableOutlook(y, 2) Then
variable(1, 1) = TableOutlook(y, 1)
variable(1, 2) = TableOutlook(y, 2)
variable(1, 3) = TableOutlook(y, 3)
pos = y
End If
Case Is > TableOutlook(y, 1)
variable(1, 1) = TableOutlook(y, 1)
variable(1, 2) = TableOutlook(y, 2)
variable(1, 3) = TableOutlook(y, 3)
pos = y
End Select
Next
TableOutlook(pos, 1) = TableOutlook(x, 1)
TableOutlook(pos, 2) = TableOutlook(x, 2)
TableOutlook(pos, 3) = TableOutlook(x, 3)
End If
TableOutlook(x, 1) = variable(1, 1)
TableOutlook(x, 2) = variable(1, 2)
TableOutlook(x, 3) = variable(1, 3)
Next
' Fin de trie ********************************************************

' Recuperation des infos
ComboBox1.List() = TableOutlook()






Avatar
Geo

J'ai répondu a quelques posts, que ce soit sur word ou excel et c'est
assez frustrant quand on a pas de retour d'une solution proposée !


Bien d'accord

C'est pourquoi je m'applique a toujours répondre a ceux qui cherchent
pour moi :oÞ


je m'associe à André pour t'en remercier.

Et je mets ça dans mon coffre à trésors.

Avatar
Jean-Guy Marcil
JLuc was telling us:
JLuc nous racontait que :

Salut le NG,
Il y a queques mois, j'avais poser la question suivante : comment
recuperer les contacts de outlook pour les utiliser dans word ?

N'ayant pas obtenu de reponses concretes (propositions de
publipostage), j'ai du jouer du clavier. A l'epoque je vous avais
propose le code si j'y arrivais ... c'est chose faite, donc voici le
resultat de mes reflections.
P.S. : pour que ca fonctionne bien, il faut verifier la reference
"Microsoft Outlook 9.0 Object Library" si elle n'y est pas, l'ajouter.


Merci pour le cadeau!

Mais, si je peux me permettre, deux petits détails...

"Microsoft Outlook 9.0 Object Library" si elle n'y est pas, l'ajouter.
Pour ceux qui ne le savent pas, cela dépend de la version de Office.

Microsoft Outlook 9.0 Object Library = Office 2000
Microsoft Outlook 10.0 Object Library = Office 2002
Microsoft Outlook 11.0 Object Library = Office 2003
etc.

Aussi, la ligne
Dim i, x, y, pos As Integer
ne fait que définir pos en tant que "Integer", i, x et y ne sont pas
définis.
Il faudrait écrire:
Dim i As Integer, x As Integer, y As Integer, pos As Integer

--
Salut!
_______________________________________
Jean-Guy Marcil - Word MVP

Word MVP site: http://www.word.mvps.org

Avatar
JLuc
Mais, si je peux me permettre, deux petits détails...
Bien sur que tu peux, c'est meme recommande ! :D


"Microsoft Outlook 9.0 Object Library" si elle n'y est pas, l'ajouter.
Pour ceux qui ne le savent pas, cela dépend de la version de Office.

Microsoft Outlook 9.0 Object Library = Office 2000
Microsoft Outlook 10.0 Object Library = Office 2002
Microsoft Outlook 11.0 Object Library = Office 2003
etc.
C'est vrai aue je n'ai pas preciser la version, merci du rectificatif.


Aussi, la ligne
Dim i, x, y, pos As Integer
ne fait que définir pos en tant que "Integer", i, x et y ne sont pas définis.
Il faudrait écrire:
Dim i As Integer, x As Integer, y As Integer, pos As Integer
et ca, je savais pas, je pensais que toutes les variables de la ligne

etaient definies a integer 8-o comme quoi c'est important la
communication, merci
JLuc


Avatar
Jacques93
Bonjour JLuc,

Mais, si je peux me permettre, deux petits détails...


Bien sur que tu peux, c'est meme recommande ! :D

"Microsoft Outlook 9.0 Object Library" si elle n'y est pas, l'ajouter.


Pour ceux qui ne le savent pas, cela dépend de la version de Office.
Microsoft Outlook 9.0 Object Library = Office 2000
Microsoft Outlook 10.0 Object Library = Office 2002
Microsoft Outlook 11.0 Object Library = Office 2003
etc.


C'est vrai aue je n'ai pas preciser la version, merci du rectificatif.



Pour info, une fois terminée l'écriture du code, tu peux supprimer la
référence, à condition de déclarer :

Dim ol As Object 'Outlook.Application
Dim ns As Object 'Outlook.NameSpace
Dim fld As Object 'Outlook.MAPIFolder
Dim itm As Object 'Outlook.ContactItem

ce qui évite les problèmes de compatibilité entre versions. A part les
considérations liées à l'Early et au Late Binding, l'interêt d'avoir la
référence, et de typer les variables, c'est l'aide à la saisie et
l'explorateur d'objets.

Eraly & Late Binding :
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/office97/html/SF7A4.asp

--
Cordialement,

Jacques.



Avatar
JLuc
Desole, je viens de faire l'essai de ton code, mais ca plante a la
ligne Set fld = ns.GetDefaultFolder(olFolderContacts)
Il faut bien conserver la reference, pour les declarations, c'est vrai
qu'on peux les declarees en object.
Merci
JLuc


Bonjour JLuc,

Mais, si je peux me permettre, deux petits détails...


Bien sur que tu peux, c'est meme recommande ! :D

"Microsoft Outlook 9.0 Object Library" si elle n'y est pas, l'ajouter.


Pour ceux qui ne le savent pas, cela dépend de la version de Office.
Microsoft Outlook 9.0 Object Library = Office 2000
Microsoft Outlook 10.0 Object Library = Office 2002
Microsoft Outlook 11.0 Object Library = Office 2003
etc.


C'est vrai aue je n'ai pas preciser la version, merci du rectificatif.



Pour info, une fois terminée l'écriture du code, tu peux supprimer la
référence, à condition de déclarer :

Dim ol As Object 'Outlook.Application
Dim ns As Object 'Outlook.NameSpace
Dim fld As Object 'Outlook.MAPIFolder
Dim itm As Object 'Outlook.ContactItem

ce qui évite les problèmes de compatibilité entre versions. A part les
considérations liées à l'Early et au Late Binding, l'interêt d'avoir la
référence, et de typer les variables, c'est l'aide à la saisie et
l'explorateur d'objets.

Eraly & Late Binding :
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/office97/html/SF7A4.asp





Avatar
Jacques93
Bonjour JLuc,
Desole, je viens de faire l'essai de ton code, mais ca plante a la ligne
Set fld = ns.GetDefaultFolder(olFolderContacts)
Il faut bien conserver la reference, pour les declarations, c'est vrai
qu'on peux les declarees en object.


Exact, j'ai oublié de préciser que l'on ne peux plus utiliser les noms
de constantes, il faut les remplacer par leur valeurs. Ici

Set fld = ns.GetDefaultFolder(10) 'olFolderContacts

--
Cordialement,

Jacques.

Avatar
JLuc
Ok j'avais pas pense a ca :')
Merci

Bonjour JLuc,
Desole, je viens de faire l'essai de ton code, mais ca plante a la ligne
Set fld = ns.GetDefaultFolder(olFolderContacts)
Il faut bien conserver la reference, pour les declarations, c'est vrai
qu'on peux les declarees en object.


Exact, j'ai oublié de préciser que l'on ne peux plus utiliser les noms de
constantes, il faut les remplacer par leur valeurs. Ici

Set fld = ns.GetDefaultFolder(10) 'olFolderContacts