IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Exporter mes utilisateurs Active Directory dans Access


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 161
    Points : 77
    Points
    77
    Par défaut Exporter mes utilisateurs Active Directory dans Access
    Bonjour,

    je souhaiterais importer dans une table Access l'ensemble des utilisateurs de l'Active Directory.

    En cherchant sur le net, je trouve beaucoup de code pour Excel mais rien pour Access.
    Quelqu'un pourrait il m'aider ?
    D'avance merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 664
    Points : 34 371
    Points
    34 371
    Par défaut
    salut
    le raisonnement peut être simple si tu pars du fichier excel, et que tu importes le résultat.

    As-tu un code sous excel qui t'a plu déjà ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    J'ai ce code qui correspond parfaitement à mes attentes.
    C'est un script dans Excel qui fonctionne très bien. Je voudrais faire la même chose mais directement depuis Access.

    Si quelqu'un peut m'aiguiller ce serait génial

    Voici le script qui fonctionne dans Excel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
     
    Dim fso, MyFile, reptemp, filetext
    'stroucible = InputBox("renseigner le nom de l'ou cible : ")
    ' Attention à modifier le nom LDAP du domaine
    strDomainDN = "Mon OU masquée volontairement"
    ' Attention le répertoire c:\temp doit exister
    reptemp = "T:\Exploitation\Extraction_AD\"
    filetext = "ad_users"
    Set fso = CreateObject("Scripting.FileSystemObject")
    ' création d'un fichier txt pour la première partie du script, soit le nom des utilisateurs
    Set MyFile = fso.CreateTextFile(reptemp + filetext + ".txt")
    ' Ici un filtre sur les utilisateurs et je récupére leur Distinguishedname
    strBase = "<LDAP://" & strDomainDN & ">;"
    strFilter = "(&(objectclass=user)(objectcategory=person));"
    strAttrs = "distinguishedname;"
    strScope = "subtree"
    Set objConn = CreateObject("ADODB.Connection")
    objConn.Provider = "ADsDSOObject"
    objConn.Open "Active Directory Provider"
    ' Ici lancement de la requêtes et écriture dans le fichier txt dans le c:\temp
    Set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
    objRS.MoveFirst
    While Not objRS.EOF
    MyFile.WriteLine (objRS.Fields(0).Value)
        objRS.MoveNext
    Wend
    MyFile.Close
    ' Maintenant avec le fichier txt je récupère les informations utilisateurs par utilisateurs
    On Error Resume Next
    Dim objConnection, objRecords, objExcel, strQuery, i, objSpread, intRow
    'Attention le fichier C:\sources.xls doit exister
    strSheet = "T:\Exploitation\Extraction_AD\Source.xls"
    Set objExcel = CreateObject("Excel.Application")
    Set objSpread = objExcel.Workbooks.Open(strSheet)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set UserListe = objFSO.OpenTextFile(reptemp + filetext + ".txt")
    'Renseigner le numéro de la première ligne Excel ou vous souhaité écrire les inforamations
    i = 2
      ' liste des attributs à récupérer
      Do Until UserListe.AtEndofStream
        UserLDAP = UserListe.Readline
        Set objUser = GetObject("LDAP://" & UserLDAP & "")
            CNStr = Left(UserLDAP, InStr(UserLDAP, ",") - 1)
            OuStr = Right(UserLDAP, Len(UserLDAP) - InStr(UserLDAP, ","))
            objExcel.ActiveSheet.Range("A" & i).Value = CNStr
            objExcel.ActiveSheet.Range("B" & i).Value = OuStr
            objExcel.ActiveSheet.Range("C" & i).Value = objUser.givenName
            objExcel.ActiveSheet.Range("D" & i).Value = objUser.initials
            objExcel.ActiveSheet.Range("E" & i).Value = objUser.sn
            objExcel.ActiveSheet.Range("F" & i).Value = objUser.displayName
            objExcel.ActiveSheet.Range("G" & i).Value = objUser.userPrincipalName
            objExcel.ActiveSheet.Range("H" & i).Value = objUser.SamaccountName
            objExcel.ActiveSheet.Range("I" & i).Value = objUser.mail
            objExcel.ActiveSheet.Range("J" & i).Value = objUser.physicalDeliveryOfficeName
            objExcel.ActiveSheet.Range("K" & i).Value = objUser.telephoneNumber
            objExcel.ActiveSheet.Range("L" & i).Value = objUser.Description
            i = i + 1
      Loop
    'Sauvegarde du fichier Excel
    objExcel.ActiveWorkbook.SaveAs (reptemp + filetext + ".xls")
    objExcel.ActiveWorkbook.Close
    objExcel.Workbooks.Close
    MsgBox "fin de récupération des utilisateurs. Le fichiers excel est dans " + reptemp + filetext + ".xls"
    objExcel.Quit
    End Sub

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    personne ne peut m'aider ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 664
    Points : 34 371
    Points
    34 371
    Par défaut
    salut,
    une fois que tu as ton fichier excel, et que sais où il se trouve, tu peux l'importer dans access, voir la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Docmd.TransfertSpreadSheet

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Voici un essai que j'ai fait pour transformer ton code.
    Il écrit directement dans la table tblUsers(CN, OU, GivenName, Initials, sn, DisplayName, userPrincipalName, SamAccountName, mail, physicalDeliveryOfficeName, telephoneNumber, Description)
    Par contre je n'arrive pas à récupérer plus de 1000 utilisateurs (?).
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Sub TstGetUsers()
    Dim strDomainDN As String
    Dim strBase As String, strFilter As String
    Dim strAttrs As String, strScope As String
    Dim objConn As ADODB.Connection, objRS As ADODB.Recordset
    Dim strUserLDAP As String, objUser As Object
    Dim strOU As String, strCN As String
    Dim accConn As ADODB.Connection, rsUser As ADODB.Recordset
     
    'stroucible = InputBox("renseigner le nom de l'ou cible : ")
    ' Attention à modifier le nom LDAP du domaine
    strDomainDN = "XXXX"
     
    strBase = "<LDAP://" & strDomainDN & ">;"
    strFilter = "(&(objectclass=user)(objectcategory=person));"
    strAttrs = "distinguishedname;"
    strScope = "subtree"
     
    Set objConn = CreateObject("ADODB.Connection")
    objConn.Provider = "ADsDSOObject"
    objConn.Open "Active Directory Provider"
    ' Ici lancement de la requête
    Set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
    objRS.MoveFirst
     
    If Not objRS.EOF Then
        DoCmd.RunSQL "DELETE FROM tblUsers"
        Set accConn = New ADODB.Connection
        accConn.ConnectionString = CurrentProject.BaseConnectionString
        accConn.Open
        Set rsUser = New ADODB.Recordset
        Set rsUser.ActiveConnection = accConn
        rsUser.Open "tblUsers", , adOpenKeyset, adLockOptimistic, adCmdTable
     
        While Not objRS.EOF
            strUserLDAP = objRS.Fields(0).Value
            Set objUser = GetObject("LDAP://" & strUserLDAP & "")
     
            strCN = Left(strUserLDAP, InStr(strUserLDAP, ",") - 1)
            strOU = Right(strUserLDAP, Len(strUserLDAP) - InStr(strUserLDAP, ","))
            ' Enregistrement dans table Access
            rsUser.AddNew
            On Error Resume Next
            rsUser!CN = strCN
            rsUser!OU = strOU
            rsUser!givenname = objUser.givenname
            rsUser!initials = objUser.initials
            rsUser!sn = objUser.sn
            rsUser!displayName = objUser.displayName
            rsUser!userPrincipalName = objUser.userPrincipalName
            rsUser!SamaccountName = objUser.SamaccountName
            rsUser!mail = objUser.mail
            rsUser!physicalDeliveryOfficeName = objUser.physicalDeliveryOfficeName
            rsUser!telephoneNumber = objUser.telephoneNumber
            rsUser!Description = objUser.Description
            On Error GoTo 0
            rsUser.Update
     
            objRS.MoveNext
        Wend
        rsUser.Close
        Set rsUser = Nothing
        accConn.Close
        Set accConn = Nothing
    End If
     
    objRS.Close
    Set objRS = Nothing
    objConn.Close
    Set objConn = Nothing
     
    End Sub
    A+

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    Merci beaucoup pour ta conversion, mais ça plante avec le message suivant :

    Erreur d'execution '2147217887 (80040e21)'
    Update ou CancelUpdate effectué sans appeler AddNew ni Edit




    on doit pas être loin de la solution....

  8. #8
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Je crois que j'ai eu ça aussi parce qu'un des champs était trop petit.
    Je n'ai pas ma base sous la main, mais je crois que j'ai tout mis à 200 caractères.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    IMPECCABLE ! ça fonctionne merci !!!!!!!!!!
    il fallait effectivement augmenter la taille des champs de ma table users

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. export d'objets active directory dans Access
    Par h lekter dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/05/2017, 14h33
  2. declarer un nouvel utilisateur active directory
    Par jacques64 dans le forum Windows XP
    Réponses: 1
    Dernier message: 03/10/2007, 09h58
  3. Récupérer nom d'utilisateur Active Directory
    Par nasbe26 dans le forum Windows
    Réponses: 3
    Dernier message: 06/09/2007, 15h57
  4. Réponses: 15
    Dernier message: 22/03/2007, 17h48
  5. Compte utilisateur Active Directory
    Par dim971 dans le forum C#
    Réponses: 9
    Dernier message: 11/02/2007, 20h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo