Bonjour,
Difficile de t'indiquer un piste avec si peu d'indices.
Poste le zip de ta base (en version 2000) pour qu'on puisse ausculter.
Version imprimable
Bonjour,
Difficile de t'indiquer un piste avec si peu d'indices.
Poste le zip de ta base (en version 2000) pour qu'on puisse ausculter.
Bonjour, merci à vous de me répondre, mais impossible de sauver ma base sous le format ACCESS 2000, apparemment des éléments ne seraient pas compatible , snif..
Je vais essayer de noter les messages d'erreur et de placer mon code, cela pourrait peut-être vous aider.
"Un index ou une clé principale ne peut contenir une valeur nulle" si on appuie sur Ok : "Impossible d'enregistrer cet enregistrement pour l'instant" si on appuye pour ok pour fermer, cela ne pourra enregistrer.
En finalité, qu'il n'enregistre pas ne me dérange pas puisque le numéro encodé est connu, et je veux juste sortir de la procédure. Pour un utilisateur, avoir ces messages inquiète, lol.
Je pense qu'il y à une procédure afin que les message d'erreurs pour ce coup n'apparaissent pas, mais....
Je trouve dommage de ne pas savoir envoyer ma base, cela m'aurait fais grand plaisir que mes codes soit vérifiés par un spécialiste, à mon sens je dois faire des truc compliqué ou je devrais aller au plus simple, lol.
Matricule_Pers étant la clé primaire de ma base PersonnelCode:
1
2
3
4
5
6
7 Private Sub Matricule_Pers_BeforeUpdate(Cancel As Integer) If IsNull(Me.Matricule_Pers) Then Exit Sub If DCount("*", "Personnel", "Matricule_Pers = '" & Me.Matricule_Pers & "'") <> 0 Then MsgBox "Ce Matricule existe Déjà !", vbCritical Cancel = True End If End Sub
Encore merci de ton attention et joyeuses fêtes.
bonsoir,
Code:If IsNull(Me.Matricule_Pers) Then Exit Sub
dans ce cas il ne faudrait pas faire un Exit Sub si la clé primaire est nulle car c'est cela qui provoque cette erreur : "Un index ou une clé principale ne peut contenir une valeur nulle".Citation:
Matricule_Pers étant la clé primaire de ma base Personnel
PS: tu peux poster ta base au format autre que 2000 car les autres forumeurs peuvent lire d'autres formats que mdb
Bien vu Guy !
Meilleurs vœux pour 2019...
salut Claude,
à toi pareillement, accompagné d'une bonne santé !Citation:
Meilleurs vœux pour 2019...
Bonjour,
Je me permets de poursuivre la discussion.
Je veux moi aussi tester des doublons lors d'une saisie mais sur deux variables numériques.
Lorsque je teste sur une seule valeur, la fonction DCount me renvoie bien le résultat attendu.
De même avec l'autre valeur :Code:DCount("*", "TJ_Elève_Responsable_V2", "ID_Elève = " & Me.Id_Elève_Formulaire)
Par contre, je n'arrive pas à faire le test sur les deux valeurs :Code:DCount("*", "TJ_Elève_Responsable_V2", "ID_Responsable = " & lstResults.Column(0))
J'ai comme message d'erreur "incompatibilité de type".Code:DCount("*", "TJ_Elève_Responsable_V2", "ID_Elève = " & Me.Id_Elève_Formulaire And "ID_Responsable = " & lstResults.Column(0))
Est-ce que vous auriez une idée ?
Merci d'avance.
Ed
Bonjour,
Plutôt ceci comme syntaxe :
Code:DCount("*", "TJ_Elève_Responsable_V2", "ID_Elève = " & Me.Id_Elève_Formulaire & " And ID_Responsable = " & lstResults.Column(0))
Ca marche.
Merci beaucoup !
Ed
Voici la solution que j'ai testé sur ma table Access et qui fonctionne parfaitement à vous d'adapter les noms table requête et champs :
Détecter Doublon sur champ Calculé de ma table Dépenses Charges Syndic
Dans cette table, créer un champs calculé "DetectDoublon" qui concatène certains champs dans leur ordre de saisie :
Ensuite créer une requête "Doublons pour Dépenses Charges SyndicReq" qui Recherche les doubons sur le champs "DetectDoublon" de cette table :Code:Année([Date dépenses]) & "-" & [Libellé] & "-" & [Réf A-P Syndic]
Code:
1
2
3
4 SELECT [Dépenses Charges Syndic].DetectDoublon, [Dépenses Charges Syndic].Libellé, [Dépenses Charges Syndic].[Réf A-P Syndic], [Dépenses Charges Syndic].[Date dépenses] FROM [Dépenses Charges Syndic] WHERE ((([Dépenses Charges Syndic].DetectDoublon) In (SELECT [DetectDoublon] FROM [Dépenses Charges Syndic] As Tmp GROUP BY [DetectDoublon] HAVING Count(*)>1 ))) ORDER BY [Dépenses Charges Syndic].DetectDoublon;
Ensuite dans le formulaire adossé à la saisie des datas de cette table ;
dans l'évènement Après mise à jour du dernier champs saisi en l'occurrence le champ "Réf A-P Syndic"
je rentre ce code VBA :
Code:
1
2
3
4
5
6 Private Sub Réf_A_P_Syndic_AfterUpdate() If DCount("*", "Doublons pour Dépenses Charges SyndicReq", Me.DetectDoublon) > 0 Then MsgBox "Cet ajout ferait un doublon !", vbCritical Cancel = True End If End Sub
bonsoir traderpierre,
sauf que dans ton code tu utilises l'évènement After_Update qui est déclenché après la mise à jour (comme son nom l'indique). Donc en cas d'erreur le Cancel = True n'aura aucun effet, la saisie est déjà validée.Citation:
Voici la solution que j'ai testé sur ma table Access et qui fonctionne parfaitement à vous d'adapter les noms table requête et champs :
Il faudrait mettre le code dans l'évènement Before_Update du formulaire: c'est l'évènement qui se déclenche avant de passer à l'enregistrement suivant en formulaire unique.
D'autre part je ne comprend pas à quoi sert Me.DetectDoublon ici:
normalement le paramètre Critères doit contenir un critère de sélection "Champ1= " & UneVariable ou "Champ2 <> 0" etc...Code:DCount("*", "Doublons pour Dépenses Charges SyndicReq", Me.DetectDoublon) > 0