Mon programme boucle je ne vois pas l'erreur ...

[Résolu]
Signaler
Messages postés
21
Date d'inscription
jeudi 12 mai 2011
Statut
Membre
Dernière intervention
9 juin 2011
-
Messages postés
21
Date d'inscription
jeudi 12 mai 2011
Statut
Membre
Dernière intervention
9 juin 2011
-
Bonjour,

Mon programme qui ajoute des utilisateurs dans active directory a partir d'un fichier csv boucle je ne sais pas pourquoi ...
' recuperation des fichier csv 
Dim oFSO, oTS, sOU, sGrp, WshShell, societe,connect,grpU,prflU,UO, CSV, RF, WF,i,j,k
Set oFSO = CreateObject("Scripting.FileSystemObject") 
Set oUsers = oFSO.OpenTextFile("C:\Documents and Settings\Administrateur\Mes documents\Users.csv")
Set WshShell = WScript.CreateObject("WScript.Shell")
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
Set WF = oFSO.CreateTextFile("C:\Documents and Settings\Administrateur\Mes documents\Temp.csv")	


'Boucle de lecture des utilisateurs dans le fichiers
j=0
Do Until oUsers.AtEndOfStream 
On Error Resume Next
sLine = oUsers.ReadLine
j=j+1
Loop
msgbox j
oUsers.close
For k=0 to j
Set oUsers = oFSO.OpenTextFile("C:\Documents and Settings\Administrateur\Mes documents\Users.csv")
sLine = oUsers.ReadLine
on Error Resume Next
sData = Split(sLine,",")

sPrenom=sData(0)
sNom=sData(1)
sFullName= sData(0) & " " & sData(1)
sTitre=sData(2)
sService=sData(3)
sSociete=sData(4)
sLogin=left(sPrenom,2)& left(sNom, 6)
sLogin=LCase(sLogin)

Set oSites =oFSO.OpenTextFile("C:\Documents and Settings\Administrateur\Mes documents\Sites.csv")

'Boucle des sites et leurs propriétés
Do Until oSites.AtEndOfStream 
CSV = oSites.ReadLine
on Error Resume Next
ligne = Split(CSV,",")


societe=Ligne(0)
connect=Ligne(1)
grpU=Ligne(2)
prflU=Ligne(3)
UO=Ligne(4)
Location=Ligne(5)

'Structure alternative pour les bonnes OU
if Location = sSociete Then

' Référence du domaine et des OU de création des comptes
Set objOU = GetObject("LDAP://OU=Utilisateurs, OU=" & UO & ", DC=test, DC=loc") 
sOU = ",OU=Utilisateurs, OU=" & UO & ", DC=test, DC=loc"

if UO="TC GIE Pasquier" or UO="CV GIE Pasquier" Then
UO="Brioche Pasquier Groupe"
sGrp = "cn=" & grpU &" ,OU=Services, OU=Brioche Pasquier Groupe, DC=test, DC=loc"
Else
sGrp = "cn=" & grpU & ",OU=Services, OU= " & UO & ", DC=test, DC=loc"
End if

Set objGroup = GetObject("LDAP://" & sGrp) 

' creation du compte utilisateur avec le paramètre
Set objUser = objOU.Create("user", "cn=" & sFullName )
objUser.Put "sAMAccountName",sLogin
objUser.Put "userPrincipalName",sLogin & "@test.loc" 
objUser.Put "givenName", sPrenom
objUser.Put "sn", sNom
objUser.Put "displayName", sPrenom & sNom
objUser.Put "mail", LCase(sPrenom) & "." & LCase(sNom) & "@pasquier.fr"
objUser.Put "title", sTitre 
objUser.Put "department", sService
objUser.Put "company", sSociete 
objUser.TerminalServicesProfilePath = "\" & prflU & "\profils$" & sLogin
objUser.TerminalServicesHomeDrive = "H:"
objUser.TerminalServicesHomeDirectory = "\" & prflU & "\users" & sLogin
objUser.Put "scriptPath", connect
objUser.SetPassword "MOTDEPAS"
objUser.SetInfo

'Création du dossier de l'utilisateur
strHome= "\" & prflU & "\users" & sLogin
oFSO.CreateFolder(strHome)

'Attribue les droits controle total pour l'utilisateur et les admins du domaine et enleve le groupe Tout le monde
WshShell.run "cacls " & strHome & " /T /E /G " & sLogin & ":F",2,true
WshShell.run "cacls " & strHome & " /T /E /C /G ""Administrateurs""" & ":F",2,true
WshShell.run "cacls " & strHome & " /T /E /C /R ""Tout le monde""",2,true


'Activation du control a distance decochage demander l'autorisation utilisateur
objUser.EnableRemoteControl = 2
objUser.SetInfo

' Activation du compte
Set objUser = objOU.GetObject("LDAP://cn=" & sPrenom & sNom )
objUser.AccountDisabled = False

' Le mot de passe n'expire jamais
intUAC = objUser.Get("userAccountControl")
objUser.Put "userAccountControl",  intUAC XOR ADS_UF_DONT_EXPIRE_PASSWD
objUser.SetInfo

' Ajout d'utilisateur dans un groupe
objGroup.add("LDAP://cn=" & sFullName & sOU)
objGroup.SetInfo 

if sSociete <> "TC GIE Pasquier" and sSociete <> "CV GIE Pasquier" Then
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.run "ListeGroup.html",3,True
End if

oUsers.close


Set RF = oFSO.OpenTextFile("C:\Documents and Settings\Administrateur\Mes documents\Users.csv",1,0)


i=0
Do Until RF.AtEndOfStream
sLine = RF.ReadLine

if i>0 Then
WF.WriteLine (sLine)
End if
i=i+1
Loop
msgbox i
if i=0 Then
WF.WriteLine ("")
End if
Dim T
Set T = oFSO.OpenTextFile("C:\Documents and Settings\Administrateur\Mes documents\Temp.csv",1,0)
Set WF = oFSO.OpenTextFile("C:\Documents and Settings\Administrateur\Mes documents\Users.csv",2,0)


Do Until T.AtEndOfStream
sLine = T.ReadLine
WF.WriteLine (sLine)
Loop

oSite.close
RF.Close
WF.Close
T.Close
end if
Loop
Next

5 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Dans ta première boucle, tu lis chaque ligne du fichier, mais tu la stocke dans la même variable. Normal ?
Comment est dimensionne sListe ?

Supprime absolument tous les "On Error Resume Next". C'est un très mauvaise habitude qui masque les problèmes du programme.
C'est un instruction importante qui est souvent prise pour une facilité.
A n'utiliser uniquement lorsque la ligne qui va suivre à des risques de poser problème (*), mais de toute façon, dès le problème passé, il faut reprendre une gestion efficace des erreurs, la plus simple est "On Error Goto 0" qui provoquera une MsgBox présentant l'erreur rencontrée.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
21
Date d'inscription
jeudi 12 mai 2011
Statut
Membre
Dernière intervention
9 juin 2011

Pour info,
dans mon fichier Users.csv
je retrouve :

Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Vert,Blanc,Noir,Bleu,TC GIE Pasquier

qui n'arrete pas d'augmenter si je ne kill pas le processus..
Mon fichier Users du départ:

Benjamin,Turpault,Assistant,Informatique,Patisserie Pasquier Etoile
Rouge,Noir,Directeur,bouu,Brioche Pasquier Aubigny
Vert,Blanc,Noir,Bleu,TC GIE Pasquier
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Salut

Il doit manquer une incrémentation de pointeur ou un .Next sur un objet ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
52
Salut

lance ton prog avec le debugger et mets des points d'arret

un rapide coup d'oeil
peut etre
Do Until oSites.AtEndOfStream 

où après dans le code oSites est "incrimenté"
pour atteindre le AtEndOfStream ?

pareil avec RF
Do Until RF.AtEndOfStream
Messages postés
21
Date d'inscription
jeudi 12 mai 2011
Statut
Membre
Dernière intervention
9 juin 2011

oSites et RF s'incrémentent tout seul ...

sLine est une variable chaîne de caractère qui changent a chaque tour de boucle.

J'ai fini par trouver mon problème était aux niveau des .opentextefile qui était mal placé...

Merci :)