OVH Cloud OVH Cloud

Problème de procédure...Vérifier doublons

1 réponse
Avatar
Butch
Bonjour,
(Logiciel : Access XP)

J'ai placé la procédure suivante dans la propriété SurSortie dans un
contrôle nommé Code_Client d'un formulaire:

Private Sub Code_Client_Exit(Cancel As Integer)
If DCount("[Code_Client]", "TablePrincipale", "[Code_Client]='" &
Me.Code_Client & "'") > 0 Or DCount("[Code_Client]", "TableSecondaire",
"[Code_Client]='" & Me.Code_Client & "'") > 0 Then
MsgBox Me.[Code_Client] & "Existe déjà"
Cancel = True
End If
End Sub

L'objectif de cette procédure était de vérifier si un Code Client existe
déjà soit dans la table Principale ou dans la table Secondaire de la BD.
Il est à noter que ce Code Client est créé automatiquement par une macro qui
extrait les 4 premiers caractères du nom de famille et le premier du prénom
d'un client. Ex: Bergevin Claude aura pour code BERGC. Ce code client,
dans la table sous-jacente au formulaire possède aussi une clé primaire .
J'aurais aimé que la vérification et le message "d'erreur" se fassent ( et
s'affichent) dès la sortie du champ Code Client et non seulement au prochain
enregistrement comme cela se fait habituellement avec la clé primaire (sans
procédure particulière).

Je croyais avoir résolu mon problème p.c.q. le message s'affiche lorsque
j'inscris un nom de famille et un prénom dans le formulaire puis passe au
champ Code Client (avec TAB, par exemple). Le Code Client est toujours créé
automatiquement... mais ... le problème est là!

Le message "d'erreur" défini dans la procédure ci-dessus, s'affiche même si
aucun Code Client identique n'existe dans la table Principale ou la
Secondaire de la BD! Le message "d'erreur" s'affiche cependant dès la
sortie du champ, comme voulu!
En d'autres mots...ça plante, peu importe les noms et prénoms inscrits donc,
le code client créé!!

P.-S: La procédure décrite plus haut m'a été suggérée par un collaborateur
au forum (Éric..), que je remercie encore. Mais, j'ai probablement omis
certains détails dans ma demande précédente sur ce forum... je refais une
demande en espérant être plus explicite cette fois!

J'ai aussi essayé de mettre la procédure dans une autre propriété de mon
contrôle Code_Client(ex: AvantMAJ - AprèsMAJ) mais là, le message défini
dans la procédure ne s'affiche pas. Il y a seulement le message habituel de
Access lorsqu'il y a doublons sur le Code Client et, à ce moment, la
vérification semble se faire seulement sur la table Principale.

Que faire? Merci à l'avance.
Butch

1 réponse

Avatar
Eric
Bonjour Butch,

L'appel de la création du code_client doit se faire sur l'évènement Avant
Mise à jour du controle Prénom. L'affectation uniquement si pas de
doublon. Je pense que tu crées et affectes immédiatement d'où ton
problème

Dans Prenom_BeforeUpdate, tu crées et affectes le code client à une
variable (par ex: codeclt) puis tu vas regarder si, dans les tables
tableprincipale et tablesecondaire, ce code créé n'existe pas déjà. Si
c'est le cas, tu envoies le message d'erreur sinon tu l'affectes au champ
Code_Client.

Tu ne dois pas rentrer dans le champ Code_Client car il est élaboré
automatiquement. Pas de procédure de vérification sur ce champ, cela doit
être fait avant.

Pour mémoire:

Private Sub Prenom_BeforeUpdate(Cancel As Integer)
Dim codeclt as String
' Création du code
codeclt = Left(UCase(Nom), 4) & Left(UCase(Prenom), 1)
' on verifie l'existence de codeclt dans les tables
If DCount("[Code_Client]", "TablePrincipale", "[Code_Client]='" & _
codeclt & "'") > 0 Or DCount("[Code_Client]", "TableSecondaire", _
"[Code_Client]='" & codeclt & "'") > 0 Then
MsgBox Me.[Code_Client] & "Existe déjà"
Cancel = True
Else
Me.Code_Client = codeclt
End If
End Sub

Elimines la procédure Private Sub Code_Client_Exit(Cancel As Integer).
N'utilises pas ta macro et testes cette procédure. Ca devrait répondre à
ton besoin. Tiens moi au courant.

A+
Eric



"Butch" écrivait
news:oqDEc.155999$:

Bonjour,
(Logiciel : Access XP)

J'ai placé la procédure suivante dans la propriété SurSortie dans un
contrôle nommé Code_Client d'un formulaire:

Private Sub Code_Client_Exit(Cancel As Integer)
If DCount("[Code_Client]", "TablePrincipale", "[Code_Client]='" &
Me.Code_Client & "'") > 0 Or DCount("[Code_Client]",
"TableSecondaire", "[Code_Client]='" & Me.Code_Client & "'") > 0 Then
MsgBox Me.[Code_Client] & "Existe déjà"
Cancel = True
End If
End Sub

L'objectif de cette procédure était de vérifier si un Code Client
existe déjà soit dans la table Principale ou dans la table Secondaire
de la BD. Il est à noter que ce Code Client est créé automatiquement
par une macro qui extrait les 4 premiers caractères du nom de famille
et le premier du prénom d'un client. Ex: Bergevin Claude aura pour
code BERGC. Ce code client, dans la table sous-jacente au formulaire
possède aussi une clé primaire . J'aurais aimé que la vérification et
le message "d'erreur" se fassent ( et s'affichent) dès la sortie du
champ Code Client et non seulement au prochain enregistrement comme
cela se fait habituellement avec la clé primaire (sans procédure
particulière).

Je croyais avoir résolu mon problème p.c.q. le message s'affiche
lorsque j'inscris un nom de famille et un prénom dans le formulaire
puis passe au champ Code Client (avec TAB, par exemple). Le Code
Client est toujours créé automatiquement... mais ... le problème est
là!

Le message "d'erreur" défini dans la procédure ci-dessus, s'affiche
même si aucun Code Client identique n'existe dans la table Principale
ou la Secondaire de la BD! Le message "d'erreur" s'affiche cependant
dès la sortie du champ, comme voulu!
En d'autres mots...ça plante, peu importe les noms et prénoms inscrits
donc, le code client créé!!

P.-S: La procédure décrite plus haut m'a été suggérée par un
collaborateur au forum (Éric..), que je remercie encore. Mais, j'ai
probablement omis certains détails dans ma demande précédente sur ce
forum... je refais une demande en espérant être plus explicite cette
fois!

J'ai aussi essayé de mettre la procédure dans une autre propriété de
mon contrôle Code_Client(ex: AvantMAJ - AprèsMAJ) mais là, le message
défini dans la procédure ne s'affiche pas. Il y a seulement le
message habituel de Access lorsqu'il y a doublons sur le Code Client
et, à ce moment, la vérification semble se faire seulement sur la
table Principale.

Que faire? Merci à l'avance.
Butch