1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 75
    Points : 30
    Points
    30

    Par défaut [vbs][Active Directory] Détection de doublons. Problème d'affichage MsgBox si plus de deux.

    Bonjour,
    Le script ci-dessous recherche les doublons de numéros de radiomessagerie (Pager) déclarés pour tous les utilisateurs dans l'AD.
    En cas de doublon les informations des utilisateurs concernés sont affichées dans un même MsgBox, jusque-là tous va bien.
    Mon souci est lorsqu'un numéro de radiomessagerie et attribué a plus de deux utilisateurs, les infos ne sont pas afficher dans le même MsgBox.
    Si par exemple trois utilisateurs on le même numéro un premier MsgBox m'affiche les deux premiers utilisateurs et un second MsgBox m'affiche les trois.
    Pouvez-vous m'aider?
    Bien Cordialement

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    ' DuplicatePagers.vbs
    ' 
    ' Recherche des numméros de radiomessagerie "pager" non unique dans Active Directory.
    '
    ' ----------------------------------------------------------------------
    '
    'Ce VBScript utilise ADO pour rechercher dans Active Directory les objets utilisateur. 
    'Le jeu d’enregistrements est trié par numéros de radiomessagerie et les valeurs en double sont de sortie.
    'Ce VBScript est conçu pour s’exécuter avec  l'invite de commandes "hôte Cscript". 
    'La sortie peut être redirigée vers un fichier texte. Par exemple :
    'cscript //nologo DuplicatePagers.vbs > Duplicates.txt
     
     
    Option Explicit
     
    Dim objRootDSE, strDNSDomain, adoCommand, adoConnection, strQuery
    Dim adoRecordset, strPager, strPreviousPager, strDN, strPreviousPath, strResult
    Dim blnFlag, strBase, strFilter, strAttributes
     
    ' Déterminer le nom de domaine DNS de l’objet RootDSE.
    Set objRootDSE = GetObject("LDAP://RootDSE")
    strDNSDomain = objRootDSE.Get("defaultNamingContext")
     
    ' Utilisation d’ADO pour rechercher dans Active Directory.
    Set adoCommand = CreateObject("ADODB.Command")
    Set adoConnection = CreateObject("ADODB.Connection")
    adoConnection.Provider = "ADsDSOObject"
    adoConnection.Open "Active Directory Provider"
    adoCommand.ActiveConnection = adoConnection
     
    ' Recherchez tous les objets utilisateur. 
    ' retourne le nom d'utilsateur et le N° de radiomessagerie.
    ' Rapport de tri mis par N°.
    strBase = "<LDAP://" & strDNSDomain & ">"
    strFilter = "(&(objectCategory=person)(objectClass=user))"
    strAttributes = "distinguishedName,pager"
    strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
    adoCommand.CommandText = strQuery
    adoCommand.Properties("Page Size") = 100
    adoCommand.Properties("Timeout") = 30
    adoCommand.Properties("Cache Results") = False
    adoCommand.Properties("Sort On") = "pager"
    Set adoRecordset = adoCommand.Execute
    If (adoRecordset.EOF = True) Then
        Wscript.Echo "Aucun numéro de radiomessagerie en double trouvé"
        Wscript.Quit
    End If
     
    ' Effectuer une boucle sur tous les utilisateurs.  
    ' Afficher les utilisateurs avec un N° qui n’est pas unique.
     
    strPreviousPager = ""
    strPreviousPath = ""
    strResult = ""
     
    blnFlag = False
    Do Until adoRecordset.EOF
        strDN = adoRecordset.Fields("distinguishedName").Value
        strPager = adoRecordset.Fields("pager").Value
        If (strPager = strPreviousPager) Then
            If (blnFlag = False) Then
    			strResult = "Le N° " & strPreviousPager & " est attribué aux l'utilisateurs: " & vbCrLf & strPreviousPath & vbCrLf
            End If
            	strResult = strResult + strDN & vbCrLf
            	MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."          
            blnFlag = True
        Else    
            blnFlag = False
        End If
     
        strPreviousPager = strPager
        strPreviousPath = strDN
        strResult = strResult
        adoRecordset.MoveNext
     
    Loop
    adoRecordset.Close
     
    ' Clean up.
    adoConnection.Close

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    1 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 999
    Points : 4 543
    Points
    4 543

    Par défaut

    Bonjour,

    Je crois qu'il faut sortir la ligne 65 de la boucle Do Until .....Loop
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 75
    Points : 30
    Points
    30

    Par défaut

    Citation Envoyé par l_autodidacte Voir le message
    Bonjour,

    Je crois qu'il faut sortir la ligne 65 de la boucle Do Until .....Loop
    Bonjour,
    J'ai tenté de sortir mon MsgBox juste après ma boucle et n'ai plus de boucle, juste l'affichage du premier doublon trouvé.
    Je ne vois pas ou sortir !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 75
    Points : 30
    Points
    30

    Par défaut

    Il me semble que l'on ne peut pas sortir d'une boucle et relancer une nouvelle itération simplement en VBS (équivalent à "continue" en C).
    Peut-être en utilisant goto et d'un label?
    Je ne sais pas trop comment gérer mon problème!

  5. #5
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    avril 2007
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 345
    Points : 580
    Points
    580

    Par défaut

    Bonjour,

    Peut-être qu'en modifiant légèrement la boucle "Do" de cette manière ça peut répondre à tes attentes :

    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
    Do Until adoRecordset.EOF
        strDN = adoRecordset.Fields("distinguishedName").Value
        strPager = adoRecordset.Fields("pager").Value
        If (strPager = strPreviousPager) Then
            If (blnFlag = False) Then
    			strResult = "Le N° " & strPreviousPager & " est attribué aux l'utilisateurs: " & vbCrLf & strPreviousPath & vbCrLf & strDN & vbCrLf
    			 blnFlag = True
            Else
            	strResult = strResult + strDN & vbCrLf
    		End If
        Else
    		If (blnFlag = True) Then
    			MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."
    			blnFlag = False
            End If
        End If
     
        strPreviousPager = strPager
        strPreviousPath = strDN
        strResult = strResult
        adoRecordset.MoveNext
     
    Loop

  6. #6
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    1 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 999
    Points : 4 543
    Points
    4 543

    Par défaut

    Peut-être avec les modifications que j'ai effectuées, cela marchera.....
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    ' DuplicatePagers.vbs
    ' 
    ' Recherche des numméros de radiomessagerie "pager" non unique dans Active Directory.
    '
    ' ----------------------------------------------------------------------
    '
    'Ce VBScript utilise ADO pour rechercher dans Active Directory les objets utilisateur. 
    'Le jeu d’enregistrements est trié par numéros de radiomessagerie et les valeurs en double sont de sortie.
    'Ce VBScript est conçu pour s’exécuter avec  l'invite de commandes "hôte Cscript". 
    'La sortie peut être redirigée vers un fichier texte. Par exemple :
    'cscript //nologo DuplicatePagers.vbs > Duplicates.txt
     
     
    Option Explicit
     
    Dim objRootDSE, strDNSDomain, adoCommand, adoConnection, strQuery
    Dim adoRecordset, strPager, strPreviousPager, strDN, strPreviousPath, strResult
    Dim blnFlag, strBase, strFilter, strAttributes
     
    ' Déterminer le nom de domaine DNS de l’objet RootDSE.
    Set objRootDSE = GetObject("LDAP://RootDSE")
    strDNSDomain = objRootDSE.Get("defaultNamingContext")
     
    ' Utilisation d’ADO pour rechercher dans Active Directory.
    Set adoCommand = CreateObject("ADODB.Command")
    Set adoConnection = CreateObject("ADODB.Connection")
    adoConnection.Provider = "ADsDSOObject"
    adoConnection.Open "Active Directory Provider"
    adoCommand.ActiveConnection = adoConnection
     
    ' Recherchez tous les objets utilisateur. 
    ' retourne le nom d'utilsateur et le N° de radiomessagerie.
    ' Rapport de tri mis par N°.
    strBase = "<LDAP://" & strDNSDomain & ">"
    strFilter = "(&(objectCategory=person)(objectClass=user))"
    strAttributes = "distinguishedName,pager"
    strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
    adoCommand.CommandText = strQuery
    adoCommand.Properties("Page Size") = 100
    adoCommand.Properties("Timeout") = 30
    adoCommand.Properties("Cache Results") = False
    adoCommand.Properties("Sort On") = "pager"
    Set adoRecordset = adoCommand.Execute
    REM If (adoRecordset.EOF = True) Then
        REM Wscript.Echo "Aucun numéro de radiomessagerie en double trouvé"
        REM Wscript.Quit
    REM End If
    ' ##### Moi je mettrais : 
       adoRecordset.MoveFirst
           '##### car le branchement sur la base de données peut se faire n'importe où et notamment si c'est à la fin
           '##### on arrête Wscript(donc tout le traitement qui suit ne sera jamais exécuté)
     
    ' Effectuer une boucle sur tous les utilisateurs.  
    ' Afficher les utilisateurs avec un N° qui n’est pas unique.
     
    strPreviousPager = ""
    strPreviousPath = ""
    strResult = ""
     
    blnFlag = False
    Do Until adoRecordset.EOF
        strDN = adoRecordset.Fields("distinguishedName").Value
        strPager = adoRecordset.Fields("pager").Value
        If (strPager = strPreviousPager) Then
            If (blnFlag = False) Then
                strResult = "Le N° " & strPreviousPager & " est attribué aux l'utilisateurs: " & vbCrLf & strPreviousPath & vbCrLf
            End If
            strResult = strResult + strDN & vbCrLf
            REM MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."          
            blnFlag = True
        Else    
            blnFlag = False
        End If
     
        strPreviousPager = strPager
        strPreviousPath = strDN
        'strResult = strResult ' car inutile
        adoRecordset.MoveNext
     
    Loop
     ' ICI l'endroit où on peut voir le résultat tout entier de la recherche :
       MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."  
     
       ' Clean up.
     
        adoRecordset.Close
        adoConnection.Close
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  7. #7
    Membre chevronné

    Homme Profil pro
    Responsable déploiement (SCCM, AirWatch, AMP)
    Inscrit en
    juillet 2014
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, AirWatch, AMP)
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 1 056
    Points : 1 942
    Points
    1 942

    Par défaut

    Ligne 66
    Code vbs : Sélectionner tout - Visualiser dans une fenêtre à part
    strResult = strResult + "Le N° " & strPreviousPager & " est attribué aux l'utilisateurs: " & vbCrLf & strPreviousPath & vbCrLf

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 75
    Points : 30
    Points
    30

    Par défaut

    Bonjour et merci à vous tous,

    On y est presque!
    La solution apportée par "pitchalov" donne l'affichage attendu lorsque de la détection de numéro multiple.

    Citation Envoyé par pitchalov Voir le message
    Bonjour,

    Peut-être qu'en modifiant légèrement la boucle "Do" de cette manière ça peut répondre à tes attentes :

    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
    Do Until adoRecordset.EOF
        strDN = adoRecordset.Fields("distinguishedName").Value
        strPager = adoRecordset.Fields("pager").Value
        If (strPager = strPreviousPager) Then
            If (blnFlag = False) Then
    			strResult = "Le N° " & strPreviousPager & " est attribué aux l'utilisateurs: " & vbCrLf & strPreviousPath & vbCrLf & strDN & vbCrLf
    			 blnFlag = True
            Else
            	strResult = strResult + strDN & vbCrLf
    		End If
        Else
    		If (blnFlag = True) Then
    			MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."
    			blnFlag = False
            End If
        End If
     
        strPreviousPager = strPager
        strPreviousPath = strDN
        strResult = strResult
        adoRecordset.MoveNext
     
    Loop
    Comme l'a fait remarquer "l_autididacte" en commentaire "REM" dans ca dernière réponse:
    Je n'ai pas le message lorsqu'il n'y a pas de doublons.

    Citation Envoyé par l_autodidacte Voir le message
    Peut-être avec les modifications que j'ai effectuées, cela marchera.....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    REM If (adoRecordset.EOF = True) Then
        REM Wscript.Echo "Aucun numéro de radiomessagerie en double trouvé"
        REM Wscript.Quit
    REM End If
    ' ##### Moi je mettrais : 
       adoRecordset.MoveFirst
           '##### car le branchement sur la base de données peut se faire n'importe où et notamment si c'est à la fin
           '##### on arrête Wscript(donc tout le traitement qui suit ne sera jamais exécuté)
    Une idée peut-être?

  9. #9
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    1 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 999
    Points : 4 543
    Points
    4 543

    Par défaut

    Peut-être de cette façon ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       ..................
        strPreviousPager = strPager
        strPreviousPath = strDN
        adoRecordset.MoveNext
    Loop
     
     If (adoRecordset.EOF = True) And Len(strResult) = 0 Then
         Wscript.Echo "Aucun numéro de radiomessagerie en double trouvé"
         Wscript.Quit
     ElseIf Len(strResult) > 0 Then
         MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."
     End If
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 75
    Points : 30
    Points
    30

    Par défaut

    Le fait de traiter l'information en dehors de la boucle stop la recherche!
    Dans ce cas je n'ai l'information que sur le premier cas de doublons trouvé.
    La modification apportée par "pitchalov" fonctionne très bien.
    Ceci fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Loop
     
    If (adoRecordset.EOF = True) And Len(strResult) = 0 Then
    	Wscript.Echo "Aucun numéro de radiomessagerie en double trouvé"
    	Wscript.Quit
    End If
    testé avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     If Len(strResult) = 0 Then
         Wscript.Echo "Aucun numéro de radiomessagerie en double trouvé"
         Wscript.Quit
     End If
    Ca fonctionne.

    Je ne comprends pas pourquoi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (adoRecordset.EOF = True) Then
    Ne fonctionne pas seul, je pense ne pas avoir bien compris son rôle.

  11. #11
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    1 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 999
    Points : 4 543
    Points
    4 543

    Par défaut

    Je ne comprends pas pourquoi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (adoRecordset.EOF = True) Then
    Ne fonctionne pas seul, je pense ne pas avoir bien compris son rôle.
    Tout simplement parce que cette condition ne peut être vérifiée qu'à l'intérieure de la boucle Do ....Loop
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  12. #12
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    avril 2007
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 345
    Points : 580
    Points
    580

    Par défaut

    Bonjour,
    Content que ma solution convienne.
    Pour afficher le message à la fin, je mettrais un compteur de doublons que j’incrémenterais à chaque fois que le msgbox de détection de doublon est affichée.
    A la fin du script après tu peux l'afficher sans condition.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 75
    Points : 30
    Points
    30

    Par défaut

    Bonjour,
    J'ai beau placer mon recordset a vraie a l'intérieur de ma boucle je ne parviens pas à le déclencher!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (adoRecordset.EOF = True) Then
    Un petit coup de main? Une suggestion?

  14. #14
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    1 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 999
    Points : 4 543
    Points
    4 543

    Par défaut

    Essaie de mettre MsgBox adoRecordset.EOF juste après la boucle pour en voir la valeur ( vrai ou faux) et exécute le code à plusieurs reprises.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 75
    Points : 30
    Points
    30

    Par défaut

    Bonjour,
    Le seul endroit où je trouve mon "adoRecordset" a vraie et effectivement après ma boucle Do Until, mais qu'il y ai détection de doublons ou non, il reste toujours a vraie.

  16. #16
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    avril 2007
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 345
    Points : 580
    Points
    580

    Par défaut

    Citation Envoyé par NeriXs Voir le message
    Bonjour,
    J'ai beau placer mon recordset a vraie a l'intérieur de ma boucle je ne parviens pas à le déclencher!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (adoRecordset.EOF = True) Then
    Un petit coup de main? Une suggestion?
    Bonjour,
    Le recordset est le conteneur du résultat de ta requête AD.
    la propriété EOF t'indique si tu es ou non à la fin de ton résultat, c'est ce qui permet à ta boucle "do while" de se terminer.
    Donc :
    - Il ne faut pas modifier sa valeur, elle passera automatiquement à True lorsque le dernier "MoveNext" atteindra le dernier élément de ton conteneur.
    - Après ta boucle la propriété EOF de ton recordset sera toujours à True, étant donné que c'est lorsque qu'il passe à True que l'on sort de la boucle.

    2 possibilités pour afficher un message s'il n'y a pas eu de doublon :
    - 1 flag booléen initialisé à False qui passe à true dès que tu détectes un doublon. A la fin du script s'il est toujours à false tu peux afficher qu'il n'y a pas de doublon.
    - A compteur de doublons (que j'avais évoqué), solution que je préfère. Voilà comment je le mettrais en place :
    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
    intCompteurDoublons = 0
    Do Until adoRecordset.EOF
        strDN = adoRecordset.Fields("distinguishedName").Value
        strPager = adoRecordset.Fields("pager").Value
        If (strPager = strPreviousPager) Then
            If (blnFlag = False) Then
    			strResult = "Le N° " & strPreviousPager & " est attribué aux l'utilisateurs: " & vbCrLf & strPreviousPath & vbCrLf & strDN & vbCrLf
    			 blnFlag = True
            Else
            	strResult = strResult + strDN & vbCrLf
    		End If
    		' Gestion du dernier élément, si c'est également un doublon
    		If adoRecordset.EOF Then 
    			MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."
    			intCompteurDoublons = intCompteurDoublons + 1
    		End If
        Else
    		If (blnFlag = True) Then
    			MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."
    			intCompteurDoublons = intCompteurDoublons + 1
    			blnFlag = False
            End If
        End If
     
        strPreviousPager = strPager
        strPreviousPath = strDN
        strResult = strResult
        adoRecordset.MoveNext
    Loop
    MsgBox "Fin de l'analyse" & vbCrLf & "Nombre de doublons détectés <" & intCompteurDoublons & ">"
    J'ai également rajouté la gestion du dernier élément de la requête, si il fait partie des doublons détectés.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 75
    Points : 30
    Points
    30

    Par défaut

    Bonjour,
    C'est plus simple vu comme ça
    Merci pour la modification et le complément d'info.
    Petit question:
    A quoi sert le MsgBox de la ligne 14?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."

  18. #18
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    avril 2007
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 345
    Points : 580
    Points
    580

    Par défaut

    Bonjour,

    Comme indiqué dans le commentaire juste au dessus, cette zone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    '...
    		' Gestion du dernier élément, si c'est également un doublon
    		If adoRecordset.EOF Then 
    			MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."
    			intCompteurDoublons = intCompteurDoublons + 1
    		End If
    '...
    n'est là qu'au cas où le dernier élément de la requête ADO serait détecté comme doublon.

    Je l'ai rajouté car dans la modification que je t'avais proposé, lorsque des doublons étaient détectés, il ne les affichait les doublons détectés que lorsqu'il repassait sur un élément non doublon.

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 75
    Points : 30
    Points
    30

    Par défaut

    Bonjour,
    OK, commenté en plus, faut que j’arrête l’apéro moi ^^.
    J’ai un peu de mal avec la fonction du "blnFlag"*!
    Une petite explication serrait la bien venue.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/06/2017, 08h38
  2. Problème d'affichage sous SQL*Plus
    Par boutheinanabeul dans le forum Sql*Plus
    Réponses: 10
    Dernier message: 14/03/2017, 22h47
  3. Détection de cercle, problème d'affichage
    Par Leanaa dans le forum Bibliothèques tierces
    Réponses: 2
    Dernier message: 26/06/2012, 09h42
  4. Réponses: 2
    Dernier message: 13/02/2007, 12h13
  5. [VBS]Active directory et VBScript
    Par dibeloni dans le forum VBScript
    Réponses: 2
    Dernier message: 16/01/2006, 09h25

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