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 [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
    Salut Membres du forum !
    J'Inséré les données dans la table Tbl_EVALUATION_NIVEAU_SCOLAIRE grâce à la méthode de Tee_grandbois.
    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
    Private Sub BtnEnregisterElevesComposants_Click()
    Dim stMsg As String
    Dim Itm As Variant
    Dim oDb As Database
    Dim oRS As Recordset
     
    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
            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
     
        Next Itm
     
    ' enlever la sélection
        .RowSource = .RowSource
     
    ' affichage des éléments saisis
        Me.Refresh
    End With
     
    End Sub
    Maintenant, je souhaite éviter d’insérer les doublons de lignes de données (c à d : ne pas entrer les mêmes données pour une même composition).
    Je sollicite votre aide.

    Voir pièces jointes:
    Nom : EvaluationNiveau1.PNG
Affichages : 447
Taille : 90,7 Ko
    Nom : EvaluationNiveau2.PNG
Affichages : 485
Taille : 99,4 Ko
    Nom : EvaluationNiveau3.PNG
Affichages : 533
Taille : 92,0 Ko

    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

  2. #2
    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 Fonction de gestion de doublons
    J'ai écrit cette fonction me permettant de gérer les doublons.
    Il marche quand il s'agit d'enregistrement individuel.
    Par contre les clefs me manquent pour l'appliquer à plusieurs enregistrements qui
    doivent être insérés en même temps dont les doublons doivent être contrôlés
    r:

    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
    ''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
    Voici comment j'appelle ma fonction dans le code d'insertion d'enregistrement:
    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
    Private Sub BtnEnregisterElevesComposants_Click()
    Dim stMsg As String
    Dim Itm As Variant
    Dim oDb As Database
    Dim oRS As Recordset
    
    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)
             
    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à enregistré pour cette: " & Me.ListeComposition_Evaluation.Column(1), vbCritical + vbOKOnly, "Risque de Doublons"
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!NumEnregistreComposant = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!IdEcole = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!AnneeScol = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!COMPOSITION = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!NumInsCreleve = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!Mleeleve = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!Nom_Prenoms_EleveComposant = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!NiveauCompositionFrancais = ""
    
        End If
    
    ' ajout des éléments sélectionnés
        For Each Itm In .ItemsSelected
            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
           
        Next Itm
     
    ' enlever la sélection
        .RowSource = .RowSource
     
    ' affichage des éléments saisis
        Me.Refresh
        Me.ListeELEVES_ANNEE_CLASSE.Requery
        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

  3. #3
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Avril 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    J'ai téléchargé ta BdD mais je comprends pas ce que tu veux obtenir comme résultat.

    Donne moi plus d'explications
    Cordialement,

    "C'est une requête SQL qui entre dans un bar, et le serveur répond : « Il n'y a plus de tables ! ».
    Refusée au bar, la requête SQL veut aller en boîte et le videur lui dit : « Non, dehors ! C'est select ici. »

    "

    Sankara Adama
    A+

  4. #4
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Avril 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut
    Re-Bonjour

    D'après mon entendement si tu as déjà insérer les données de tel élève pour une composition donnée X, a la prochaine insertion cela ne doit pas marcher

    Si tel est le cas alors je te propose cette option:

    apres ton For Each juste avant oRS.AddNew

    Fait une requette selection ou tu verifie que le Mleeleve n'existe pas déja, si c'est le cas alors soit tu supprime ou tu passe a l'enregistrement suivant sinon tu continue l'execution de ta boucle

    Si j'ai pas été claire alors revient moi. Et je te donnerais le code VBA(Au faite je suis à une fête, c'est pourquoi j'entre pas trop dans les détail )
    Cordialement,

    "C'est une requête SQL qui entre dans un bar, et le serveur répond : « Il n'y a plus de tables ! ».
    Refusée au bar, la requête SQL veut aller en boîte et le videur lui dit : « Non, dehors ! C'est select ici. »

    "

    Sankara Adama
    A+

  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 Résultat recherché
    Citation Envoyé par adama13 Voir le message
    Bonjour,
    J'ai téléchargé ta BdD mais je comprends pas ce que tu veux obtenir comme résultat.
    Donne moi plus d'explications
    Bonsoir membres du forum !
    Bonsoir adama13 !
    Très heureux de recevoir votre réponse. Bref!
    Mon objectif est d'enregistrer des élèves de la zone de liste"ListeELEVES_ANNEE_CLASSE" basée sur la requête"Eleve_INSCRIT_Req_Plus" dans le sous-formulaire "Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFr" qui lui est basé sur
    la table "Tbl_EVALUATION_NIVEAU_SCOLAIRE".

    Code du bouton"Enregistrer les Elèves Composants Sélectionnés":

    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
    Private Sub BtnEnregisterElevesComposants_Click()
    Dim stMsg As String
    Dim Itm As Variant
    Dim oDb As Database
    Dim oRS As Recordset
    
    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)
     '________________________________________________________________________
    'Ici; appel de la fonction de gestion de doublons. 
    'Cette fonction devrait empêcher toutes les informations déjà enregistrées dans la table "Tbl_EVALUATION_NIVEAU_SCOLAIRE" d'y être insérées  une nouvelle fois pour une composition.
    '________________________________________________________________________
    
    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à enregistré pour cette: " & Me.ListeComposition_Evaluation.Column(1), vbCritical + vbOKOnly, "Risque de Doublons"
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!NumEnregistreComposant = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!IdEcole = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!AnneeScol = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!COMPOSITION = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!NumInsCreleve = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!Mleeleve = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!Nom_Prenoms_EleveComposant = ""
        Me.Tbl_EVALUATION_NIVEAU_SCOLAIRE_SFrm.Form!NiveauCompositionFrancais = ""
    
        End If
    '____________________________________________________________________
    '_____________________________________________________________________
    
    ' ajout des éléments sélectionnés
        For Each Itm In .ItemsSelected
            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
           
        Next Itm
     
    ' enlever la sélection
        .RowSource = .RowSource
     
    ' affichage des éléments saisis
        Me.Refresh
        Me.ListeELEVES_ANNEE_CLASSE.Requery
        End With
    
    End Sub
    Le résultat recherché est d'éviter les doublons.
    Voici ma fonction de gestion de doublons:
    Nom : EvaluationNiveau4.PNG
Affichages : 446
Taille : 70,4 Ko
    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
    ''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
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Peut-être qu'avec une simple fonction de domaine, vous pouvez contrôler et éviter d'insérer des doublons
    A adapter à votre bdd
    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
    Private Sub btnclick1_Click()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim MesCriteres As String
    Dim ctl As Control
    Dim i As Variant
     
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Table2_tmp", dbOpenDynaset)
    Set ctl = Me.maListbox
     
    If ctl.ItemsSelected.Count = 0 Then
    MsgBox "Veuillez sélectionner au moins une ligne !"
    Exit Sub
    End If
     
    MesCriteres = _
    "idfk = " & ctl.Column(0) & " " & _
    "AND date1 = #" & Format(ctl.Column(1), "mm/dd/yyyy") & "#"
     
    If DCount("*", "Table2_tmp", MesCriteres) > 0 Then
    MsgBox "Cet enregistrement existe déjà !"
    Me.Undo
    Else
        For Each i In ctl.ItemsSelected
            rst.AddNew
            rst!idfk = ctl.Column(0, i)
            rst!date1 = ctl.Column(1, i)
            rst.Update
        Next i
    End If
     
    Set rst = Nothing
    Set dbs = Nothing
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  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 hyperion13 Voir le message
    Peut-être qu'avec une simple fonction de domaine, vous pouvez contrôler et éviter d'insérer des doublons
    A adapter à votre bdd
    Bonsoir hyperion13 !
    Très heureux de votre réponse !
    Pourriez vous me commenter les différentes parties de votre code afin de me faciliter la tache à l'adapter à ma BDD ?
    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 Essai d’adaptation de code
    Salut membres du forum !
    Voici ce que j'ai réalisé comme adaptation du code proposé par hyperion13
    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
    Private Sub btnclick1_Click()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim MesCriteres As String
    Dim ctl As Control
    Dim i As Variant
     
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Table2_tmp", dbOpenDynaset)
    Set ctl = Me.maListbox
     
    If ctl.ItemsSelected.Count = 0 Then
    MsgBox "Veuillez sélectionner au moins une ligne !"
    Exit Sub
    End If
     
    MesCriteres = _
    "idfk = " & ctl.Column(0) & " " & _
    "AND date1 = #" & Format(ctl.Column(1), "mm/dd/yyyy") & "#"
     
    If DCount("*", "Table2_tmp", MesCriteres) > 0 Then
    MsgBox "Cet enregistrement existe déjà !"
    Me.Undo
    Else
        For Each i In ctl.ItemsSelected
            rst.AddNew
            rst!idfk = ctl.Column(0, i)
            rst!date1 = ctl.Column(1, i)
            rst.Update
        Next i
    End If
     
    Set rst = Nothing
    Set dbs = Nothing
    End Sub
    et mon essai d'aptation du code

    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
    Private Sub btnclick1_Click()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim MesCriteres As String
    Dim ctl As Control
    Dim i As Variant
     
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Tbl_EVALUATION_NIVEAU_SCOLAIRE", dbOpenDynaset)
    Set ctl = Me.ListeELEVES_ANNEE_CLASSE
     
    If ctl.ItemsSelected.Count = 0 Then
    MsgBox "Veuillez sélectionner au moins une ligne !"
    Exit Sub
    End If
     
    MesCriteres = "IdEcole = " & Me.ID_ETABL_FREQ & "and NumInsCreleve =" & Me.NumInscriptionEleveInscrit & "and MleEleve =" & Me.Mleeleve & "and AnneeScol ='" & Me.ANNEE_SCOL & "'and COMPOSITION =" & Me.ListeComposition_Evaluation & "and NiveauCompositionFrancais ='" & Me.ListeNiveauEVALUATION & "'"
     
     
    If DCount("*", "Tbl_EVALUATION_NIVEAU_SCOLAIRE", MesCriteres) > 0 Then
    MsgBox "Cet enregistrement existe déjà !"
    Me.Undo
    Else
        For Each i In ctl.ItemsSelected
            rst.AddNew
            rst!NumEnregistreComposant = f_NumAutoEnregistrementElevesComposants() + 1 'ctl.Column(0)
            rst!IdEcole = Me.ID_ETABL_FREQ 'ctl.Column(1)
            rst!AnneeScol = Me.ANNEE_SCOL
            rst!COMPOSITION = Me.ListeComposition_Evaluation
            rst!NumInsCreleve = ctl.Column(2) 'Me.NumInscriptionEleveInscrit
            rst!Mleeleve = ctl.Column(3) 'Me.Mleeleve
            rst!Nom_Prenoms_EleveComposant = ctl.Column(4) 'Me.NPrenomsEleves
            rst!NiveauCompositionFrancais = Me.ListeNiveauEVALUATION
            e 
        Next i
    End If
     
    Set rst = Nothing
    Set dbs = Nothing
    End Sub
    Mais j'ai toujours des doublons de la part de mon code adapté.
    Voir la capture d'image:
    Nom : EvaluationNiveau5.PNG
Affichages : 546
Taille : 32,8 Ko

    Je sollicite votre aide.
    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
    Bonjour membres du forum !
    J'ai retouché mon code adapté:
    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
    Private Sub btnclick1_Click()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim MesCriteres As String
    Dim ctl As Control
    Dim i As Variant
     
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Tbl_EVALUATION_NIVEAU_SCOLAIRE", dbOpenDynaset)
    Set ctl = Me.ListeELEVES_ANNEE_CLASSE
     
    If ctl.ItemsSelected.Count = 0 Then
    MsgBox "Veuillez sélectionner au moins une ligne !"
    Exit Sub
    End If
     
    ' 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
     
    MesCriteres = "IdEcole = " & Me.ID_ETABL_FREQ & "and NumInsCreleve =" & Me.NumInscriptionEleveInscrit & "and MleEleve =" & Me.Mleeleve & "and AnneeScol ='" & Me.ANNEE_SCOL & "'and COMPOSITION =" & Me.ListeComposition_Evaluation & "and NiveauCompositionFrancais ='" & Me.ListeNiveauEVALUATION & "'"
     
     
    If DCount("*", "Tbl_EVALUATION_NIVEAU_SCOLAIRE", MesCriteres) > 0 Then
    MsgBox "Cet enregistrement existe déjà !"
    Me.Undo
    Else
        For Each i In ctl.ItemsSelected
            rst.AddNew
            rst!NumEnregistreComposant = f_NumAutoEnregistrementElevesComposants() + 1 'ctl.Column(0)
            rst!IdEcole = Me.ID_ETABL_FREQ 'ctl.Column(1)
            rst!AnneeScol = Me.ANNEE_SCOL
            rst!COMPOSITION = Me.ListeComposition_Evaluation
            rst!NumInsCreleve = ctl.Column(2, i) 'Me.NumInscriptionEleveInscrit
            rst!Mleeleve = ctl.Column(3, i) 'Me.Mleeleve
            rst!Nom_Prenoms_EleveComposant = NomPrenomEleveFrancais(Me.Mleeleve) ' ctl.Column(4, 1)
            rst!NiveauCompositionFrancais = Me.ListeNiveauEVALUATION
            rst.Update
        Next i
    End If
     
    ' affichage des éléments saisis
        Me.Refresh
        Me.ListeELEVES_ANNEE_CLASSE.Requery
        Me.Requery
     'enlever la sélection
        '.RowSource = .RowSource
      'Me.RowSource.Requery
     
    Set rst = Nothing
    Set dbs = Nothing
    End Sub
    1°) j'ai toujours des doublons au niveau du champ "Nom_Prenoms_EleveComposant" de la table "Tbl_EVALUATION_NIVEAU_SCOLAIRE".

    Nom : EvaluationNiveau.6PNG.PNG
Affichages : 410
Taille : 47,0 Ko

    2°) j'ai essayé d'enlever la sélection avec l'objet ".RowSource = .RowSource" dont voici le message d'erreur:

    Nom : EvaluationNiveau7.PNG
Affichages : 417
Taille : 21,3 Ko

    Je vous envoie la pièce jointe de ma BDD.
    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
    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,
    je n'ai pas le temps de regarder dans le détail la pièce jointe mais je vois déjà 2 erreurs à corriger :
    1) il manque un espace avant chaque and
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MesCriteres = "IdEcole = " & Me.ID_ETABL_FREQ & " and NumInsCreleve =" & Me.NumInscriptionEleveInscrit & " and MleEleve =" & Me.Mleeleve & " and AnneeScol ='" & Me.ANNEE_SCOL & "' and COMPOSITION =" & Me.ListeComposition_Evaluation & " and NiveauCompositionFrancais ='" & Me.ListeNiveauEVALUATION & "'"
    2) .Rowsource = .Rowsource ne fonctionne que si il y a un With avant pour qualifier l'objet auquel on se réfère, ce qui montre que tu ne sais pas comment l'utiliser car je n'ai pas vu de With dans le code posté,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With maZonedeListe
        .Rowsource = .Rowsource
    End With
    cette méthode évite de répéter le nom de l'objet à chaque fois qu'on l'utilise dans une multitude de lignes d'instructions, mais pour une seule, ce n'est vraiment pas la peine de s'embêter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maZonedeListe.Rowsource = maZonedeListe.Rowsource
    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 ?

  11. #11
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Re,
    Pourtant le bout de code donné dans mon précédent post aurait dû vous permettre d'y arriver !

    Capture d'écran de votre form Post#9. Vous avez dû vous mélanger les pinceaux dans votre sub puisqu'aucun rapport entre les 3 MleEleve et le NomPrenomEleve !

    Est-ce pour une motivation impériale que vous avez créé cette fonction ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f_NumAutoEnregistrementElevesComposants() + 1
    Parce que Microsoft a mis au point le NuméroAuto !

    A adapter à votre "usine à gaz"
    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
    Private Sub test_Click()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim MesCriteres As String
    Dim ctl As Control, ctl1 As Control, ctl2 As Control
    Dim i As Variant
     
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Tbl_EVALUATION_NIVEAU_SCOLAIRE", dbOpenDynaset)
    Set ctl = Me.ListeELEVES_ANNEE_CLASSE
    Set ctl1 = Me.ListeComposition_Evaluation
    Set ctl2 = Me.ListeNiveauEVALUATION
     
    If ctl.ItemsSelected.Count = 0 Then
    MsgBox "Veuillez sélectionner un enregistrement au moins !"
    Exit Sub
    End If
     
    MesCriteres = _
    "IdEcole = " & ctl.Column(0) & " " & _
    "AND AnneeScol = '" & ctl.Column(1) & "' " & _
    "AND NumInsCreleve = " & ctl.Column(2) & " " & _
    "AND MleEleve = " & ctl.Column(3) & " " & _
    "AND Nom_Prenoms_EleveComposant = '" & ctl.Column(4) & "' " & _
    "AND COMPOSITION = " & ctl1.Column(0) & " " & _
    "AND NiveauCompositionFrancais = '" & ctl2.Column(0) & "' "
     
    If DCount("*", "Tbl_EVALUATION_NIVEAU_SCOLAIRE", MesCriteres) > 0 Then
        MsgBox "Cet enregistrement a deja ete insere"
        Me.Undo
    Else
        For Each i In ctl.ItemsSelected
            rst.AddNew
            rst!IdEcole = ctl.Column(0, i)
            rst!AnneeScol = ctl.Column(1, i)
            rst!NumInsCreleve = ctl.Column(2, i)
            rst!MleEleve = ctl.Column(3, i)
            rst!Nom_Prenoms_EleveComposant = ctl.Column(4, i)
            rst!COMPOSITION = ctl1.Column(0)
            rst!NiveauCompositionFrancais = ctl2.Column(0)
            rst.Update
        Next i
    End If
    With ctl
        .RowSource = .RowSource
    End With
    Set rst = Nothing
    Set dbs = Nothing
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  12. #12
    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 !
    Merci infiniment à vous tous:
    tee_grandbois
    hyperion13
    adama13


    Grace à vous, j'ai obtenu la solution à notre discussion.
    J'ai ajouté des contrôles au code.
    Le temps de tester avant de fermer la discussion.
    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
     
    Private Sub EnregistrerlesComposants_Click()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim MesCriteres As String
    Dim ctl As Control, ctl1 As Control, ctl2 As Control
    Dim i As Variant
     
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Tbl_EVALUATION_NIVEAU_SCOLAIRE", dbOpenDynaset)
    Set ctl = Me.ListeELEVES_ANNEE_CLASSE
    Set ctl1 = Me.ListeComposition_Evaluation
    Set ctl2 = Me.ListeNiveauEVALUATION
     
    ' 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
     
    ' contrôle de la sélection d'enregistrement(s)
    If ctl.ItemsSelected.Count = 0 Then
    MsgBox "Veuillez sélectionner un enregistrement au moins !"
    Exit Sub
    End If
     
    MesCriteres = _
    "IdEcole = " & ctl.Column(0) & " " & _
    "AND AnneeScol = '" & ctl.Column(1) & "' " & _
    "AND NumInsCreleve = " & ctl.Column(2) & " " & _
    "AND MleEleve = " & ctl.Column(3) & " " & _
    "AND Nom_Prenoms_EleveComposant = '" & ctl.Column(4) & "' " & _
    "AND COMPOSITION = " & ctl1.Column(0) & " " & _
    "AND NiveauCompositionFrancais = '" & ctl2.Column(0) & "' "
     
    If DCount("*", "Tbl_EVALUATION_NIVEAU_SCOLAIRE", MesCriteres) > 0 Then
        MsgBox "Cet enregistrement a deja ete insere"
        Me.Undo
    Else
        For Each i In ctl.ItemsSelected
            rst.AddNew
            rst!NumEnregistreComposant = f_NumAutoEnregistrementElevesComposants() + 1
            rst!IdEcole = ctl.Column(0, i)
            rst!AnneeScol = ctl.Column(1, i)
            rst!NumInsCreleve = ctl.Column(2, i)
            rst!Mleeleve = ctl.Column(3, i)
            rst!Nom_Prenoms_EleveComposant = ctl.Column(4, i)
            rst!COMPOSITION = ctl1.Column(0)
            rst!NiveauCompositionFrancais = ctl2.Column(0)
            rst.Update
        Next i
    End If
    With ctl
        .RowSource = .RowSource
    End With
    Set rst = Nothing
    Set dbs = Nothing
    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

  13. #13
    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 !

    En effet, après avoir testé le code
    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
     
    Private Sub EnregistrerlesComposants_Click()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim MesCriteres As String
    Dim ctl As Control, ctl1 As Control, ctl2 As Control
    Dim i As Variant
     
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Tbl_EVALUATION_NIVEAU_SCOLAIRE", dbOpenDynaset)
    Set ctl = Me.ListeELEVES_ANNEE_CLASSE
    Set ctl1 = Me.ListeComposition_Evaluation
    Set ctl2 = Me.ListeNiveauEVALUATION
     
    ' 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
     
    ' contrôle de la sélection d'enregistrement(s)
    If ctl.ItemsSelected.Count = 0 Then
    MsgBox "Veuillez sélectionner un enregistrement au moins !"
    Exit Sub
    End If
     
    MesCriteres = _
    "IdEcole = " & ctl.Column(0) & " " & _
    "AND AnneeScol = '" & ctl.Column(1) & "' " & _
    "AND NumInsCreleve = " & ctl.Column(2) & " " & _
    "AND MleEleve = " & ctl.Column(3) & " " & _
    "AND Nom_Prenoms_EleveComposant = '" & ctl.Column(4) & "' " & _
    "AND COMPOSITION = " & ctl1.Column(0) & " " & _
    "AND NiveauCompositionFrancais = '" & ctl2.Column(0) & "' "
     
    If DCount("*", "Tbl_EVALUATION_NIVEAU_SCOLAIRE", MesCriteres) > 0 Then
        MsgBox "Cet enregistrement a deja ete insere"
        Me.Undo
    Else
        For Each i In ctl.ItemsSelected
            rst.AddNew
            rst!NumEnregistreComposant = f_NumAutoEnregistrementElevesComposants() + 1
            rst!IdEcole = ctl.Column(0, i)
            rst!AnneeScol = ctl.Column(1, i)
            rst!NumInsCreleve = ctl.Column(2, i)
            rst!Mleeleve = ctl.Column(3, i)
            rst!Nom_Prenoms_EleveComposant = ctl.Column(4, i)
            rst!COMPOSITION = ctl1.Column(0)
            rst!NiveauCompositionFrancais = ctl2.Column(0)
            rst.Update
        Next i
    End If
    With ctl
        .RowSource = .RowSource
    End With
    Set rst = Nothing
    Set dbs = Nothing
    End Sub
    je constate des doublons dans la table "Tbl_EVALUATION_NIVEAU_SCOLAIRE".

    Voir la capture d'image:

    Nom : EvaluationNiveau8.PNG
Affichages : 421
Taille : 50,9 Ko

    Voici comment les erreurs de doublons arrivent:

    1°) quand je sélectionne nouvellement des données de la zone de liste "ListeELEVES_ANNEE_CLASSE", elles
    sont insérées correctement dans le table "Tbl_EVALUATION_NIVEAU_SCOLAIRE" sans doublons grâce à la commande "EnregistrerlesComposants".

    2°) par contre quand je sélectionne les mêmes données sélectionnées au paravent plus de nouvelles données, ces nouvelles
    données sont envoyées en même que les anciennes qui furent envoyées créant ainsi des doublons.

    Mais individuellement, il n y a pas de problème doublons mais lors de l'envoie par groupe; c'est à ce moment que surviennent
    des 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

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Donc il faut que : [NumInCrel.. ] et [MleEleve] soient uniques ?

    Tu peux ajouter à ta table un index unique comme décrit ici :
    https://www.developpez.net/forums/d1...ublons-lignes/
    Mon post du 18/02/2019, 18h15.

    Cela empêchera les doublons mais tu as sans doute un problème dans ton code d'ajout qu'il serait bon de régler.
    Ce genre de soucis vient généralement d'une jointure qui "multiplie" les enregistrements.
    Par exemple tu ajoutes l'élève autant de fois qu'il a déjà des notes, donc si ton élève a 3 notes, il va être ajouter 3 fois, la prochaine fois, 4 fois et ainsi de suite.
    L'Index unique va les empêcher mais c'est un peu une perte de temps et d'efficacité.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  15. #15
    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 marot_r !
    Bonsoir membres du forum !

    Voici les captures d'erreurs qui surviennent après avoir suivi vos conseils.

    A+
    Images attachées Images attachées    
    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

  16. #16
    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
    bonsoir,
    Voici les captures d'erreurs qui surviennent après avoir suivi vos conseils.
    pas sûr que cela a quelque chose à voir avec le conseil donné par marot_r: l'erreur de syntaxe c'est parce que les valeurs de la liste déroulante, ctl0.column(0) à ctl.column(4) sont vides
    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 ?

  17. #17
    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 tee_grandbois !
    Très très heureux de vous retrouver !
    Selon vous, comment dois je solutionner ce problème.
    Votre aide encore plus ne peut que me donner la solution parfaite.
    Le code suivant c'est à partir de votre exemple et explication je l'ai adapté à mon cas:
    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
     
    Private Sub BtnEnregisterElevesComposants_Click()
    Dim stMsg As String
    Dim Itm As Variant
    Dim oDb As Database
    Dim oRS As Recordset
     
    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
            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
     
        Next Itm
     
    ' enlever la sélection
        .RowSource = .RowSource
     
    ' affichage des éléments saisis
        Me.Refresh
        Me.ListeELEVES_ANNEE_CLASSE.Requery
        End With
     
    End Sub
    Nom : EvaluationNiveau12.PNG
Affichages : 451
Taille : 81,4 Ko
    Nom : EvaluationNiveau13.PNG
Affichages : 399
Taille : 70,9 Ko

    Ce qui me manque dans ce code, et bien c'est le contrôle des doublons.
    Je voudrais dire une fonction qui permettrais d’empercher les doublons lors d'un enregistrement individuel
    ou d'un ensemble d'enregistrements.

    De toutes les manières vos codes marchent bien. Le manque est le contrôle total des doublons d'une manière ou d'une autre.
    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
    Private Sub EnregistrerlesComposants_Click()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim MesCriteres As String
    Dim ctl As Control, ctl1 As Control, ctl2 As Control
    Dim i As Variant
     
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Tbl_EVALUATION_NIVEAU_SCOLAIRE", dbOpenDynaset)
    Set ctl = Me.ListeELEVES_ANNEE_CLASSE
    Set ctl1 = Me.ListeComposition_Evaluation
    Set ctl2 = Me.ListeNiveauEVALUATION
     
    ' 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
     
    ' contrôle de la sélection d'enregistrement(s)
    If ctl.ItemsSelected.Count = 0 Then
    MsgBox "Veuillez sélectionner un enregistrement au moins !"
    Exit Sub
    End If
     
    MesCriteres = _
    "IdEcole = " & ctl.Column(0) & " " & _
    "AND AnneeScol = '" & ctl.Column(1) & "' " & _
    "AND NumInsCreleve = " & ctl.Column(2) & " " & _
    "AND MleEleve = " & ctl.Column(3) & " " & _
    "AND Nom_Prenoms_EleveComposant = '" & ctl.Column(4) & "' " & _
    "AND COMPOSITION = " & ctl1.Column(0) & " " & _
    "AND NiveauCompositionFrancais = '" & ctl2.Column(0) & "' "
     
    If DCount("*", "Tbl_EVALUATION_NIVEAU_SCOLAIRE", MesCriteres) > 0 Then
        MsgBox "Cet enregistrement a deja ete insere"
        Me.Undo
    Else
        For Each i In ctl.ItemsSelected
            rst.AddNew
            rst!NumEnregistreComposant = f_NumAutoEnregistrementElevesComposants() + 1
            rst!IdEcole = ctl.Column(0, i)
            rst!AnneeScol = ctl.Column(1, i)
            rst!NumInsCreleve = ctl.Column(2, i)
            rst!Mleeleve = ctl.Column(3, i)
            rst!Nom_Prenoms_EleveComposant = ctl.Column(4, i)
            rst!COMPOSITION = ctl1.Column(0)
            rst!NiveauCompositionFrancais = ctl2.Column(0)
            rst.Update
        Next i
    End If
    With ctl
        .RowSource = .RowSource
    End With
    Set rst = Nothing
    Set dbs = Nothing
    End Sub
    Encore merci de bien vouloir m'aider.

    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

  18. #18
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Re
    Pourquoi vous entêtez-vous à utiliser cette fonction, alors qu'il suffirait dans la tbl Tbl_EVALUATION_NIVEAU_SCOLAIRE de mettre NumEnregistreComposant en NuméroAuto !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRS.Fields("NumEnregistreComposant") = f_NumAutoEnregistrementElevesComposants() + 1 '.Column(0, Itm)
    Je suis étonné de votre erreur 3075, puisqu'en arrière plan les lignes sélectionnées dans votre listbox contiennent des valeurs et les 2 combobox également. Le problème ne vient pas de la portion de code que je vous ai donné.
    Concernant le problème de doublon malgré la sub, le problème vient de SelectItem et Dcount(), puisque le traitement se fait par bloc de lignes.
    Selon capture d'écran Post#15
    - vous sélectionnez seulement le MleEleve 517 et cliquez sur le btn, il est inséré dans votre Tbl_EVALUATION_NIVEAU_SCOLAIRE
    - vous le re-sélectionnez à nouveau et cliquez sur le btn, le msg vous indique qu'il est déjà inséré.
    - vous sélectionnez maintenant les MleEleve 517 et 592 et cliquez sur le btn, le bloc de ces 2 lignes est inséré dans votre Tbl_EVALUATION_NIVEAU_SCOLAIRE puisqu'il n'existe pas dans votre Tbl_EVALUATION_NIVEAU_SCOLAIRE.
    - vous le re-sélectionnez à nouveau ce bloc de 2 lignes et cliquez sur le btn, le msg vous indique qu'il est déjà inséré.

    A mon avis, il n'y a pas 36 solutions pour résoudre ce défaut.
    - soit vous faites en sorte de rafraichir votre listbox pour ne plus afficher les MleEleve qui ont été insérés dans votre Tbl_EVALUATION_NIVEAU_SCOLAIRE
    - soit vous créez une tbl temporaire dans laquelle vous insérez vos lignes ou bloc de lignes, que l'on vide à chaque traitement, pour traitez ensuite les doublons.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  19. #19
    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 !
    Pourquoi vous utilisez cette fonction, alors qu'il suffirait dans la tbl Tbl_EVALUATION_NIVEAU_SCOLAIRE de mettre NumEnregistreComposant en NuméroAuto !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRS.Fields("NumEnregistreComposant") = f_NumAutoEnregistrementElevesComposants() + 1
    1°) Après plusieurs essais, le NuméroAuto de Access est incontestablement efficace et meilleur. Néanmoins ma fonction ci dessus me donne
    satisfaction.

    2°) J'insiste sur:
    Ce qui me manque dans ce code, et bien c'est le contrôle des doublons.
    Je voudrais dire une fonction qui permettrais d’empercher les doublons lors d'un enregistrement individuel
    ou d'un ensemble d'enregistrements.
    Le manque est le contrôle total des doublons d'une manière ou d'une autre.
    Je sus sure que vous avez les clefs (les moyens intellectuels) me permettant d'y arriver.
    Je vous rappelle que je ne suis spécialiste en programmation.
    Mais qui aime la programmation.

    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

  20. #20
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    J'avoue être un peu submergé par les informations.

    Qu'est-ce qui doit être unique ? La valeur dans le champ [MleEleve] ? Une combinaison avec d'autre champ ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment éviter les doublons dans une ComboBox
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 27/07/2017, 16h03
  2. comment éviter les doublons en shell ?
    Par monsieur77 dans le forum Linux
    Réponses: 3
    Dernier message: 06/11/2007, 17h17
  3. [Upload] comment éviter les doublons en upload ?
    Par pilou1420 dans le forum Langage
    Réponses: 3
    Dernier message: 31/05/2007, 14h28
  4. publipostage : comment éviter les doublons?
    Par Christophe93250 dans le forum Access
    Réponses: 15
    Dernier message: 03/01/2006, 12h08
  5. Comment éviter les doublons dans ma table
    Par einegel dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2004, 12h18

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