Macro Importation Active Directory

Nanobul -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
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

7 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  2. Nanobul
     
    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
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  4. nanobul
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  7. nanobul
     
    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
  8. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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