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

Access Discussion :

Autre manière d'éradiquer les doublons dans Access 2e Partie [AC-2013]


Sujet :

Access

  1. #1
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut Autre manière d'éradiquer les doublons dans Access 2e Partie
    Salut membres du forum !
    J'espère que vous allez bien.
    Je souhaite bonne et parfaite sante de fer à tout le monde.
    Que le Seigneur nous préserve du COVID 19.

    Bien ! permettez moi de rebondir sur notre précédente discussion Post#27 du 01/05/2019:
    https://www.developpez.net/forums/d1...ublons-access/
    En effet, après plusieurs mois d'essai, je constate que le code suivant n'insert pas les noms des élèves redoublant la même classe
    de l'année dernière 2019-2020. Exemple; les élèves suivants:
    Diarra Ismaïl,
    Diarrassouba Zéitoune et
    Diomandé Assata

    sont des redoublants de la classe du CP2. Donc, en cliquant sur la commande "Enregistrer les Elèves Composants Sélectionnés" afin d'enregistrer la liste des élèves composant de la nouvelle année 2020-2021, seuls les nouveaux élevés arrivés en CP2 sont enregistrés dans la table "Tbl_EVALUATION_NIVEAU_SCOLAIRE".
    Mon objectif:
    Tous devraient y être enregistrés (nouveaux élèves et anciens élèves doublant).
    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
     
    Private Sub BtnEnregisterElevesComposants_Click()
    Dim stMsg As String
    Dim Itm As Variant
    Dim oDb As Database
    Dim oRS As Recordset
    Dim critere As String
     
    With Me.ListeELEVES_ANNEE_CLASSE
        '' contrôle saisie élèves
        If .ItemsSelected.Count = 0 Then Exit Sub
        'contrôle saisie Classe
        If IsNull(Me.lstClasse_Evaluation) Then
            MsgBox "Sélectionnez une classe.", vbCritical
            Me.lstClasse_Evaluation.SetFocus
            'Me.lstClasse_Evaluation.Dropdown  **** Pour dérouler le combobox à l'aide de la méthode DROPDOWN
            SendKeys "{F4}"      '*** Pour dérouler le combobox à l'aide de l'envoi de touche clavier (F4)
            Exit Sub
        End If
     
     
        stMsg = "Voulez-vous insérer les élèves suivants:" & vbCrLf
        For Each Itm In .ItemsSelected
            stMsg = stMsg & .Column(4, Itm) & vbCrLf
        Next Itm
     
     'Confirmer l'insertion des élèves
        stMsg = stMsg & "?"
        If MsgBox(stMsg, vbQuestion + vbYesNo) = vbNo Then Exit Sub
     
        Set oDb = CurrentDb
        Set oRS = oDb.OpenRecordset("Tbl_EVALUATION_NIVEAU_SCOLAIRE", dbOpenDynaset)
     
    ' ajout des éléments sélectionnés
        For Each Itm In .ItemsSelected
            critere = "[Nom_Prenoms_EleveComposant]=""" & .Column(4, Itm) _
            & """ and [NumInsCreleve]=" & .Column(2, Itm) _
            & " and [MleEleve]=" & .Column(3, Itm) _
            & " and [COMPOSITION]=" & Me.ListeComposition_Evaluation _
            & " and [NiveauCompositionFrancais]='" & Me.ListeNiveauEVALUATION & "'"
     
            Call oRS.FindFirst(critere) 'Cherche si il y a déjà un enregistrement avec ces valeurs
     
            If oRS.NoMatch Then
                    'L'enregistrement n'existe pas déjà, on va l'ajouter.
                    oRS.AddNew
     
                   oRS.Fields("NumEnregistreComposant") = f_NumAutoEnregistrementElevesComposants() + 1 '.Column(0, Itm)
     
                    oRS.Fields("Nom_Prenoms_EleveComposant") = .Column(4, Itm)
     
                    oRS.Fields("COMPOSITION") = Me.ListeComposition_Evaluation '.Column(2, Itm)
                    oRS.Fields("NiveauCompositionFrancais") = Me.ListeNiveauEVALUATION '.Column(2, Itm)
     
                    oRS.Fields("IdEcole") = Me.ID_ETABL_FREQ '.Column(9, Itm)
                    oRS.Fields("AnneeScol") = Me.ANNEE_SCOL '.Column(8, Itm)
     
                    oRS.Fields("NumInsCreleve") = .Column(2, Itm)
                    oRS.Fields("MleEleve") = .Column(3, Itm)
     
                    oRS.Update
            End If
     
        Next Itm
    ' enlever la sélection
        .RowSource = .RowSource
     
    ' affichage des éléments saisis
        Me.Refresh
        Me.ListeELEVES_ANNEE_CLASSE.Requery
        Forms("Frm_EvaluationScolaireElevesECIND").Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Requery
        ListeELEVES_ANNEE_CLASSE.RowSource = ListeELEVES_ANNEE_CLASSE.RowSource
        End With
     
    End Sub
    Cordialement.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  2. #2
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    Si l'élève existe déjà, il ne le rajoute pas à cause de "If oRS.NoMatch Then".
    Si vous voulez ajouter un élève existant, il faudra insérer une "message box (oui/non)" demandant de rajouter l'élève repéré; si oui, le rajouter, sinon passer à l'élève suivant.

  3. #3
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Citation Envoyé par Zekraoui_Jakani Voir le message
    Si l'élève existe déjà, il ne le rajoute pas à cause de "If oRS.NoMatch Then".
    Si vous voulez ajouter un élève existant, il faudra insérer une "message box (oui/non)" demandant de rajouter l'élève repéré; si oui, le rajouter, sinon passer à l'élève suivant.
    Salut membres du forum !
    Bonjour Zekraoui_Jakani !
    Heureux de vous retrouver.
    Merci de m'ouvrir la voie. Je vais essayer votre proposition et vous poster la suite.
    Voici une procédure:
    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
     
    Sub GestionDesEnregistrements()
    On Error Resume Next
    Dim stDocName As String
    Dim stLinkCriteria As String
    Dim rep As Integer
     
    'stDocName = "SuppressionComposantFR_BoiteDialogue "
     
    rep = MsgBox("ENREGISTRER TOUS LES COMPOSANTS SELECTIONNES ?" _
    & vbCrLf & "AJOUTER DES DONNEES ---> OUI" & _
    vbCrLf & "" _
    & vbCrLf & "" & vbCrLf & "QUITTER SANS RIEN FAIRE ---> NON", _
    vbYesNo + vbQuestion, "Choisir un traitement")
    Select Case rep
    'Case vbYes
        'DoCmd.OpenForm stDocName, , , , acFormAdd ', , "Nouveau"
    'Case vbYes
        'If Me.NewRecord = True Then
           'If MsgBox("AUCUNE NOUVELLE DONNEE N'EST ACTIVE POUR CET ELEVE !!" _
           '& vbCrLf & "VOULEZ-VOUS AJOUTER DES DONNEES ?", vbOKCancel + vbQuestion, _
           "AJOUTER NOUVELLES DONNEES") = vbYes Then
               'DoCmd.OpenForm stDocName, , , , acFormAdd ', , "Nouveau"
           'End If
        'Else
            'stLinkCriteria = "[NumEnregistreComposant]=" & Me.NumEnregistreComposant
            'DoCmd.OpenForm stDocName, , , stLinkCriteria
        'End If
    Case vbCancel
    Case Else
    End Select
    End Sub
    Comment pourrais je l'adapter au code d'enregistrement ci dessous ?
    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
     
    Private Sub BtnEnregisterElevesComposants_Click()
    Dim stMsg As String
    Dim Itm As Variant
    Dim oDb As Database
    Dim oRS As Recordset
    Dim critere As String
     
    With Me.ListeELEVES_ANNEE_CLASSE
        '' contrôle saisie élèves
        If .ItemsSelected.Count = 0 Then Exit Sub
        'contrôle saisie Classe
        If IsNull(Me.lstClasse_Evaluation) Then
            MsgBox "Sélectionnez une classe.", vbCritical
            Me.lstClasse_Evaluation.SetFocus
            'Me.lstClasse_Evaluation.Dropdown  **** Pour dérouler le combobox à l'aide de la méthode DROPDOWN
            SendKeys "{F4}"      '*** Pour dérouler le combobox à l'aide de l'envoi de touche clavier (F4)
            Exit Sub
        End If
     
     
        stMsg = "Voulez-vous insérer les élèves suivants:" & vbCrLf
        For Each Itm In .ItemsSelected
            stMsg = stMsg & .Column(4, Itm) & vbCrLf
        Next Itm
     
     'Confirmer l'insertion des élèves
        stMsg = stMsg & "?"
        If MsgBox(stMsg, vbQuestion + vbYesNo) = vbNo Then Exit Sub
     
        Set oDb = CurrentDb
        Set oRS = oDb.OpenRecordset("Tbl_EVALUATION_NIVEAU_SCOLAIRE", dbOpenDynaset)
     
    ' ajout des éléments sélectionnés
        For Each Itm In .ItemsSelected
            critere = "[Nom_Prenoms_EleveComposant]=""" & .Column(4, Itm) _
            & """ and [NumInsCreleve]=" & .Column(2, Itm) _
            & " and [MleEleve]=" & .Column(3, Itm) _
            & " and [COMPOSITION]=" & Me.ListeComposition_Evaluation _
            & " and [NiveauCompositionFrancais]='" & Me.ListeNiveauEVALUATION & "'"
     
            Call oRS.FindFirst(critere) 'Cherche si il y a déjà un enregistrement avec ces valeurs
     
            If oRS.NoMatch Then
                    'L'enregistrement n'existe pas déjà, on va l'ajouter.
                    oRS.AddNew
     
                   oRS.Fields("NumEnregistreComposant") = f_NumAutoEnregistrementElevesComposants() + 1 '.Column(0, Itm)
     
                    oRS.Fields("Nom_Prenoms_EleveComposant") = .Column(4, Itm)
     
                    oRS.Fields("COMPOSITION") = Me.ListeComposition_Evaluation '.Column(2, Itm)
                    oRS.Fields("NiveauCompositionFrancais") = Me.ListeNiveauEVALUATION '.Column(2, Itm)
     
                    oRS.Fields("IdEcole") = Me.ID_ETABL_FREQ '.Column(9, Itm)
                    oRS.Fields("AnneeScol") = Me.ANNEE_SCOL '.Column(8, Itm)
     
                    oRS.Fields("NumInsCreleve") = .Column(2, Itm)
                    oRS.Fields("MleEleve") = .Column(3, Itm)
     
                    oRS.Update
            End If
     
        Next Itm
    ' enlever la sélection
        .RowSource = .RowSource
     
    ' affichage des éléments saisis
        Me.Refresh
        Me.ListeELEVES_ANNEE_CLASSE.Requery
        Forms("Frm_EvaluationScolaireElevesECIND").Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Requery
        ListeELEVES_ANNEE_CLASSE.RowSource = ListeELEVES_ANNEE_CLASSE.RowSource
        End With
     
    End Sub
    Cordialement.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  4. #4
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Bonsoir membres du forum,
    Je remarque qu'en mettant en commentaire le bout de code et le ,
    le code d'enregistrement fonctionne.
    Je souhaite supprimer les doublons avec du code vba. Besoin de coup de mains ici.

    NB: je reviens sur la remarque de tee_grandbois qui avait signalé que la partie criteres dans le code était inutile:
    https://www.developpez.net/forums/d1...ublons-access/

    Pièce jointe


    Cordialement.
    Fichiers attachés Fichiers attachés
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  5. #5
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Bonjour membres du forum.
    Aidez moi à réécrire mon
    code avec la méthode
    Code gestion de doublons:
    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
     ''FONCTION POUR CONTROLER LES DOUBLONS DE L'ENREGISTREMENT DES ELEVES
    ''COMPOSANTS PAR COMPOSITION, Niveau de Composition ET ANNEE SCOLAIRE, ECOLE
     
    Public Function fEstEleveDejaComposant(ETABL As Long, NumInsc As Long, Mleelv As Long, Ansco As String, Composi As Long, NivCompo As String) As Boolean
    On Error GoTo MOROBABOUMAR
    If IsNull(ETABL) Then Exit Function
    If IsNull(NumInsc) Then Exit Function
    If IsNull(Mleelv) Then Exit Function
    If IsNull(Ansco) Then Exit Function
    If IsNull(Composi) Then Exit Function
    If IsNull(NivCompo) Then Exit Function
    Dim db As Database
    Dim rst As Recordset
    Dim sql As String
        Set db = CurrentDb
        sql = "select * from Tbl_EVALUATION_NIVEAU_SCOLAIRE where  IdEcole = " & ETABL & "and NumInsCreleve =" & NumInsc & "and MleEleve =" & Mleelv & "and AnneeScol ='" & Ansco & "'and COMPOSITION =" & Composi & "and NiveauCompositionFrancais ='" & NivCompo & "'"
        Set rst = db.OpenRecordset(sql)
        If Not rst.EOF Then
            fEstEleveDejaComposant = True
            Else
            fEstEleveDejaComposant = False
        End If
    Exit Function
    MOROBABOUMAR:
        MsgBox "Erreur n° " & err.Number & vbCrLf & err.description, vbCritical + vbOKOnly, "Une erreur est survenue"
    End Function
    Cordialement.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    quel intérêt sachant que Me n'est même pas présent ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    bonjour,
    quel intérêt sachant que Me n'est même pas présent ?
    Bonsoir tee_grandbois.
    Très heureux de vous retrouver.
    Je suis désolé de m'être mal exprimé.
    Je voudrais dire comment pourrais je empêcher
    les doublons dans les données que j'enregistre
    dans la table "Tbl_EVALUATION_NIVEAU_SCOLAIRE" selon les paramètres indiqués dans mon code.

    NB: au moment où je clique sur la cmd enregistrer,
    tous les doublons sont empêchés par le code de
    traitement doublons.
    Cordialement.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  8. #8
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Citation Envoyé par Zekraoui_Jakani Voir le message
    Si l'élève existe déjà, il ne le rajoute pas à cause de "If oRS.NoMatch Then".
    Si vous voulez ajouter un élève existant, il faudra insérer une "message box (oui/non)" demandant de rajouter l'élève repéré; si oui, le rajouter, sinon passer à l'élève suivant.
    Bonjour membres du forum !
    Pourriez vous m'aider selon l'explication de Zekraoui_Jakani en introduisant un message box dans le code suivant:
    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
     
    Private Sub BtnEnregisterElevesComposants_Click()
    Dim stMsg As String
    Dim Itm As Variant
    Dim oDb As Database
    Dim oRS As Recordset
    Dim critere As String
     
    With Me.ListeELEVES_ANNEE_CLASSE
        '' contrôle saisie élèves
        If .ItemsSelected.Count = 0 Then Exit Sub
        'contrôle saisie Classe
        If IsNull(Me.lstClasse_Evaluation) Then
            MsgBox "Sélectionnez une classe.", vbCritical
            Me.lstClasse_Evaluation.SetFocus
            'Me.lstClasse_Evaluation.Dropdown  **** Pour dérouler le combobox à l'aide de la méthode DROPDOWN
            SendKeys "{F4}"      '*** Pour dérouler le combobox à l'aide de l'envoi de touche clavier (F4)
            Exit Sub
        End If
     
     
        stMsg = "Voulez-vous insérer les élèves suivants:" & vbCrLf
        For Each Itm In .ItemsSelected
            stMsg = stMsg & .Column(4, Itm) & vbCrLf
        Next Itm
     
     'Confirmer l'insertion des élèves
        stMsg = stMsg & "?"
        If MsgBox(stMsg, vbQuestion + vbYesNo) = vbNo Then Exit Sub
     
        Set oDb = CurrentDb
        Set oRS = oDb.OpenRecordset("Tbl_EVALUATION_NIVEAU_SCOLAIRE", dbOpenDynaset)
     
    ' ajout des éléments sélectionnés
        For Each Itm In .ItemsSelected
            critere = "[Nom_Prenoms_EleveComposant]=""" & .Column(4, Itm) _
            & """ and [NumInsCreleve]=" & .Column(2, Itm) _
            & " and [MleEleve]=" & .Column(3, Itm) _
            & " and [COMPOSITION]=" & Me.ListeComposition_Evaluation _
            & " and [NiveauCompositionFrancais]='" & Me.ListeNiveauEVALUATION & "'"
     
            Call oRS.FindFirst(critere) 'Cherche si il y a déjà un enregistrement avec ces valeurs
     
            If oRS.NoMatch Then
                    'L'enregistrement n'existe pas déjà, on va l'ajouter.
                    oRS.AddNew
     
                   oRS.Fields("NumEnregistreComposant") = f_NumAutoEnregistrementElevesComposants() + 1 '.Column(0, Itm)
     
                    oRS.Fields("Nom_Prenoms_EleveComposant") = .Column(4, Itm)
     
                    oRS.Fields("COMPOSITION") = Me.ListeComposition_Evaluation '.Column(2, Itm)
                    oRS.Fields("NiveauCompositionFrancais") = Me.ListeNiveauEVALUATION '.Column(2, Itm)
     
                    oRS.Fields("IdEcole") = Me.ID_ETABL_FREQ '.Column(9, Itm)
                    oRS.Fields("AnneeScol") = Me.ANNEE_SCOL '.Column(8, Itm)
     
                    oRS.Fields("NumInsCreleve") = .Column(2, Itm)
                    oRS.Fields("MleEleve") = .Column(3, Itm)
     
                    oRS.Update
            End If
     
        Next Itm
    ' enlever la sélection
        .RowSource = .RowSource
     
    ' affichage des éléments saisis
        Me.Refresh
        Me.ListeELEVES_ANNEE_CLASSE.Requery
        Forms("Frm_EvaluationScolaireElevesECIND").Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Requery
        ListeELEVES_ANNEE_CLASSE.RowSource = ListeELEVES_ANNEE_CLASSE.RowSource
        End With
     
    End Sub
    ?

    Selon les critères (ETABL, Ansco, NumInsc, Mleelv, Composi, NivCompo) afin de m'éviter des doublons d'élèves composants à chacune des compositions dans une année scolaires ?

    Voir la pièce jointe au post 4.

    Cordialement
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  9. #9
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Voici ma fonction de gestion de doublons:
    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
     ''FONCTION POUR CONTROLER LES DOUBLONS DE L'ENREGISTREMENT DES ELEVES
    ''COMPOSANTS PAR COMPOSITION, Niveau de Composition ET ANNEE SCOLAIRE, ECOLE
     
    Public Function fEstEleveDejaComposant(ETABL As Long, NumInsc As Long, Mleelv As Long, Ansco As String, Composi As Long, NivCompo As String) As Boolean
    On Error GoTo MOROBABOUMAR
    If IsNull(ETABL) Then Exit Function
    If IsNull(NumInsc) Then Exit Function
    If IsNull(Mleelv) Then Exit Function
    If IsNull(Ansco) Then Exit Function
    If IsNull(Composi) Then Exit Function
    If IsNull(NivCompo) Then Exit Function
    Dim db As Database
    Dim rst As Recordset
    Dim sql As String
        Set db = CurrentDb
        sql = "select * from Tbl_EVALUATION_NIVEAU_SCOLAIRE where  IdEcole = " & ETABL & "and NumInsCreleve =" & NumInsc & "and MleEleve =" & Mleelv & "and AnneeScol ='" & Ansco & "'and COMPOSITION =" & Composi & "and NiveauCompositionFrancais ='" & NivCompo & "'"
        Set rst = db.OpenRecordset(sql)
        If Not rst.EOF Then
            fEstEleveDejaComposant = True
            Else
            fEstEleveDejaComposant = False
        End If
    Exit Function
    MOROBABOUMAR:
        MsgBox "Erreur n° " & err.Number & vbCrLf & err.description, vbCritical + vbOKOnly, "Une erreur est survenue"
    End Function
    Je souhaiterais éviter l'ensemble de doublons en même temps, lorsque je clique sur la commande enregistrer de mon application.

    L ‘objectif de mon application est d’évaluer le niveau des élèves pendant trois (3) trimestre d’une année scolaire.
    Étant une école confessionnelle islamique, l’enseignement est reparti entre les matières islamiques (قرأن، حديث، فقه .....) en arabe et matières laïques françaises (Français, math, sciences et technologies, histoire-géographie ….). D’où l’application comprend deux parties :
    1°) EVALUATION DU NIVEAU SCOLAIRE FRANÇAIS DES ELEVES
    2°) EVALUATION DU NIVEAU SCOLAIRE ARABE DES ELEVES
    Je rappelle que chaque partie est gérée séparément.
    Voici quelques images qui pourraient vous aider à mieux comprendre le fonctionnement de mon application.

    Nom : CaptureCOMPOSITION_ENTAMEE 1.JPG
Affichages : 79
Taille : 63,1 Ko
    Nom : CaptureCOMPOSITION_ENTAMEE 2.JPG
Affichages : 78
Taille : 108,4 Ko
    Nom : CaptureCOMPOSITION_ENTAMEE 3.JPG
Affichages : 74
Taille : 113,7 Ko
    Nom : CaptureCOMPOSITION_ENTAMEE 4.JPG
Affichages : 76
Taille : 198,2 Ko
    Nom : CaptureCOMPOSITION_ENTAMEE 5.JPG
Affichages : 98
Taille : 126,3 Ko
    Nom : CaptureCOMPOSITION_ENTAMEE 5.JPG
Affichages : 98
Taille : 126,3 Ko
    Nom : CaptureCOMPOSITION_ENTAMEE 7.JPG
Affichages : 74
Taille : 171,3 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    '__Appel de la fonction de doublons______________________________________
    If fEstEleveDejaComposant(Me.ID_ETABL_FREQ, _
    Me.NumInscriptionEleveInscrit, _
    Me.Mleeleve, Me.ANNEE_SCOL, _
    Me.ListeComposition_Evaluation, _
    Me.ListeNiveauEVALUATION) = True Then
        MsgBox "ATTENTION !!" & vbCrLf & "Cet élève est déjà sur la liste des composants pour cette : " _
        & Me.ListeNiveauEVALUATION.Column(1), vbCritical + vbOKOnly, "Risque de Doublons"
    End If
    'Exit Sub
    '_________________________
    Je vous renvoie une nouvelle copie de mon Application
    Cordialement.
    Fichiers attachés Fichiers attachés
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  10. #10
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Citation Envoyé par Zekraoui_Jakani Voir le message
    Si l'élève existe déjà, il ne le rajoute pas à cause de "If oRS.NoMatch Then".
    Si vous voulez ajouter un élève existant, il faudra insérer une "message box (oui/non)" demandant de rajouter l'élève repéré; si oui, le rajouter, sinon passer à l'élève suivant.
    Bonjour membres du forum !
    Finalement la méthode de Zekraoui_Jakani est parfaite.

    Nom : CaptureCOMPOSITION_ENTAMEE 9.JPG
Affichages : 75
Taille : 159,0 Ko
    Nom : CaptureCOMPOSITION_ENTAMEE 10.JPG
Affichages : 75
Taille : 146,5 Ko
    Le code marche.
    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
     
    Private Sub BtnEnregisterElevesComposants_Click()
    Dim stMsg As String
    Dim Itm As Variant
    Dim oDb As Database
    Dim oRS As Recordset
    Dim critere As String
    Dim Eleve As String
    Dim ajouter As Boolean
     
    On Error GoTo OUMAR
     
    With Me.ListeELEVES_ANNEE_CLASSE
        '' contrôle saisie élèves
        If .ItemsSelected.Count = 0 Then Exit Sub
        'contrôle saisie Classe
        If IsNull(Me.lstClasse_Evaluation) Then
            MsgBox "Sélectionnez une classe.", vbCritical
            Me.lstClasse_Evaluation.SetFocus
            'Me.lstClasse_Evaluation.Dropdown  **** Pour dérouler le combobox à l'aide de la méthode DROPDOWN
            SendKeys "{F4}"      '*** Pour dérouler le combobox à l'aide de l'envoi de touche clavier (F4)
            Exit Sub
        End If
     
        Set oDb = CurrentDb
        Set oRS = oDb.OpenRecordset("Tbl_EVALUATION_NIVEAU_SCOLAIRE", dbOpenDynaset)
     
        For Each Itm In .ItemsSelected
            Eleve = .Column(4, Itm)
            oRS.FindFirst "[Nom_Prenoms_EleveComposant] LIKE '*" & Eleve & "*'"
            ajouter = False
     
            If oRS.NoMatch Then
                ajouter = True  'Add the record to the table and
                stMsg = "L'élève " & Eleve & " a été rajouté à la liste, avec succès !"
            Else
                Dim fld As Field
                stMsg = "L'élève " & Eleve & " existe déjà dans la table !" & vbLf    '**********************
                stMsg = stMsg & " avec les dnnées suivantes :" & vbCrLf
                For Each fld In oRS.Fields
                    stMsg = stMsg & fld.Name & " : " & fld.Value & vbCrLf
                Next fld
                stMsg = stMsg & vbCrLf & "Voulez-vous le rajouter ?"
                If MsgBox(stMsg, vbQuestion + vbYesNo, "Ajouter un Elève") = vbNo Then
                    ajouter = False
                Else
                    ajouter = True  'Add the record to the table
                End If
            End If        'stMsg = stMsg & .Column(4, Itm) & vbCrLf
     
            If ajouter = True Then
                With oRS
                    .AddNew
                    ![NumEnregistreComposant] = f_NumAutoEnregistrementElevesComposants() + 1
                    ![Nom_Prenoms_EleveComposant] = Me.ListeELEVES_ANNEE_CLASSE.Column(4, Itm)
                    ![COMPOSITION] = Me.ListeComposition_Evaluation
                    ![NiveauCompositionFrancais] = Me.ListeNiveauEVALUATION
                    ![IdEcole] = Me.ID_ETABL_FREQ
                    ![AnneeScol] = Me.ANNEE_SCOL
                    ![NumInsCreleve] = Me.ListeELEVES_ANNEE_CLASSE.Column(2, Itm)
                    ![Mleeleve] = Me.ListeELEVES_ANNEE_CLASSE.Column(3, Itm)
                    .Update
                End With
                MsgBox stMsg, vbInformation + vbOKOnly, "Elève ajouté"
            End If
        Next Itm
     
    ' enlever la sélection
        .RowSource = .RowSource
     
    ' affichage des éléments saisis
        Me.Refresh
        Me.ListeELEVES_ANNEE_CLASSE.Requery
        Forms("Frm_EvaluationScolaireElevesECIND").Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Requery
        ListeELEVES_ANNEE_CLASSE.RowSource = ListeELEVES_ANNEE_CLASSE.RowSource
        End With
    Forms!Frm_EvaluationScolaireElevesECIND!CtlTabEVALUATION_COMPOSITION.Pages(1).SetFocus
     
    OUMAR_Exit:
        Exit Sub
     
    OUMAR:
        MsgBox err.Description, vbExclamation + vbOKOnly, err.Number
        Resume OUMAR_Exit
    End Sub
    NB: il y a une remarque: voir les images suivantes:
    La Msgbox devrait afficher les infos concernant l'année scolaire
    en cours. Exemple: l'élève 625 BALLO Maïmouna est redoublante de l'année
    dernière 2019-2020. La msgbox devrait afficher les infos de l'année en cours.
    Hormis cette remarque, votre code est parfait. Peut être avez vous des
    remarques et suggestions à me soumettre.

    Merci infiniment à tous,
    Merci Zekraoui_Jakani.
    Bien à vous.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

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

Discussions similaires

  1. [AC-2013] Autre manière d'éradiquer les doublons dans Access
    Par morobaboumar dans le forum Access
    Réponses: 27
    Dernier message: 02/05/2019, 00h54
  2. Comment éviter les doublons dans access
    Par colorid dans le forum Bases de données
    Réponses: 5
    Dernier message: 28/07/2011, 11h45
  3. Réponses: 0
    Dernier message: 09/02/2011, 09h13
  4. Coder les doublons dans table ACCESS
    Par landi2008 dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/08/2008, 13h35
  5. Supprimer les doublons dans ACCESS
    Par calostephy dans le forum Access
    Réponses: 3
    Dernier message: 08/01/2008, 10h35

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