Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

remplacer ObjFolder.Items(A).FirstName par ObjFolder.Items(A).Nom Dirigeant

21 réponses
Avatar
twinley
Bonjour à tous,

Je prépare le transfert de contacts Outlook avec champs personnalisés,
depuis OL vers XL. Puis une fois la feuille XL complétée à la mimine,
faire le transfert dans l'autre sens, XL vers OL.

J'ai trouvé une sub donnée par Michdenis mais attribuée à un inconnu.
Elle fonctionne pour le sens OL vers XL.
Je ne comprend pas bien les lignes telle la suivante car je ne récupère
pas le nom du champ, mais enfin bref, ça marche. Il suffit de mettre les
entêtes de champs perso dans XL à la main. C'est pas le diable.

.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

Si le titre de mon champ comprend un espace, par exemple : Nom Dirigeant
et que je remplace FirstName par Nom Dirigeant, alors j'ai une erreur de
compile.

Ma question : Comment écrire la ligne
.Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant
qui plante sous cette forme à cause de l'espace entre nom et dirigeant ?

OL snobe les champs personnalisés et comme j'ai une procédure OL qui va
faire le chemin inverse, je dois aussi modifier la même syntaxe. Là je
suppose que cela doit être vital d'avoir le bon nom de champ :
objItem.Nom Dirigeant à la place de objItem.User1

objItem.UserProperties("Custom1") = objItem.User1

le code :

la sub Michdenis c'est dans le sens OL vers XL
'-------------------------------------
Sub ImporterContacts()
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim ObjFolder As MAPIFolder
Dim NumLigne As Integer
Dim NbContacts As Integer

Set objApp = New Outlook.Application
Set objNS = objApp.GetNamespace("MAPI")
Set ObjFolder = objNS.GetDefaultFolder(olFolderContacts)

NumLigne = 1
NbContacts = ObjFolder.Items.Count

For A = 1 To NbContacts
NumLigne = NumLigne + 1
With Worksheets("Feuil1")
.Cells(NumLigne, 1) = ObjFolder.Items(A)
.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName
.Cells(NumLigne, 3) = ObjFolder.Items(A).LastName
.Cells(NumLigne, 4) = ObjFolder.Items(A).Email1Address
End With
Next

Set objApp = Nothing: Set objNS = Nothing: Set ObjFolder = Nothing
End Sub
'-------------------------------------

et celle là (http://www.outlookcode.com/d/code/convertfields.htm)
que je n'ai pas encore testé, c'est dans le sens XL vers OL

Sub ConvertFields()
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItems As Items
Dim objItem As Object

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then
Set objItems = objFolder.Items
For Each objItem In objItems
' make sure you have a Contact item
If objItem.Class = olContact Then
' convert to your published custom form
objItem.MessageClass = "IPM.Contact.Custom"
' copy data to your custom fields
objItem.UserProperties("Custom1") = objItem.User1
objItem.UserProperties("Custom2") = objItem.User2
objItem.UserProperties("Custom3") = objItem.User3
objItem.UserProperties("Custom4") = objItem.User4
objItem.User1 = ""
objItem.User2 = ""
objItem.User3 = ""
objItem.User4 = ""
objItem.Save
End If
Next
End If

Set objItems = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Sub


Merci pour votre aide


--
à+twinley

10 réponses

1 2 3
Avatar
MichDenis
Bonjour Twinley,


.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

FirstName = Nom de la propriété de l'item (c'est à dire l'entrée du carnet de contacts). Tu ne peux pas la modifier comme cela :

.Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant

Mais tu devrais pouvoir adapter comme ceci :

.Cells(NumLigne, 2) = ObjFolder.Items("Nom Dirigeant").FirstName

Et comme il y a un espace de l'appellation de l'item, la syntaxe peut être celle-ci :

.Cells(NumLigne, 2) = ObjFolder.Items("'Nom Dirigeant'").FirstName
(Nom Dirigeant est entouré de guillemets simples suivis de guillements doubles.


exemple dans le modèle objet Excel :

Tu ne peux pas modifier : Sheets(1).Name par Sheets(1).Nom MaFeuille
Mais Sheets(1).name ou Sheets("'Nom MaFeuille'").name , c'est la même chose.


Salutations!




"twinley" a écrit dans le message de news: uKakK%

Bonjour à tous,

Je prépare le transfert de contacts Outlook avec champs personnalisés,
depuis OL vers XL. Puis une fois la feuille XL complétée à la mimine,
faire le transfert dans l'autre sens, XL vers OL.

J'ai trouvé une sub donnée par Michdenis mais attribuée à un inconnu.
Elle fonctionne pour le sens OL vers XL.
Je ne comprend pas bien les lignes telle la suivante car je ne récupère
pas le nom du champ, mais enfin bref, ça marche. Il suffit de mettre les
entêtes de champs perso dans XL à la main. C'est pas le diable.

.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

Si le titre de mon champ comprend un espace, par exemple : Nom Dirigeant
et que je remplace FirstName par Nom Dirigeant, alors j'ai une erreur de
compile.

Ma question : Comment écrire la ligne
.Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant
qui plante sous cette forme à cause de l'espace entre nom et dirigeant ?

OL snobe les champs personnalisés et comme j'ai une procédure OL qui va
faire le chemin inverse, je dois aussi modifier la même syntaxe. Là je
suppose que cela doit être vital d'avoir le bon nom de champ :
objItem.Nom Dirigeant à la place de objItem.User1

objItem.UserProperties("Custom1") = objItem.User1

le code :

la sub Michdenis c'est dans le sens OL vers XL
'-------------------------------------
Sub ImporterContacts()
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim ObjFolder As MAPIFolder
Dim NumLigne As Integer
Dim NbContacts As Integer

Set objApp = New Outlook.Application
Set objNS = objApp.GetNamespace("MAPI")
Set ObjFolder = objNS.GetDefaultFolder(olFolderContacts)

NumLigne = 1
NbContacts = ObjFolder.Items.Count

For A = 1 To NbContacts
NumLigne = NumLigne + 1
With Worksheets("Feuil1")
.Cells(NumLigne, 1) = ObjFolder.Items(A)
.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName
.Cells(NumLigne, 3) = ObjFolder.Items(A).LastName
.Cells(NumLigne, 4) = ObjFolder.Items(A).Email1Address
End With
Next

Set objApp = Nothing: Set objNS = Nothing: Set ObjFolder = Nothing
End Sub
'-------------------------------------

et celle là (http://www.outlookcode.com/d/code/convertfields.htm)
que je n'ai pas encore testé, c'est dans le sens XL vers OL

Sub ConvertFields()
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItems As Items
Dim objItem As Object

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then
Set objItems = objFolder.Items
For Each objItem In objItems
' make sure you have a Contact item
If objItem.Class = olContact Then
' convert to your published custom form
objItem.MessageClass = "IPM.Contact.Custom"
' copy data to your custom fields
objItem.UserProperties("Custom1") = objItem.User1
objItem.UserProperties("Custom2") = objItem.User2
objItem.UserProperties("Custom3") = objItem.User3
objItem.UserProperties("Custom4") = objItem.User4
objItem.User1 = ""
objItem.User2 = ""
objItem.User3 = ""
objItem.User4 = ""
objItem.Save
End If
Next
End If

Set objItems = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Sub


Merci pour votre aide


--
à+twinley
Avatar
Michel Pierron
Bonjour Twinley;
.Cells(NumLigne, 2) = ObjFolder.Items(A).ManagerName

MP

"twinley" a écrit dans le message de news:
uKakK#

Bonjour à tous,

Je prépare le transfert de contacts Outlook avec champs personnalisés,
depuis OL vers XL. Puis une fois la feuille XL complétée à la mimine,
faire le transfert dans l'autre sens, XL vers OL.

J'ai trouvé une sub donnée par Michdenis mais attribuée à un inconnu.
Elle fonctionne pour le sens OL vers XL.
Je ne comprend pas bien les lignes telle la suivante car je ne récupère
pas le nom du champ, mais enfin bref, ça marche. Il suffit de mettre les
entêtes de champs perso dans XL à la main. C'est pas le diable.

.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

Si le titre de mon champ comprend un espace, par exemple : Nom Dirigeant
et que je remplace FirstName par Nom Dirigeant, alors j'ai une erreur de
compile.

Ma question : Comment écrire la ligne
.Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant
qui plante sous cette forme à cause de l'espace entre nom et dirigeant ?

OL snobe les champs personnalisés et comme j'ai une procédure OL qui va
faire le chemin inverse, je dois aussi modifier la même syntaxe. Là je
suppose que cela doit être vital d'avoir le bon nom de champ :
objItem.Nom Dirigeant à la place de objItem.User1

objItem.UserProperties("Custom1") = objItem.User1

le code :

la sub Michdenis c'est dans le sens OL vers XL
'-------------------------------------
Sub ImporterContacts()
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim ObjFolder As MAPIFolder
Dim NumLigne As Integer
Dim NbContacts As Integer

Set objApp = New Outlook.Application
Set objNS = objApp.GetNamespace("MAPI")
Set ObjFolder = objNS.GetDefaultFolder(olFolderContacts)

NumLigne = 1
NbContacts = ObjFolder.Items.Count

For A = 1 To NbContacts
NumLigne = NumLigne + 1
With Worksheets("Feuil1")
.Cells(NumLigne, 1) = ObjFolder.Items(A)
.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName
.Cells(NumLigne, 3) = ObjFolder.Items(A).LastName
.Cells(NumLigne, 4) = ObjFolder.Items(A).Email1Address
End With
Next

Set objApp = Nothing: Set objNS = Nothing: Set ObjFolder = Nothing
End Sub
'-------------------------------------

et celle là (http://www.outlookcode.com/d/code/convertfields.htm)
que je n'ai pas encore testé, c'est dans le sens XL vers OL

Sub ConvertFields()
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItems As Items
Dim objItem As Object

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then
Set objItems = objFolder.Items
For Each objItem In objItems
' make sure you have a Contact item
If objItem.Class = olContact Then
' convert to your published custom form
objItem.MessageClass = "IPM.Contact.Custom"
' copy data to your custom fields
objItem.UserProperties("Custom1") = objItem.User1
objItem.UserProperties("Custom2") = objItem.User2
objItem.UserProperties("Custom3") = objItem.User3
objItem.UserProperties("Custom4") = objItem.User4
objItem.User1 = ""
objItem.User2 = ""
objItem.User3 = ""
objItem.User4 = ""
objItem.Save
End If
Next
End If

Set objItems = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Sub


Merci pour votre aide


--
à+twinley


Avatar
twinley
Bonjour à tous, bonjour Michdenis

Je comprends mieux. Mais pas tout.

J'utilise des champs outlook déjà definis et des champs personnalisés.
Les champs déjà définis, il faut trouver la syntaxe en anglais. Savoir
ou , il faut tatonner ? Il y a un champ standard Classé Sous mais ou
puis je trouvé la traduction, par exemple.

Dans ma base de test, j'ai 11 champs dont trois champs perso qui sont
Nom Responsable, siret, urssaf. La base définitive aura plus de 40
champs perso.
Nom Responsable on peut le traduire par ManagerName mais ce n'est pas
mon champ. Donc il ne le voit pas.

La syntaxe ObjFolder.Items("'Nom Dirigeant'").FirstName ne passe pas,
non plus.


Alors j'ai tenté la syntaxe de la sub XL vers OL avec UserProperties qui
est spécifique à OL mais j'ai une erreur automation.

objFolder.Items(A).UserProperties("'Nom Dirigeant'")

Cela avait une bonne tête, mais il refuse.


à+twinley

Bonjour Twinley,


..Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

FirstName = Nom de la propriété de l'item (c'est à dire l'entrée du carnet de contacts). Tu ne peux pas la modifier comme cela :

..Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant

Mais tu devrais pouvoir adapter comme ceci :

..Cells(NumLigne, 2) = ObjFolder.Items("Nom Dirigeant").FirstName

Et comme il y a un espace de l'appellation de l'item, la syntaxe peut être celle-ci :

..Cells(NumLigne, 2) = ObjFolder.Items("'Nom Dirigeant'").FirstName
(Nom Dirigeant est entouré de guillemets simples suivis de guillements doubles.


exemple dans le modèle objet Excel :

Tu ne peux pas modifier : Sheets(1).Name par Sheets(1).Nom MaFeuille
Mais Sheets(1).name ou Sheets("'Nom MaFeuille'").name , c'est la même chose.


Salutations!




"twinley" a écrit dans le message de news: uKakK%

Bonjour à tous,

Je prépare le transfert de contacts Outlook avec champs personnalisés,
depuis OL vers XL. Puis une fois la feuille XL complétée à la mimine,
faire le transfert dans l'autre sens, XL vers OL.

J'ai trouvé une sub donnée par Michdenis mais attribuée à un inconnu.
Elle fonctionne pour le sens OL vers XL.
Je ne comprend pas bien les lignes telle la suivante car je ne récupère
pas le nom du champ, mais enfin bref, ça marche. Il suffit de mettre les
entêtes de champs perso dans XL à la main. C'est pas le diable.

..Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

Si le titre de mon champ comprend un espace, par exemple : Nom Dirigeant
et que je remplace FirstName par Nom Dirigeant, alors j'ai une erreur de
compile.

Ma question : Comment écrire la ligne
..Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant
qui plante sous cette forme à cause de l'espace entre nom et dirigeant ?

OL snobe les champs personnalisés et comme j'ai une procédure OL qui va
faire le chemin inverse, je dois aussi modifier la même syntaxe. Là je
suppose que cela doit être vital d'avoir le bon nom de champ :
objItem.Nom Dirigeant à la place de objItem.User1

objItem.UserProperties("Custom1") = objItem.User1

le code :

la sub Michdenis c'est dans le sens OL vers XL
'-------------------------------------
Sub ImporterContacts()
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim ObjFolder As MAPIFolder
Dim NumLigne As Integer
Dim NbContacts As Integer

Set objApp = New Outlook.Application
Set objNS = objApp.GetNamespace("MAPI")
Set ObjFolder = objNS.GetDefaultFolder(olFolderContacts)

NumLigne = 1
NbContacts = ObjFolder.Items.Count

For A = 1 To NbContacts
NumLigne = NumLigne + 1
With Worksheets("Feuil1")
.Cells(NumLigne, 1) = ObjFolder.Items(A)
.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName
.Cells(NumLigne, 3) = ObjFolder.Items(A).LastName
.Cells(NumLigne, 4) = ObjFolder.Items(A).Email1Address
End With
Next

Set objApp = Nothing: Set objNS = Nothing: Set ObjFolder = Nothing
End Sub
'-------------------------------------

et celle là (http://www.outlookcode.com/d/code/convertfields.htm)
que je n'ai pas encore testé, c'est dans le sens XL vers OL

Sub ConvertFields()
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItems As Items
Dim objItem As Object

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then
Set objItems = objFolder.Items
For Each objItem In objItems
' make sure you have a Contact item
If objItem.Class = olContact Then
' convert to your published custom form
objItem.MessageClass = "IPM.Contact.Custom"
' copy data to your custom fields
objItem.UserProperties("Custom1") = objItem.User1
objItem.UserProperties("Custom2") = objItem.User2
objItem.UserProperties("Custom3") = objItem.User3
objItem.UserProperties("Custom4") = objItem.User4
objItem.User1 = ""
objItem.User2 = ""
objItem.User3 = ""
objItem.User4 = ""
objItem.Save
End If
Next
End If

Set objItems = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Sub


Merci pour votre aide




Avatar
twinley
Pour ne pas faire bondir les puristes, il est entendu que un simple
copié dans OL sur une présentation Liste téléphonique puis un collé dans
XL donne la liste complète avec les champs standards OL et les champs
perso OL.
Mais je souhaite mettre cette applique dans plusieurs mains qui vont
remplir une petite partie de la base chacun. Il faut une partie
automatisée.
Et je n'ai pas encore la certitude que le tranfert des champs perso dans
le sens XL vers OL va marcher à merveille...
Chaque jour suffit à sa peine.

à+twinley

Bonjour Twinley,


..Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

FirstName = Nom de la propriété de l'item (c'est à dire l'entrée du carnet de contacts). Tu ne peux pas la modifier comme cela :

..Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant

Mais tu devrais pouvoir adapter comme ceci :

..Cells(NumLigne, 2) = ObjFolder.Items("Nom Dirigeant").FirstName

Et comme il y a un espace de l'appellation de l'item, la syntaxe peut être celle-ci :

..Cells(NumLigne, 2) = ObjFolder.Items("'Nom Dirigeant'").FirstName
(Nom Dirigeant est entouré de guillemets simples suivis de guillements doubles.


exemple dans le modèle objet Excel :

Tu ne peux pas modifier : Sheets(1).Name par Sheets(1).Nom MaFeuille
Mais Sheets(1).name ou Sheets("'Nom MaFeuille'").name , c'est la même chose.


Salutations!




"twinley" a écrit dans le message de news: uKakK%

Bonjour à tous,

Je prépare le transfert de contacts Outlook avec champs personnalisés,
depuis OL vers XL. Puis une fois la feuille XL complétée à la mimine,
faire le transfert dans l'autre sens, XL vers OL.

J'ai trouvé une sub donnée par Michdenis mais attribuée à un inconnu.
Elle fonctionne pour le sens OL vers XL.
Je ne comprend pas bien les lignes telle la suivante car je ne récupère
pas le nom du champ, mais enfin bref, ça marche. Il suffit de mettre les
entêtes de champs perso dans XL à la main. C'est pas le diable.

..Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

Si le titre de mon champ comprend un espace, par exemple : Nom Dirigeant
et que je remplace FirstName par Nom Dirigeant, alors j'ai une erreur de
compile.

Ma question : Comment écrire la ligne
..Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant
qui plante sous cette forme à cause de l'espace entre nom et dirigeant ?

OL snobe les champs personnalisés et comme j'ai une procédure OL qui va
faire le chemin inverse, je dois aussi modifier la même syntaxe. Là je
suppose que cela doit être vital d'avoir le bon nom de champ :
objItem.Nom Dirigeant à la place de objItem.User1

objItem.UserProperties("Custom1") = objItem.User1

le code :

la sub Michdenis c'est dans le sens OL vers XL
'-------------------------------------
Sub ImporterContacts()
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim ObjFolder As MAPIFolder
Dim NumLigne As Integer
Dim NbContacts As Integer

Set objApp = New Outlook.Application
Set objNS = objApp.GetNamespace("MAPI")
Set ObjFolder = objNS.GetDefaultFolder(olFolderContacts)

NumLigne = 1
NbContacts = ObjFolder.Items.Count

For A = 1 To NbContacts
NumLigne = NumLigne + 1
With Worksheets("Feuil1")
.Cells(NumLigne, 1) = ObjFolder.Items(A)
.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName
.Cells(NumLigne, 3) = ObjFolder.Items(A).LastName
.Cells(NumLigne, 4) = ObjFolder.Items(A).Email1Address
End With
Next

Set objApp = Nothing: Set objNS = Nothing: Set ObjFolder = Nothing
End Sub
'-------------------------------------

et celle là (http://www.outlookcode.com/d/code/convertfields.htm)
que je n'ai pas encore testé, c'est dans le sens XL vers OL

Sub ConvertFields()
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItems As Items
Dim objItem As Object

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then
Set objItems = objFolder.Items
For Each objItem In objItems
' make sure you have a Contact item
If objItem.Class = olContact Then
' convert to your published custom form
objItem.MessageClass = "IPM.Contact.Custom"
' copy data to your custom fields
objItem.UserProperties("Custom1") = objItem.User1
objItem.UserProperties("Custom2") = objItem.User2
objItem.UserProperties("Custom3") = objItem.User3
objItem.UserProperties("Custom4") = objItem.User4
objItem.User1 = ""
objItem.User2 = ""
objItem.User3 = ""
objItem.User4 = ""
objItem.Save
End If
Next
End If

Set objItems = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Sub


Merci pour votre aide




Avatar
twinley
Bonjour à rous, Bonjour Michel Pierron

Je reprend une partie de la réponse adressée à Michdenis :

J'utilise des champs outlook déjà definis et des champs personnalisés.
Les champs déjà définis, il faut trouver la syntaxe en anglais. Savoir
ou , il faut tatonner ? Il y a un champ standard Classé Sous mais ou
puis je trouvé la traduction, par exemple.

Dans ma base de test, j'ai 11 champs dont trois champs perso qui sont
Nom Responsable, siret, urssaf. La base définitive aura plus de 40
champs perso.
Nom Responsable on peut le traduire par ManagerName mais ce n'est pas
mon champ. Donc il ne le voit pas. Ca passe bien mais il ne ramasse pas
la donnée.

Merci pour ton aide.

à+twinley

Bonjour Twinley;
..Cells(NumLigne, 2) = ObjFolder.Items(A).ManagerName

MP

"twinley" a écrit dans le message de news:
uKakK#

Bonjour à tous,

Je prépare le transfert de contacts Outlook avec champs personnalisés,
depuis OL vers XL. Puis une fois la feuille XL complétée à la mimine,
faire le transfert dans l'autre sens, XL vers OL.

J'ai trouvé une sub donnée par Michdenis mais attribuée à un inconnu.
Elle fonctionne pour le sens OL vers XL.
Je ne comprend pas bien les lignes telle la suivante car je ne récupère
pas le nom du champ, mais enfin bref, ça marche. Il suffit de mettre les
entêtes de champs perso dans XL à la main. C'est pas le diable.

.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

Si le titre de mon champ comprend un espace, par exemple : Nom Dirigeant
et que je remplace FirstName par Nom Dirigeant, alors j'ai une erreur de
compile.

Ma question : Comment écrire la ligne
.Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant
qui plante sous cette forme à cause de l'espace entre nom et dirigeant ?

OL snobe les champs personnalisés et comme j'ai une procédure OL qui va
faire le chemin inverse, je dois aussi modifier la même syntaxe. Là je
suppose que cela doit être vital d'avoir le bon nom de champ :
objItem.Nom Dirigeant à la place de objItem.User1

objItem.UserProperties("Custom1") = objItem.User1

le code :

la sub Michdenis c'est dans le sens OL vers XL
'-------------------------------------
Sub ImporterContacts()
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim ObjFolder As MAPIFolder
Dim NumLigne As Integer
Dim NbContacts As Integer

Set objApp = New Outlook.Application
Set objNS = objApp.GetNamespace("MAPI")
Set ObjFolder = objNS.GetDefaultFolder(olFolderContacts)

NumLigne = 1
NbContacts = ObjFolder.Items.Count

For A = 1 To NbContacts
NumLigne = NumLigne + 1
With Worksheets("Feuil1")
.Cells(NumLigne, 1) = ObjFolder.Items(A)
.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName
.Cells(NumLigne, 3) = ObjFolder.Items(A).LastName
.Cells(NumLigne, 4) = ObjFolder.Items(A).Email1Address
End With
Next

Set objApp = Nothing: Set objNS = Nothing: Set ObjFolder = Nothing
End Sub
'-------------------------------------

et celle là (http://www.outlookcode.com/d/code/convertfields.htm)
que je n'ai pas encore testé, c'est dans le sens XL vers OL

Sub ConvertFields()
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItems As Items
Dim objItem As Object

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then
Set objItems = objFolder.Items
For Each objItem In objItems
' make sure you have a Contact item
If objItem.Class = olContact Then
' convert to your published custom form
objItem.MessageClass = "IPM.Contact.Custom"
' copy data to your custom fields
objItem.UserProperties("Custom1") = objItem.User1
objItem.UserProperties("Custom2") = objItem.User2
objItem.UserProperties("Custom3") = objItem.User3
objItem.UserProperties("Custom4") = objItem.User4
objItem.User1 = ""
objItem.User2 = ""
objItem.User3 = ""
objItem.User4 = ""
objItem.Save
End If
Next
End If

Set objItems = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Sub


Merci pour votre aide


--
à+twinley







Avatar
MichDenis
Bonjour Twinley,

Je ne connais pas OL et je n'ai jamais utilisé ce bout de code. Si j'ai du temps... je testerai en fin de journée !


Salutations!



"twinley" a écrit dans le message de news:
Pour ne pas faire bondir les puristes, il est entendu que un simple
copié dans OL sur une présentation Liste téléphonique puis un collé dans
XL donne la liste complète avec les champs standards OL et les champs
perso OL.
Mais je souhaite mettre cette applique dans plusieurs mains qui vont
remplir une petite partie de la base chacun. Il faut une partie
automatisée.
Et je n'ai pas encore la certitude que le tranfert des champs perso dans
le sens XL vers OL va marcher à merveille...
Chaque jour suffit à sa peine.

à+twinley

Bonjour Twinley,


..Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

FirstName = Nom de la propriété de l'item (c'est à dire l'entrée du carnet de contacts). Tu ne peux pas la modifier comme cela :

..Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant

Mais tu devrais pouvoir adapter comme ceci :

..Cells(NumLigne, 2) = ObjFolder.Items("Nom Dirigeant").FirstName

Et comme il y a un espace de l'appellation de l'item, la syntaxe peut être celle-ci :

..Cells(NumLigne, 2) = ObjFolder.Items("'Nom Dirigeant'").FirstName
(Nom Dirigeant est entouré de guillemets simples suivis de guillements doubles.


exemple dans le modèle objet Excel :

Tu ne peux pas modifier : Sheets(1).Name par Sheets(1).Nom MaFeuille
Mais Sheets(1).name ou Sheets("'Nom MaFeuille'").name , c'est la même chose.


Salutations!




"twinley" a écrit dans le message de news: uKakK%

Bonjour à tous,

Je prépare le transfert de contacts Outlook avec champs personnalisés,
depuis OL vers XL. Puis une fois la feuille XL complétée à la mimine,
faire le transfert dans l'autre sens, XL vers OL.

J'ai trouvé une sub donnée par Michdenis mais attribuée à un inconnu.
Elle fonctionne pour le sens OL vers XL.
Je ne comprend pas bien les lignes telle la suivante car je ne récupère
pas le nom du champ, mais enfin bref, ça marche. Il suffit de mettre les
entêtes de champs perso dans XL à la main. C'est pas le diable.

..Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

Si le titre de mon champ comprend un espace, par exemple : Nom Dirigeant
et que je remplace FirstName par Nom Dirigeant, alors j'ai une erreur de
compile.

Ma question : Comment écrire la ligne
..Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant
qui plante sous cette forme à cause de l'espace entre nom et dirigeant ?

OL snobe les champs personnalisés et comme j'ai une procédure OL qui va
faire le chemin inverse, je dois aussi modifier la même syntaxe. Là je
suppose que cela doit être vital d'avoir le bon nom de champ :
objItem.Nom Dirigeant à la place de objItem.User1

objItem.UserProperties("Custom1") = objItem.User1

le code :

la sub Michdenis c'est dans le sens OL vers XL
'-------------------------------------
Sub ImporterContacts()
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim ObjFolder As MAPIFolder
Dim NumLigne As Integer
Dim NbContacts As Integer

Set objApp = New Outlook.Application
Set objNS = objApp.GetNamespace("MAPI")
Set ObjFolder = objNS.GetDefaultFolder(olFolderContacts)

NumLigne = 1
NbContacts = ObjFolder.Items.Count

For A = 1 To NbContacts
NumLigne = NumLigne + 1
With Worksheets("Feuil1")
.Cells(NumLigne, 1) = ObjFolder.Items(A)
.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName
.Cells(NumLigne, 3) = ObjFolder.Items(A).LastName
.Cells(NumLigne, 4) = ObjFolder.Items(A).Email1Address
End With
Next

Set objApp = Nothing: Set objNS = Nothing: Set ObjFolder = Nothing
End Sub
'-------------------------------------

et celle là (http://www.outlookcode.com/d/code/convertfields.htm)
que je n'ai pas encore testé, c'est dans le sens XL vers OL

Sub ConvertFields()
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItems As Items
Dim objItem As Object

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then
Set objItems = objFolder.Items
For Each objItem In objItems
' make sure you have a Contact item
If objItem.Class = olContact Then
' convert to your published custom form
objItem.MessageClass = "IPM.Contact.Custom"
' copy data to your custom fields
objItem.UserProperties("Custom1") = objItem.User1
objItem.UserProperties("Custom2") = objItem.User2
objItem.UserProperties("Custom3") = objItem.User3
objItem.UserProperties("Custom4") = objItem.User4
objItem.User1 = ""
objItem.User2 = ""
objItem.User3 = ""
objItem.User4 = ""
objItem.Save
End If
Next
End If

Set objItems = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Sub


Merci pour votre aide




Avatar
twinley
Merci Michdenis, je continue à chercher car si je peux faire passer les
champs perso, je ne crée ma base qu'avec des champs à moi et je n'ai pas
de problème de traduction.

à+twinley

Bonjour Twinley,

Je ne connais pas OL et je n'ai jamais utilisé ce bout de code. Si j'ai du temps... je testerai en fin de journée !


Salutations!



"twinley" a écrit dans le message de news:
Pour ne pas faire bondir les puristes, il est entendu que un simple
copié dans OL sur une présentation Liste téléphonique puis un collé dans
XL donne la liste complète avec les champs standards OL et les champs
perso OL.
Mais je souhaite mettre cette applique dans plusieurs mains qui vont
remplir une petite partie de la base chacun. Il faut une partie
automatisée.
Et je n'ai pas encore la certitude que le tranfert des champs perso dans
le sens XL vers OL va marcher à merveille...
Chaque jour suffit à sa peine.

à+twinley


Bonjour Twinley,


..Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

FirstName = Nom de la propriété de l'item (c'est à dire l'entrée du carnet de contacts). Tu ne peux pas la modifier comme cela :

..Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant

Mais tu devrais pouvoir adapter comme ceci :

..Cells(NumLigne, 2) = ObjFolder.Items("Nom Dirigeant").FirstName

Et comme il y a un espace de l'appellation de l'item, la syntaxe peut être celle-ci :

..Cells(NumLigne, 2) = ObjFolder.Items("'Nom Dirigeant'").FirstName
(Nom Dirigeant est entouré de guillemets simples suivis de guillements doubles.


exemple dans le modèle objet Excel :

Tu ne peux pas modifier : Sheets(1).Name par Sheets(1).Nom MaFeuille
Mais Sheets(1).name ou Sheets("'Nom MaFeuille'").name , c'est la même chose.


Salutations!




"twinley" a écrit dans le message de news: uKakK%

Bonjour à tous,

Je prépare le transfert de contacts Outlook avec champs personnalisés,
depuis OL vers XL. Puis une fois la feuille XL complétée à la mimine,
faire le transfert dans l'autre sens, XL vers OL.

J'ai trouvé une sub donnée par Michdenis mais attribuée à un inconnu.
Elle fonctionne pour le sens OL vers XL.
Je ne comprend pas bien les lignes telle la suivante car je ne récupère
pas le nom du champ, mais enfin bref, ça marche. Il suffit de mettre les
entêtes de champs perso dans XL à la main. C'est pas le diable.

..Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

Si le titre de mon champ comprend un espace, par exemple : Nom Dirigeant
et que je remplace FirstName par Nom Dirigeant, alors j'ai une erreur de
compile.

Ma question : Comment écrire la ligne
..Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant
qui plante sous cette forme à cause de l'espace entre nom et dirigeant ?

OL snobe les champs personnalisés et comme j'ai une procédure OL qui va
faire le chemin inverse, je dois aussi modifier la même syntaxe. Là je
suppose que cela doit être vital d'avoir le bon nom de champ :
objItem.Nom Dirigeant à la place de objItem.User1

objItem.UserProperties("Custom1") = objItem.User1

le code :

la sub Michdenis c'est dans le sens OL vers XL
'-------------------------------------
Sub ImporterContacts()
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim ObjFolder As MAPIFolder
Dim NumLigne As Integer
Dim NbContacts As Integer

Set objApp = New Outlook.Application
Set objNS = objApp.GetNamespace("MAPI")
Set ObjFolder = objNS.GetDefaultFolder(olFolderContacts)

NumLigne = 1
NbContacts = ObjFolder.Items.Count

For A = 1 To NbContacts
NumLigne = NumLigne + 1
With Worksheets("Feuil1")
.Cells(NumLigne, 1) = ObjFolder.Items(A)
.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName
.Cells(NumLigne, 3) = ObjFolder.Items(A).LastName
.Cells(NumLigne, 4) = ObjFolder.Items(A).Email1Address
End With
Next

Set objApp = Nothing: Set objNS = Nothing: Set ObjFolder = Nothing
End Sub
'-------------------------------------

et celle là (http://www.outlookcode.com/d/code/convertfields.htm)
que je n'ai pas encore testé, c'est dans le sens XL vers OL

Sub ConvertFields()
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItems As Items
Dim objItem As Object

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then
Set objItems = objFolder.Items
For Each objItem In objItems
' make sure you have a Contact item
If objItem.Class = olContact Then
' convert to your published custom form
objItem.MessageClass = "IPM.Contact.Custom"
' copy data to your custom fields
objItem.UserProperties("Custom1") = objItem.User1
objItem.UserProperties("Custom2") = objItem.User2
objItem.UserProperties("Custom3") = objItem.User3
objItem.UserProperties("Custom4") = objItem.User4
objItem.User1 = ""
objItem.User2 = ""
objItem.User3 = ""
objItem.User4 = ""
objItem.Save
End If
Next
End If

Set objItems = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Sub


Merci pour votre aide









Avatar
Michel Pierron
Re twinley;
As tu essayé:
.Cells(NumLigne, 2) = ObjFolder.Items(A).UserProperties("Nom de ton champ")

MP

"twinley" a écrit dans le message de news:
uKakK#

Bonjour à tous,

Je prépare le transfert de contacts Outlook avec champs personnalisés,
depuis OL vers XL. Puis une fois la feuille XL complétée à la mimine,
faire le transfert dans l'autre sens, XL vers OL.

J'ai trouvé une sub donnée par Michdenis mais attribuée à un inconnu.
Elle fonctionne pour le sens OL vers XL.
Je ne comprend pas bien les lignes telle la suivante car je ne récupère
pas le nom du champ, mais enfin bref, ça marche. Il suffit de mettre les
entêtes de champs perso dans XL à la main. C'est pas le diable.

.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

Si le titre de mon champ comprend un espace, par exemple : Nom Dirigeant
et que je remplace FirstName par Nom Dirigeant, alors j'ai une erreur de
compile.

Ma question : Comment écrire la ligne
.Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant
qui plante sous cette forme à cause de l'espace entre nom et dirigeant ?

OL snobe les champs personnalisés et comme j'ai une procédure OL qui va
faire le chemin inverse, je dois aussi modifier la même syntaxe. Là je
suppose que cela doit être vital d'avoir le bon nom de champ :
objItem.Nom Dirigeant à la place de objItem.User1

objItem.UserProperties("Custom1") = objItem.User1

le code :

la sub Michdenis c'est dans le sens OL vers XL
'-------------------------------------
Sub ImporterContacts()
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim ObjFolder As MAPIFolder
Dim NumLigne As Integer
Dim NbContacts As Integer

Set objApp = New Outlook.Application
Set objNS = objApp.GetNamespace("MAPI")
Set ObjFolder = objNS.GetDefaultFolder(olFolderContacts)

NumLigne = 1
NbContacts = ObjFolder.Items.Count

For A = 1 To NbContacts
NumLigne = NumLigne + 1
With Worksheets("Feuil1")
.Cells(NumLigne, 1) = ObjFolder.Items(A)
.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName
.Cells(NumLigne, 3) = ObjFolder.Items(A).LastName
.Cells(NumLigne, 4) = ObjFolder.Items(A).Email1Address
End With
Next

Set objApp = Nothing: Set objNS = Nothing: Set ObjFolder = Nothing
End Sub
'-------------------------------------

et celle là (http://www.outlookcode.com/d/code/convertfields.htm)
que je n'ai pas encore testé, c'est dans le sens XL vers OL

Sub ConvertFields()
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItems As Items
Dim objItem As Object

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then
Set objItems = objFolder.Items
For Each objItem In objItems
' make sure you have a Contact item
If objItem.Class = olContact Then
' convert to your published custom form
objItem.MessageClass = "IPM.Contact.Custom"
' copy data to your custom fields
objItem.UserProperties("Custom1") = objItem.User1
objItem.UserProperties("Custom2") = objItem.User2
objItem.UserProperties("Custom3") = objItem.User3
objItem.UserProperties("Custom4") = objItem.User4
objItem.User1 = ""
objItem.User2 = ""
objItem.User3 = ""
objItem.User4 = ""
objItem.Save
End If
Next
End If

Set objItems = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Sub


Merci pour votre aide


--
à+twinley


Avatar
twinley
Bonsoir,

oui sous les formes suivantes

= ObjFolder.Items(A).UserProperties("Nom Dirigeant")
= ObjFolder.Items(A).UserProperties("'Nom Dirigeant'")
= ObjFolder.Items(A).UserProperties("user1")

après avoir ajouté un champ user1

mais j'ai une erreur automation ou bien 1004

J'ai nommé la zone dans XL.
Les champs ont des données.
J'ai utilisé le mappage côté OL, un truc pas clair, pour utiliser la
méthode import/export...

Et puis par manque de chance je n'arrive pas à lancer les macro dans
outlook, j'ai une case grisée dans sécurité, faire confiance au projet
visual basic. J'ai posé la question sur mpfol. J'aurais aimé validé la
macro qui transfert les champs perso vers OL.

Je suis un peu à cours d'idée, pourtant c'est pas loin. Userproperties
est pour VBA OL et l'aide dit :

Dim objProperty As Outlook.UserProperty

Set objProperty = objContact.UserProperties.Find("LastDateContacted")

Il faut que je place bien tout ces trucs, en simplifiant les noms des
champs sans espace.

Merci pour le coup de main

à+twinley

Re twinley;
As tu essayé:
..Cells(NumLigne, 2) = ObjFolder.Items(A).UserProperties("Nom de ton champ")

MP

"twinley" a écrit dans le message de news:
uKakK#

Bonjour à tous,

Je prépare le transfert de contacts Outlook avec champs personnalisés,
depuis OL vers XL. Puis une fois la feuille XL complétée à la mimine,
faire le transfert dans l'autre sens, XL vers OL.

J'ai trouvé une sub donnée par Michdenis mais attribuée à un inconnu.
Elle fonctionne pour le sens OL vers XL.
Je ne comprend pas bien les lignes telle la suivante car je ne récupère
pas le nom du champ, mais enfin bref, ça marche. Il suffit de mettre les
entêtes de champs perso dans XL à la main. C'est pas le diable.

.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

Si le titre de mon champ comprend un espace, par exemple : Nom Dirigeant
et que je remplace FirstName par Nom Dirigeant, alors j'ai une erreur de
compile.

Ma question : Comment écrire la ligne
.Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant
qui plante sous cette forme à cause de l'espace entre nom et dirigeant ?

OL snobe les champs personnalisés et comme j'ai une procédure OL qui va
faire le chemin inverse, je dois aussi modifier la même syntaxe. Là je
suppose que cela doit être vital d'avoir le bon nom de champ :
objItem.Nom Dirigeant à la place de objItem.User1

objItem.UserProperties("Custom1") = objItem.User1

le code :

la sub Michdenis c'est dans le sens OL vers XL
'-------------------------------------
Sub ImporterContacts()
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim ObjFolder As MAPIFolder
Dim NumLigne As Integer
Dim NbContacts As Integer

Set objApp = New Outlook.Application
Set objNS = objApp.GetNamespace("MAPI")
Set ObjFolder = objNS.GetDefaultFolder(olFolderContacts)

NumLigne = 1
NbContacts = ObjFolder.Items.Count

For A = 1 To NbContacts
NumLigne = NumLigne + 1
With Worksheets("Feuil1")
.Cells(NumLigne, 1) = ObjFolder.Items(A)
.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName
.Cells(NumLigne, 3) = ObjFolder.Items(A).LastName
.Cells(NumLigne, 4) = ObjFolder.Items(A).Email1Address
End With
Next

Set objApp = Nothing: Set objNS = Nothing: Set ObjFolder = Nothing
End Sub
'-------------------------------------

et celle là (http://www.outlookcode.com/d/code/convertfields.htm)
que je n'ai pas encore testé, c'est dans le sens XL vers OL

Sub ConvertFields()
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItems As Items
Dim objItem As Object

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then
Set objItems = objFolder.Items
For Each objItem In objItems
' make sure you have a Contact item
If objItem.Class = olContact Then
' convert to your published custom form
objItem.MessageClass = "IPM.Contact.Custom"
' copy data to your custom fields
objItem.UserProperties("Custom1") = objItem.User1
objItem.UserProperties("Custom2") = objItem.User2
objItem.UserProperties("Custom3") = objItem.User3
objItem.UserProperties("Custom4") = objItem.User4
objItem.User1 = ""
objItem.User2 = ""
objItem.User3 = ""
objItem.User4 = ""
objItem.Save
End If
Next
End If

Set objItems = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Sub


Merci pour votre aide


--
à+twinley







Avatar
J
Bonjour Twinley
ton travail m'intéresse beaucoup, si tu peux diffuser ton code quand il sera
au point ;-) j'en serai enchanté.
merci à toi
J@@

"twinley" ,
oui sous les formes suivantes

= ObjFolder.Items(A).UserProperties("Nom Dirigeant")
= ObjFolder.Items(A).UserProperties("'Nom Dirigeant'")
= ObjFolder.Items(A).UserProperties("user1")

après avoir ajouté un champ user1

mais j'ai une erreur automation ou bien 1004

J'ai nommé la zone dans XL.
Les champs ont des données.
J'ai utilisé le mappage côté OL, un truc pas clair, pour utiliser la
méthode import/export...

Et puis par manque de chance je n'arrive pas à lancer les macro dans
outlook, j'ai une case grisée dans sécurité, faire confiance au projet
visual basic. J'ai posé la question sur mpfol. J'aurais aimé validé la
macro qui transfert les champs perso vers OL.

Je suis un peu à cours d'idée, pourtant c'est pas loin. Userproperties est
pour VBA OL et l'aide dit :

Dim objProperty As Outlook.UserProperty

Set objProperty = objContact.UserProperties.Find("LastDateContacted")

Il faut que je place bien tout ces trucs, en simplifiant les noms des
champs sans espace.

Merci pour le coup de main

à+twinley

Re twinley;
As tu essayé:
..Cells(NumLigne, 2) = ObjFolder.Items(A).UserProperties("Nom de ton
champ")

MP

"twinley",

Je prépare le transfert de contacts Outlook avec champs personnalisés,
depuis OL vers XL. Puis une fois la feuille XL complétée à la mimine,
faire le transfert dans l'autre sens, XL vers OL.

J'ai trouvé une sub donnée par Michdenis mais attribuée à un inconnu.
Elle fonctionne pour le sens OL vers XL.
Je ne comprend pas bien les lignes telle la suivante car je ne récupère
pas le nom du champ, mais enfin bref, ça marche. Il suffit de mettre les
entêtes de champs perso dans XL à la main. C'est pas le diable.

.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName

Si le titre de mon champ comprend un espace, par exemple : Nom Dirigeant
et que je remplace FirstName par Nom Dirigeant, alors j'ai une erreur de
compile.

Ma question : Comment écrire la ligne
.Cells(NumLigne, 2) = ObjFolder.Items(A).Nom Dirigeant
qui plante sous cette forme à cause de l'espace entre nom et dirigeant ?

OL snobe les champs personnalisés et comme j'ai une procédure OL qui va
faire le chemin inverse, je dois aussi modifier la même syntaxe. Là je
suppose que cela doit être vital d'avoir le bon nom de champ :
objItem.Nom Dirigeant à la place de objItem.User1

objItem.UserProperties("Custom1") = objItem.User1

le code :

la sub Michdenis c'est dans le sens OL vers XL
'-------------------------------------
Sub ImporterContacts()
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim ObjFolder As MAPIFolder
Dim NumLigne As Integer
Dim NbContacts As Integer

Set objApp = New Outlook.Application
Set objNS = objApp.GetNamespace("MAPI")
Set ObjFolder = objNS.GetDefaultFolder(olFolderContacts)

NumLigne = 1
NbContacts = ObjFolder.Items.Count

For A = 1 To NbContacts
NumLigne = NumLigne + 1
With Worksheets("Feuil1")
.Cells(NumLigne, 1) = ObjFolder.Items(A)
.Cells(NumLigne, 2) = ObjFolder.Items(A).FirstName
.Cells(NumLigne, 3) = ObjFolder.Items(A).LastName
.Cells(NumLigne, 4) = ObjFolder.Items(A).Email1Address
End With
Next

Set objApp = Nothing: Set objNS = Nothing: Set ObjFolder = Nothing
End Sub
'-------------------------------------

et celle là (http://www.outlookcode.com/d/code/convertfields.htm)
que je n'ai pas encore testé, c'est dans le sens XL vers OL

Sub ConvertFields()
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItems As Items
Dim objItem As Object

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then
Set objItems = objFolder.Items
For Each objItem In objItems
' make sure you have a Contact item
If objItem.Class = olContact Then
' convert to your published custom form
objItem.MessageClass = "IPM.Contact.Custom"
' copy data to your custom fields
objItem.UserProperties("Custom1") = objItem.User1
objItem.UserProperties("Custom2") = objItem.User2
objItem.UserProperties("Custom3") = objItem.User3
objItem.UserProperties("Custom4") = objItem.User4
objItem.User1 = ""
objItem.User2 = ""
objItem.User3 = ""
objItem.User4 = ""
objItem.Save
End If
Next
End If

Set objItems = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Sub


Merci pour votre aide


--
à+twinley








1 2 3