begin process at 2012 02 12 18:19:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBA

 > RÉCUPÉRATION DE DONNÉE DE L'ACTIVE DIRECTORY SOUS ACCESS

RÉCUPÉRATION DE DONNÉE DE L'ACTIVE DIRECTORY SOUS ACCESS


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VBA Classé sous :Active Directory, AD, Information Utilisateur, access, groupe Niveau :Initié Date de création :10/09/2008 Date de mise à jour :11/09/2008 14:08:14 Vu / téléchargé :7 718 / 557

Auteur : baloc

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

tout est dis dans le titre. De la récupération de donnée en plusieurs parties. Le language de programation sera le VBA. La base de donnée utilisée: AD et access2003.
Je préviens quand même que je suis novice en vba donc si j'y suis arrivé à force d'acharnement tout le monde peut le faire.


Dans cette première partie nous allons récupérer certaines informations utilisateurs.

Prérequis: Base de donnée access avec les tables déjà crée. une table lognames2, elle me permettra de récupérer les informations utilisateurs, avec 6 colonnes:
-logname
-nom
-prenom
-ou
-repperso
-log_fin_prev

une petite modification. On m'a fait remarquer que mes deux sources été sur le même sujet, et de les fusionner, ce que je vais faire.
donc la partie haute sera destiné aux utilisateurs et la partie basse va concernée les groupes de sécurité en général de l'active directory

Prérequis partie groupe: une table groupes2 avec comme colonne:
-Groupe
-DESIGN

dernière modification: à present on récupère aussi les droits utilisateurs

Prérequis droits: une table logname_groupe2 avec comme colonne:
-login
-app_gr

une maquette vous est proposez en zip.

je n'ai plus qu'a vous dire bonne lecture. n'hésitez pas à voter et/ou mettre un commentaire

Source

  • Option Compare Database
  • Option Explicit 'plante le programme si une variable n'est pas déclaré
  • Sub activedir()
  • 'Déclaration des variables
  • Dim strScope As String, strAttrs As String, strFilter As String, strBase As String, strDomainDN As String
  • Dim LDAP As String, group As String, login As String, nom As String, mbrf As String
  • Dim prenom As String, validite As String, expi As String, org As String
  • Dim tvar() As String
  • Dim sql As String
  • Dim mabd As Database
  • Dim objconn As Object, objRS As Object, objuser As Object
  • Dim member As Variant
  • Set mabd = CurrentDb() 'mabd est la base de donnée dans laquel on travaille
  • strDomainDN = "(le nom de votre domaine)"
  • strBase = "<LDAP://" & strDomainDN & ">;" 'Définition de l'objet
  • strFilter = "(&(objectclass=user)(objectcategory=person));" 'Filtre le jeu d'enregistrement afin de garder que les utilisateurs dans l'objet AD
  • strAttrs = "distinguishedname;" 'Correspond à l'attribut de l'objet que l'on va regarder
  • strScope = "subtree" 'On pourra rechercher les utilisateurs dans l'arborescence
  • 'Connection à la base
  • Set objconn = CreateObject("ADODB.Connection") 'Création d'un objet pour la connexion
  • objconn.Provider = "ADsDSOObject" 'Définition du pilote de connexion
  • objconn.Open "Active Directory Provider" 'Ouverture de la base
  • 'Validation de la connexion
  • Set objRS = objconn.Execute(strBase & strFilter & strAttrs & strScope)
  • objRS.MoveFirst 'Requête d'action sur la recherche.
  • 'Suppression des données existante dans la base.
  • sql = "delete * from lognames2"
  • DoCmd.SetWarnings False 'Empêche les fenêtres de confirmation d'apparaitre
  • DoCmd.RunSQL sql
  • sql = "delete * from logname_groupe2"
  • DoCmd.RunSQL sql
  • sql = "delete * from groupes2"
  • DoCmd.RunSQL sql
  • DoCmd.SetWarnings True 'Réactive les fenêtres de confirmation
  • Do Until objRS.EOF 'Tant que ce ne sera pas le dernier utilisateur trouver la boucle continue
  • LDAP = (objRS.Fields(0).Value) 'Obtient le lien LDAP de l'objet trouver
  • Set objuser = GetObject("LDAP://" & LDAP & "")
  • 'Les propriétés recherchés de l'objet sont placer dans des variables
  • login = (objuser.sAMAccountName)
  • prenom = (objuser.givenName)
  • nom = (objuser.sn)
  • validite = Not (objuser.AccountDisabled)
  • expi = objuser.AccountExpirationDate
  • 'Travail dans les données récupérées
  • tvar() = Split(LDAP, ",") 'on découpe la variable suivant les virgules et on place chaque morceau dans un tableau
  • org = tvar(2) 'on prend la 3 ème case du tableau
  • org = Mid(org, 4, Len(org)) ' on découpe les 4 premiers caratères et on place la valeur dans une variable
  • If validite = "vrai" Then validite = 1 Else validite = 0 'conversion en donnée numérique
  • org = Replace(org, "'", "''") 'on replace les simple quote par de simple quote double, simple quote = erreur
  • prenom = Replace(prenom, "'", "''")
  • nom = Replace(nom, "'", "''")
  • login = Replace(login, "'", "''")
  • member = objuser.memberof
  • On Error Resume Next
  • For Each member In objuser.memberof
  • tvar() = Split(member, ",")
  • mbrf = tvar(0)
  • mbrf = Mid(mbrf, 4, Len(mbrf))
  • mbrf = Replace(mbrf, "'", "''")
  • 'Insertion des données dans la table logname_groupe2
  • sql = "Insert Into logname_groupe2 Values('" & login & "','" & mbrf & "')"
  • DoCmd.SetWarnings False
  • DoCmd.RunSQL sql
  • DoCmd.SetWarnings True
  • Next
  • 'Insertion des données dans la table lognames2
  • sql = "Insert Into lognames2 Values('" & login & "','" & nom & "','" & prenom & "','" & org & "'," & validite & ",'" & expi & "')"
  • DoCmd.SetWarnings False
  • DoCmd.RunSQL sql
  • DoCmd.SetWarnings True
  • objRS.MoveNext
  • Loop
  • objRS.MoveFirst
  • 'fin du script pour les utilisateurs et memberof
  • strFilter = "(&(objectclass=group)(objectcategory=*));" 'Filtre le jeu d'enregistrement
  • Set objRS = objconn.Execute(strBase & strFilter & strAttrs & strScope)
  • objRS.MoveFirst 'Requête d'action sur la recherche.
  • 'lancement des recherches et récupération des données dans des variables
  • Do Until objRS.EOF
  • LDAP = (objRS.Fields(0).Value)
  • Set objuser = GetObject("LDAP://" & LDAP & "")
  • login = (objuser.sAMAccountName)
  • tvar() = Split(LDAP, ",")
  • org = tvar(2)
  • org = Mid(org, 4, Len(org))
  • org = Replace(org, "'", "''")
  • login = Replace(login, "'", "''")
  • If org = "groupe" Then org = "global"
  • sql = "Insert Into groupes2 Values('" & login & "','" & org & "')"
  • DoCmd.SetWarnings False
  • DoCmd.RunSQL sql
  • DoCmd.SetWarnings True
  • objRS.MoveNext
  • Loop
  • 'fin du script pour les groupes
  • mabd.Close
  • Set objRS = Nothing
  • Set objconn = Nothing
  • End Sub
Option Compare Database
Option Explicit 'plante le programme si une variable n'est pas déclaré
Sub activedir()

'Déclaration des variables
Dim strScope As String, strAttrs As String, strFilter As String, strBase As String, strDomainDN As String
Dim LDAP As String, group As String, login As String, nom As String, mbrf As String
Dim prenom As String, validite As String, expi As String, org As String
Dim tvar() As String
Dim sql As String
Dim mabd As Database
Dim objconn As Object, objRS As Object, objuser As Object
Dim member As Variant

Set mabd = CurrentDb() 'mabd est la base de donnée dans laquel on travaille

strDomainDN = "(le nom de votre domaine)"
strBase = "<LDAP://" & strDomainDN & ">;" 'Définition de l'objet
strFilter = "(&(objectclass=user)(objectcategory=person));" 'Filtre le jeu d'enregistrement afin de garder que les utilisateurs dans l'objet AD
strAttrs = "distinguishedname;" 'Correspond à l'attribut de l'objet que l'on va regarder
strScope = "subtree" 'On pourra rechercher les utilisateurs dans l'arborescence

'Connection à la base
Set objconn = CreateObject("ADODB.Connection") 'Création d'un objet pour la connexion
objconn.Provider = "ADsDSOObject" 'Définition du pilote de connexion
objconn.Open "Active Directory Provider" 'Ouverture de la base

'Validation de la connexion
Set objRS = objconn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst 'Requête d'action sur la recherche.

'Suppression des données existante dans la base.
sql = "delete * from lognames2"
DoCmd.SetWarnings False 'Empêche les fenêtres de confirmation d'apparaitre
DoCmd.RunSQL sql
sql = "delete * from logname_groupe2"
DoCmd.RunSQL sql
sql = "delete * from groupes2"
DoCmd.RunSQL sql
DoCmd.SetWarnings True 'Réactive les fenêtres de confirmation



Do Until objRS.EOF 'Tant que ce ne sera pas le dernier utilisateur trouver la boucle continue
    LDAP = (objRS.Fields(0).Value)  'Obtient le lien LDAP de l'objet trouver
    Set objuser = GetObject("LDAP://" & LDAP & "")

'Les propriétés recherchés de l'objet sont placer dans des variables
    login = (objuser.sAMAccountName)
    prenom = (objuser.givenName)
    nom = (objuser.sn)
    validite = Not (objuser.AccountDisabled)
    expi = objuser.AccountExpirationDate

'Travail dans les données récupérées
    tvar() = Split(LDAP, ",") 'on découpe la variable suivant les virgules et on place chaque morceau dans un tableau
    org = tvar(2) 'on prend la 3 ème case du tableau
    org = Mid(org, 4, Len(org)) ' on découpe les 4 premiers caratères et on place la valeur dans une variable
    If validite = "vrai" Then validite = 1 Else validite = 0 'conversion en donnée numérique
    org = Replace(org, "'", "''") 'on replace les simple quote par de simple quote double, simple quote = erreur
    prenom = Replace(prenom, "'", "''")
    nom = Replace(nom, "'", "''")
    login = Replace(login, "'", "''")
    
    member = objuser.memberof
    On Error Resume Next
    For Each member In objuser.memberof
        tvar() = Split(member, ",")
        mbrf = tvar(0)
        mbrf = Mid(mbrf, 4, Len(mbrf))
        mbrf = Replace(mbrf, "'", "''")

'Insertion des données dans la table logname_groupe2
        sql = "Insert Into logname_groupe2 Values('" & login & "','" & mbrf & "')"
        DoCmd.SetWarnings False
        DoCmd.RunSQL sql
        DoCmd.SetWarnings True
    Next
'Insertion des données dans la table lognames2
    sql = "Insert Into lognames2 Values('" & login & "','" & nom & "','" & prenom & "','" & org & "'," & validite & ",'" & expi & "')"
    DoCmd.SetWarnings False
    DoCmd.RunSQL sql
    DoCmd.SetWarnings True
    objRS.MoveNext
Loop

objRS.MoveFirst

'fin du script pour les utilisateurs et memberof

strFilter = "(&(objectclass=group)(objectcategory=*));" 'Filtre le jeu d'enregistrement
Set objRS = objconn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst 'Requête d'action sur la recherche.

'lancement des recherches et récupération des données dans des variables
Do Until objRS.EOF
    LDAP = (objRS.Fields(0).Value)
    Set objuser = GetObject("LDAP://" & LDAP & "")
    login = (objuser.sAMAccountName)
    
    tvar() = Split(LDAP, ",")
    org = tvar(2)
    org = Mid(org, 4, Len(org))
    org = Replace(org, "'", "''")
    login = Replace(login, "'", "''")
    If org = "groupe" Then org = "global"
    
    sql = "Insert Into groupes2 Values('" & login & "','" & org & "')"
    DoCmd.SetWarnings False
    DoCmd.RunSQL sql
    DoCmd.SetWarnings True
    
    objRS.MoveNext
Loop

'fin du script pour les groupes
mabd.Close
Set objRS = Nothing
Set objconn = Nothing
End Sub

 Conclusion

si vous avez des question n'hésitez pas. et votez pour moi \o/

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • donnée active directory.mdbTélécharger ce fichier [Réservé aux membres club]2 830 336 octets

Télécharger le zip


 Historique

10 septembre 2008 16:34:56 :
regroupement des deux sources active directory: utilisateur et groupe de sécurité.
11 septembre 2008 14:08:14 :
mise à jour. les droits(memberof) sont rajouté à la base

 Sources de la même categorie

Source avec Zip GESTION PERSONNEL par oudlarbi
Source avec Zip Source avec une capture CALENDRIER EN VBA POUR EXCEL 2010 par nounou94
Source avec Zip Source avec une capture MANIPULER LES FENETRES ENFANT D'EXCEL par bigfish_le vrai
Source avec Zip Source avec une capture COLLECTION ID par Le Pivert
Source avec Zip Source avec une capture VBA MASQUE DE SAISIE NUMÉRIQUE par acive

 Sources en rapport avec celle ci

Source avec Zip VISUAL BASIC 2008 - PUBLIPOSTAGE, WORD ET ACCESS. par scn68100
Source avec Zip Source avec une capture Source .NET (Dotnet) OUVRIR BASE ACCESS PAR CLIC DROIT par Le Pivert
SCRIPT VBS ISMEMBER par bernes3
Source avec Zip INTÉGRATION MASSIVES ET ÉVOLUTIVES DE COMPTES ACTIVE DIRECTO... par snaps
Source avec Zip BOITE DE DIALOGUE : SÉLECTIONNER (RECHERCHER) DES UTILISATEU... par ShareVB

Commentaires et avis

Commentaire de MPi le 11/09/2008 11:18:51

Simple commentaire...
Tu dois déclarer chacune de tes variables explicitement.

Lorsque tu écris ceci
Dim objconn, objRS, objuser As Object
seul objuser est considéré comme Object. Les autres sont Variant.

Il faut donc écrire comme ceci
Dim objconn As Object, objRS As Object, objuser As Object

C'est la même chose pour les String et autres

Commentaire de baloc le 11/09/2008 12:22:05

merci pour cette remarque. prochaine modification pour les memberof d'ici peu.

Commentaire de neo2k2 le 18/09/2008 13:33:31 10/10

Excellente source! Cependant, je n'arrive pas à modifier quoique ce soit dans la DB.

Par exemple, j'aimerais rajouter 3 colonnes dans la table lognames2: je crée donc mes 2 colonnes, je les configure et je paramètre dans la macro les champs correspondants (telephoneNumber et Mobile de l'AD). Résultat: plus aucune donnée ne s'ajoute mais aucun message d'erreur.

Peux-tu m'expliquer comment faire???

p.s.: seul petit bémol à mon sens: arrêter d'utiliser une nomenclature française (nom = last et prenom = first... ;o)) lol

Commentaire de baloc le 18/09/2008 18:55:24

dans un premier temps, il y a l'option explicit, donc faut définir les variables.
ensuite si tu as des messages d'erreur envoye moi un message ça sera plus simple^^

Commentaire de neo2k2 le 18/09/2008 19:24:13

Ben typiquement, en ajoutant dans ton code :

'dans la déclaration des variables
Dim ucap as String, phone as string

'dans les propriétés recherchées des utilisateurs
phone = (objuser.telephoneNumber)
ucap = mid(nom,1,1)

'dans la requête sql, je remplace par exemple prenom par phone
sql = "Insert Into lognames2 Values('" & login & "','" & nom & "','" & phone & "','" & org & "'," & validite & ",'" & expi & "')"

Ces simples modifications ne génèrent PAS d'erreur mais la table créée est... vide.

Peux-tu tester chez toi et le cas échéant modifier ton fichier access avec 3 colonnes supplémentaires "phone, mobile, cap" dans la table en adaptant la requête en conséquence? SVP

Merci d'avance

Commentaire de AlainGarcia le 28/02/2011 11:11:10

Bonjour,

En Access 2003, j'obteins le message d'erreur suivant à l'exécution de la ligne 46 :

Erreur automation
Le domaine spécifié n'existe pas ou n'a pas pu être contacté

Cela proviendrait-il d'un problème de droit accès au LDAP ?

Merci pour vos réponses.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Groupe d'utilisateurs access et VB, de l'aide svp [ par CDTThomas ] Salut à tous !Voilà mon problème, j'ai besoin d'aller chercher le nom des membres d'un groupe d'utilisateurs access depuis VB. Seulement j'ai aucune i Groupe de contrôle en access [ par Shirya ] est il possible de créer des groupe de contrôle??comme par exemple, en vb, pour ne pas retaper le même code à chaque fois, on se faisait des groupe de outlook lié à access + groupe de diffusion [ par benjy54 ] bonjour je suis en stage et voici ce qu'on me demande,voici mon probleme : je dispose d'une base de donn&#233;es ACCESS , dans cette base contient des index et groupe de controle sur access [ par supergizmo ] bonjours a tousje n'arrive pas à créer des groupes de controle(même en faisant des copier/coller), ni à créer des index (ils ne sont pas présents dans Groupe de contrôle sous VBA (Access) POSSIBLE??? [ par Cink ] Bonjours,Comme mon titre le dit si bien, j'aimerais savoir il y a une façon de créer l'équivalent des groupes de contrôles VB mais en VBA, sous Access Sécurité Access [ par gloups ] Bonjour à tous,A partir d'une appli Access (2000) connectée au groupe de travail par défaut system.mdw, j'aurai besoin, via VBA, d'ouvrir une nouvelle groupe de controles avec access et vba [ par stephG01 ] sur une form j'ai 14 zone de textes que j'ai groupé , pensant pouvoir utiliser une boucle pour les affichages ou les remise a zero des controles. mais [VBA Access] groupe d'option ou de cases à cocher [ par observatoire ] Bonjour,Je souhaite définir si mon groupe d'option est activé (au moins une option cochée) ou non (aucune option cochée, avec les cases en grisé).Merc VBS Ajouter un "Contact" AD dans un groupe [ par lordvenom ] Bonsoir à tous,Après une longue recherche sur le forum je n'ai rien trouvé à ce sujet alors je me décide. Ribbon Access 2007 et gestion de droits AD [ par Djodu69 ] Bonjour,Je suis en train de bâtir une application sur Access 2007, et je me sers des propriétés du Ribbon pour faire un menu personnalisé.En parallèle


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales