Macro Importation Active Directory

Fermé
Nanobul - 12 févr. 2005 à 03:05
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 14 févr. 2005 à 22:38
Hello,
Je voudrais réaliser une macro en vba pour importer le contenu d'un tableau excel dans active directory, dans le but de créer de nouveaux contacts dans le domaine.

Je dois d'abord selectionner les valeurs contenues dans les cellules de mon tableau, ensuite a l'aide de 'Set objOU' et 'oUser.Put' j'envoie vers AD.

A la fin de la sequence, il devrait boucler pour prendre la ligne suivante a importer.

L'importation fonctionne plus ou moins, seul persiste deux soucis:
1.Je n'arrive pas a faire fonctionner cette macro sur plus d'une ligne de mon tableau (de ce fait il ne crée qu'un seul contact dans active directory), je devrais faire une boucle demandant d'incrémenter la valeur de la ligne a chaque fois...mais ?
2.Si je rajoute un champ supplémentaire à importer dans active directory, plus rien ne marche, comme si je ne pouvais pas rentrer plus de 17 variables par contact.

Merci de votre aide.


Le code

Sub test()

Worksheets("import_oracle").Select

cn_cel = Range("B2").Value
dis_cel = Range("C2").Value
mail_cel = Range("E2").Value
giv_cel = Range("B2").Value
sn_cel = Range("C2").Value
str_cel = Range("F2").Value
com_cel = Range("O2").Value
l_cel = Range("G2").Value
hom_cel = Range("D2").Value
hom_cel = Range("X2").Value
mob_cel = Range("J2").Value
oth_cel = Range("W2").Value
phy_cel = Range("A2").Value
pos_cel = Range("I2").Value
poc_cel = Range("H2").Value
st_cel = Range("S2").Value
tel_cel = Range("M2").Value
co_cel = Range("V2").Value
tit_cel = Range("N2").Value
www_cel = Range("T2").Value

Set objOU = GetObject("LDAP://OU=Paul Contact, dc=mondomaine, dc=com")
Set oUser = objOU.Create("contact", "cn=contacttest23")

oUser.Put "displayName", dis_cel
oUser.Put "mail", mail_cel
oUser.Put "givenName", giv_cel
oUser.Put "sn", sn_cel
oUser.Put "streetAddress", str_cel
oUser.Put "company", com_cel
oUser.Put "homePhone", hom_cel
oUser.Put "otherTelephone", oth_cel
oUser.Put "physicalDeliveryOfficeName", phy_cel
oUser.Put "postOfficeBox", pos_cel
oUser.Put "postalCode", poc_cel
oUser.Put "st", st_cel
oUser.Put "telephoneNumber", tel_cel
oUser.Put "l", l_cel
oUser.Put "co", co_cel
oUser.Put "Title", tit_cel
oUser.Put "wWWHomePage", "www.123.be"
oUser.SetInfo


End Sub
A voir également:

7 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
12 févr. 2005 à 17:02
bonjour

"cn_cel = Range("B2").Value "

devient

"cn_cel = Range("B2").offset(lig).Value "

et tu fais progresser la variable lig

for lig =1 to max ' ta valeur maximum

ton code

next lig

je ne connais pas assez AD pour te donner la 2ème réponse.

0
Merci pour ta répponse,
j'ai encore un peu avancé grace à cela, mais certaines erreurs subsistent.
Mon tableau (a importer) est parsemé de cellules vides, lorsque je compile mon code, il s'arrete sur la ligne qui correspond a la cellule vide.
Ma premiere solution serait de lancer une macro qui complete les cellules vides du tableau, mais je suppose qu'il doit y avoir moyen de lui faire ignorer les cellules vides....mais comment

J'aimerais egalement rassembler deux variables dans la ligne suivante, cad que cn soit egal a cn_cel+giv_cel
est ce que ceci peut suffire?

Set oUser = objOU.Create("contact", "cn='cn_cel giv_cel'")

Encore un grand merci, sans un peu d'aide je suis nulle part...
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
12 févr. 2005 à 23:35
bonjour

"je suppose qu'il doit y avoir moyen de lui faire ignorer les cellules vides....mais comment"

'cn_cel = Range("B2").Value ' devient :

if not Range("B2").Value = "" then cn_cel = Range("B2").Value


"J'aimerais egalement rassembler deux variables dans la ligne suivante, cad que cn soit egal a cn_cel+giv_cel


cn_cel = Range("B2").Value
dis_cel = Range("C2").Value

devient :

cn_xxx = Range("B2").Value & Range("C2").Value

par exemple.

zoneA & zoneB concatene deux zones texte,
alors ctrA + ctrB cumule deux nombres.


0
Re-merci
Revoici le code,




Sub test()

Worksheets("import_oracle").Select
For lig = 0 To 10

If Not Range("E2").Offset(lig).Value = "" Then mail_cel = Range("E2").Offset(lig).Value
If Not Range("B2").Offset(lig).Value = "" Then givenName_cel = Range("B2").Offset(lig).Value
If Not Range("C2").Offset(lig).Value = "" Then lastname_cel = Range("C2").Offset(lig).Value
If Not Range("F2").Offset(lig).Value = "" Then street_cel = Range("F2").Offset(lig).Value
If Not Range("O2").Offset(lig).Value = "" Then company_cel = Range("O2").Offset(lig).Value
If Not Range("G2").Offset(lig).Value = "" Then l_cel = Range("G2").Offset(lig).Value
If Not Range("D2").Offset(lig).Value = "" Then homephone_cel = Range("D2").Offset(lig).Value
If Not Range("J2").Offset(lig).Value = "" Then mob_cel = Range("J2").Offset(lig).Value
If Not Range("B2").Offset(lig).Value = "" Then oth_cel = Range("B2").Offset(lig).Value
If Not Range("B2").Offset(lig).Value = "" Then phy_cel = Range("B2").Offset(lig).Value
If Not Range("I2").Offset(lig).Value = "" Then pos_cel = Range("I2").Offset(lig).Value
If Not Range("H2").Offset(lig).Value = "" Then postalcode_cel = Range("H2").Offset(lig).Value
If Not Range("B2").Offset(lig).Value = "" Then st_cel = Range("B2").Offset(lig).Value
If Not Range("M2").Offset(lig).Value = "" Then description_cel = Range("M2").Offset(lig).Value
If Not Range("D2").Offset(lig).Value = "" Then telephonenumber_cel = Range("D2").Offset(lig).Value
If Not Range("I2").Offset(lig).Value = "" Then co_cel = Range("I2").Offset(lig).Value
If Not Range("N2").Offset(lig).Value = "" Then tit_cel = Range("N2").Offset(lig).Value
If Not Range("B2").Offset(lig).Value = "" Then www_cel = Range("B2").Offset(lig).Value
If Not Range("J2").Offset(lig).Value = "" Then mobile_cel = Range("J2").Offset(lig).Value
If Not Range("K2").Offset(lig).Value = "" Then fax_cel = Range("K2").Offset(lig).Value

cn_xxx = Range("B2").Offset(lig).Value & " " & Range("C2").Offset(lig).Value
Set objOU = GetObject("LDAP://OU=Paul Contact, dc=mydomain, dc=com")
Set oUser = objOU.Create("contact", "cn=test")
oUser.Put "displayName", cn_xxx
oUser.Put "mail", mail_cel
oUser.Put "givenName", givenName_cel
oUser.Put "sn", lastname_cel
oUser.Put "streetAddress", street_cel
oUser.Put "description", description_cel
oUser.Put "company", company_cel
oUser.Put "homePhone", homephone_cel
oUser.Put "telephoneNumber", telephonenumber_cel
oUser.Put "otherTelephone", oth_cel
oUser.Put "physicalDeliveryOfficeName", phy_cel
oUser.Put "postOfficeBox", pos_cel
oUser.Put "facsimileTelephoneNumber", fax_cel
oUser.Put "postalCode", postalcode_cel
oUser.Put "st", st_cel
oUser.Put "mobile", mobile_cel
oUser.Put "l", l_cel
oUser.Put "co", co_cel
oUser.Put "Title", tit_cel
oUser.Put "wWWHomePage", "www.123.be"
oUser.SetInfo

Next lig


End Sub


Mais je crois que je fais une boulette en utilisant le code que tu me propose, il continue de bloquer sur les cellules vides (mea culpa?)et dans la ligne

Set oUser = objOU.Create("contact", "cn=test")

en utilisant cela il me crée un contact nommé test et puis bloque sur :
oUser.SetInfo (sans soute car le contact test existe déjà)

le probleme est que je ne comprends pas bien comment mettre la concatenation de cn_xxx.

si je fais cela,
Set oUser = objOU.Create("contact", "cn=cn_xxx")
il me crée un contact nommé cn_xxx (ce qui me semble logique),
quel serait le code pour qu'à chaque boucle il me crée un contact dont le nom serait égal à cn_xxx
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
14 févr. 2005 à 09:10
bonjour

" il continue de bloquer sur les cellules vides (mea culpa?)et dans la ligne"

à quel endroit de la macro bloque-t-il ?
et avec quel code ?


Set oUser = objOU.Create("contact", "cn=cn_xxx") il me crée un contact nommé cn_xxx (ce qui me semble logique),

Bien sûr, car lorsque tu mets entre guillemets,
c'est le contenu du libellé qui est utilisé.

Set oUser = objOU.Create("contact", "cn=" & cn_xxx)

permet de prendre le contenu de la zone

0
il bloque par exemple sur la ligne

oUser.Put "description", description_cel

en regardant dans mon tableau, la cellule en question est vide (M2).

Je fais un test en ajoutant une valeur "test" dans la cellule vide, a nouveau plantage sur la meme ligne.
Donc me vient l'idée que ce n'est pas la macro qui plante mais bien l'input dans AD, alors je remplace ma cellule vide par 32-123456789, et tant qu'on y est je remplace toutes les cellules vides du tableau par 32-...
Tout fonctionne, il me crée bien tous les contacts dans Active directory (et en plus avec le cn_xxx impeccable !)
Conclusion: ??

J'ai testé différentes valeurs pour remplir les cellules vides, mais
seul le xx-xxxxxxxxx semble fonctionner, Ce qui pourrait bien confirmer l'idée...

Donc l'autre solution serait de mettre des conditions pour que la ligne
oUser.Put "description", description_cel
disparaisse quand la cellule du tableau est vide et de même pour les autres cellules.
Je continue de chercher, toujours zen :-)


Encore mille merci pour ton aide
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
14 févr. 2005 à 22:38
bonsoir

tu as :

If Not Range("M2").Offset(lig).Value = "" Then description_cel = Range("M2").Offset(lig).Value

puis

oUser.Put "description", description_cel


en fait il serait plus judicieux de supprimer les premières lignes,
ce qui donnerait :

If Not Range("M2").Offset(lig).Value = "" Then

oUser.Put "description", Range("M2").Offset(lig).Value

else

oUser.Put "description",""

end if

dans Active Directory, il faudrait vérifier que les champs vides soient acceptés, mais je ne connais pas précisément.


0