Alerte doublon sur champ calculé

Résolu/Fermé
traderpierre Messages postés 291 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 6 janvier 2024 - Modifié le 18 avril 2020 à 02:14
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 18 avril 2020 à 13:14
Bonjour,

Access ne permettant pas de créer un index sans doublon sur un champ calculé,
j'ai tenté ceci


Dans mon formulaire de saisie des appels de fonds d'un Syndic,
Il y a un appel de fonds par trimestre
En conséquence dans la table à laquelle est adossé mon formulaire
J'ai créé une liste déroulante Champs "Libellé" Qui contient les valeurs suivantes :
1er Appel de Fonds
2ème Appel de fonds
3ème Appel de fonds
4ème Appel de fonds
Avec ensuite un champ "Date dépenses"qui a pour valeur par défaut Maintenant()

Puis un champ calculé "DetectDoublon" (que je rendrai invisible par la suite)
dont la source de contrôle est la suivante : =[Libellé] & Année([Date dépenses])
J'ai vérifié la concanétation fonctionne correctement

Ensuite j'ai créé cet évènement après la mise à jour du champ Libellé

Private Sub Libellé_AfterUpdate()
If DCount(Me.DetectDoublon <> 0) Then
MsgBox "Cet ajout Ferait un doublon !", vbCritical
Cancel = True
End If
End Sub

Avec ou sans doublon j'obtiens cette message Box

Erreur de compilation
Argument non facultatif

Pouvez-vous m'aider, je tourne en rond !!!!



Configuration: Windows / Firefox 75.0
A voir également:

3 réponses

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
18 avril 2020 à 09:01
bonjour, je suppose que DetectDoublon n'est pas un champ d'une table, et est un contrôle dans un formulaire.
as-tu essayé en retirant dcount?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 18 avril 2020 à 09:32
peut-être veux-tu faire ceci:
dcount("Libellé","lenomdelatable", "[Libellé] & Année([Date dépenses]='"& Me.DetectDoublon & "'")

ce que tu peux aussi faire sans le contrôle DetectDoublon.
0
traderpierre Messages postés 291 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 6 janvier 2024 6
18 avril 2020 à 12:57
Votre solution ne fonctionne pas !!!
0
traderpierre Messages postés 291 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 6 janvier 2024 6
18 avril 2020 à 13:02
Je viens de trouver la solution, ça fonctionne super bien !!!
La voici expliquée en détail

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 :

= Année([Date dépenses])&"-"&[Libellé] & "-" & [Réf A-P Syndic]

Ensuite créer une requête "Doublons pour Dépenses Charges SyndicReq" qui Recherche les doubons sur le champs "DetectDoublon" de cette table :
Code Sql :
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'occurence le champ "Réf A-P Syndic"
je rentre ce code VBA :

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

ça fonctionne super bien
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 18 avril 2020 à 13:20
je me demande si tu ne peux pas simplifier ta requête et ne garder que:
SELECT [DetectDoublon],count(*) 
FROM [Dépenses Charges Syndic]  
GROUP BY [DetectDoublon] 
HAVING Count(*)>1

ou même, sans utiliser le champ calculé, qui ne sert peut-être à rien:
SELECT Année([Date dépenses]), [Libellé], Réf A-P Syndic], count(*) 
FROM [Dépenses Charges Syndic]  
GROUP BY  Année([Date dépenses]), [Libellé], Réf A-P Syndic]
HAVING Count(*)>1

dans les deux cas, supprimer la troisième paramètre de dcount
0