Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

access - Champs code client calculé ?

16 réponses
Avatar
pachanours
Access 2007
J'ai une table client. Je souhaiterai créer un code client (clé primaire)
regroupant automatiquement les 3premières lettres du nom du client et les 3
premières lettres de son pays.
Est-ce possible ? je n'ai pas trouvé
Merci pour votre aide

10 réponses

1 2
Avatar
Fred
Bonjour aussi ;-)

Il n'est à priori pas judicieux de créer un code constitué d'éléments déjà
existants.
Il vaut mieux le construire dans un champ calculé par une concaténation du
style : format([Code_Client],"000000") & left$([Nom_Client],3) &
left$([Pays_Client],3)
Dans une requête ou propriété de contrôle, tu remplaceras les virgules par
des point-virgules.

Fred


"pachanours" a écrit dans le message
de news:
Access 2007
J'ai une table client. Je souhaiterai créer un code client (clé primaire)
regroupant automatiquement les 3premières lettres du nom du client et les
3
premières lettres de son pays.
Est-ce possible ? je n'ai pas trouvé
Merci pour votre aide


Avatar
Tisane
Bonjour pachanours,

Access 2007
J'ai une table client. Je souhaiterai créer un code client (clé
primaire) regroupant automatiquement les 3premières lettres du nom du
client et les 3 premières lettres de son pays.
Est-ce possible ? je n'ai pas trouvé


A la remarque de Fred, j'ajouterai que faire une clé primaire (donc sans
doublon) avec les 3 premières des nom et pays, cela me paraît insuffisant.
Au hasard : DUPFRA, à mon avis tu risques les doublons (dupont, dupin,
etc.).

--
Tisane

Avatar
pachanours
OK Je vous remercie tous les 3 pour votre aide, j'ai bien compris le pb, donc
je vais créer mon code client sous la fome client nom, client pays et num
auto. (mais est-il possible de ne prendre que les 3 ou 4 premières lettres
des deux champs concernés, sinon le code client serait trop long ?)
J'ai donc ouvert mon formulaire, cliqué sur le champs code client,
événement, après maj, là j'ai rentré l'expression, mais la syntaxe n'est pas
correcte.
Est-ce la bonne procédure ?
ou faut-il que je passe par la fonction requete ?
Lorsque j'active le générateur d'expression, je ne trouve pas cette fonction
fNumAutoTxt (je voulais vérifier ma syntaxe), donc je pense que je ne fais
pas ce qu'il faut faire ..




Bonjour

J'ai une table client. Je souhaiterai créer un code client (clé primaire)
regroupant automatiquement les 3premières lettres du nom du client et les 3
premières lettres de son pays.
Est-ce possible ? je n'ai pas trouvé


Le choix de ton identifiant unique risque de te poser des problèmes comme te
le disais Tisane.
L'alternative consiste à rajoute au bout de ton identifiant une valeur
numérique qui s'incrémenterai automatiquement.

Tu trouveras ce qu'il te faut ici :
http://access.fr.free.fr/articles.php?lng=fr&pg1

Il te suffit de mettre sur les événements après mise à jour des contrôles
Clients et Pays, le code suivant :

CodeClient = fNumAutoTxt ("TaTable", "CodeClient", Me.NomClient & Me.Pays, 5)

PS : Le 5 permet d'avoir 99999 possibilité pour le même nom de client d'un
même pays, tu peux mettre plus ou moins...

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



Avatar
Jessy Sempere
Bonjour

OK Je vous remercie tous les 3 pour votre aide, j'ai bien compris le pb, donc
je vais créer mon code client sous la fome client nom, client pays et num
auto. (mais est-il possible de ne prendre que les 3 ou 4 premières lettres
des deux champs concernés, sinon le code client serait trop long ?)
J'ai donc ouvert mon formulaire, cliqué sur le champs code client,
événement, après maj, là j'ai rentré l'expression, mais la syntaxe n'est pas
correcte.
Est-ce la bonne procédure ?
ou faut-il que je passe par la fonction requete ?


En fait, tu dois copier dans un module standard de ta base de donnée le code
que je t'ai donné...

Ensuite, tu dois mettre dans ton formulaire sur l'événement "après mise à
jour" de tes contrôles "NomClient" et "PaysClient" la synthaxe suivante :

me.CodeClient = fNumTxtAuto ("TaTableClient", "CodeClient",
Left(NomClient,3) & Left(Pays,3), 4)

Biensûr remplaces par les bons noms de tables, de champs et de contrôles de
formulaire.

Lorsque j'active le générateur d'expression, je ne trouve pas cette fonction
fNumAutoTxt (je voulais vérifier ma syntaxe), donc je pense que je ne fais
pas ce qu'il faut faire ..


Tu la trouveras dans le repertoire fonction et ensuite le répertoire du nom
de ta base.

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------

Avatar
Eric
Bonsoir,

Dans l'onglet Modules de la bd, tu fais Nouveau et colles le code donné
par Jessy. Tu sauves le module (en lui attribuant un nom commencant par
les caractères 'm o d' du genre modMesFonctions). Pour la suite, tu fais
ce que t'a indiqué Jessy.

Merci bcp Jessy pour ton aide, mais ma question va peut être te paraître très
stupide, mais comment fait on pour créer un module standard ?
je pensais qu'il fallait créer le champs code client, et rentrer cette
fonction mais à priori j'ai tout faux ?? ?



Bonjour

OK Je vous remercie tous les 3 pour votre aide, j'ai bien compris le pb, donc
je vais créer mon code client sous la fome client nom, client pays et num
auto. (mais est-il possible de ne prendre que les 3 ou 4 premières lettres
des deux champs concernés, sinon le code client serait trop long ?)
J'ai donc ouvert mon formulaire, cliqué sur le champs code client,
événement, après maj, là j'ai rentré l'expression, mais la syntaxe n'est pas
correcte.
Est-ce la bonne procédure ?
ou faut-il que je passe par la fonction requete ?
En fait, tu dois copier dans un module standard de ta base de donnée le code

que je t'ai donné...

Ensuite, tu dois mettre dans ton formulaire sur l'événement "après mise à
jour" de tes contrôles "NomClient" et "PaysClient" la synthaxe suivante :

me.CodeClient = fNumTxtAuto ("TaTableClient", "CodeClient",
Left(NomClient,3) & Left(Pays,3), 4)

Biensûr remplaces par les bons noms de tables, de champs et de contrôles de
formulaire.

Lorsque j'active le générateur d'expression, je ne trouve pas cette fonction
fNumAutoTxt (je voulais vérifier ma syntaxe), donc je pense que je ne fais
pas ce qu'il faut faire ..
Tu la trouveras dans le repertoire fonction et ensuite le répertoire du nom

de ta base.

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Avatar
pachanours
Merci Eric pour ton aide. En fait il fallait que je clique sur le bouton
macro, et là j'avais accès au module, créer ....

Donc, j'ai créé un nouveau module, cela m'a ouvert une fenetre vb avec mon
projet de bdd, et un dossier module avec le module que je dois créer.
dans cette fenetre j'ai donc écrit la syntaxe suivante :

Option Compare Database
CodeClient = fNumAutoTxt("Table Liste Clients", "Code Client", Me.ClientNom
& Me.ClientPays, 5)

et j'ai fermé le module.

Ma 1ère question est : est-ce correct ? n'y a-t-il pas un syntaxe pour finir
le module ?

Après je suis retournée dans mon formulaire en mode création, dans les
champs ClientNom et ClientPays, evènement, après MAJ, j'ai rentré la syntaxe
suivante :

me.CodeClient = fNumTxtAuto ("Table Liste Clients", "CodeClient",
Left(ClientNom,3) & Left(ClientPays,3), 4)

et là j'ai ce message d'erreur :
"une erreur est survenue lors de la compilation de cette fonction, le module
Visual Basic comporte une erreur de syntaxe, vérifiez le code puis
recompilez-le"

Merci d'avance,



Bonsoir,

Dans l'onglet Modules de la bd, tu fais Nouveau et colles le code donné
par Jessy. Tu sauves le module (en lui attribuant un nom commencant par
les caractères 'm o d' du genre modMesFonctions). Pour la suite, tu fais
ce que t'a indiqué Jessy.

Merci bcp Jessy pour ton aide, mais ma question va peut être te paraître très
stupide, mais comment fait on pour créer un module standard ?
je pensais qu'il fallait créer le champs code client, et rentrer cette
fonction mais à priori j'ai tout faux ?? ?



Bonjour

OK Je vous remercie tous les 3 pour votre aide, j'ai bien compris le pb, donc
je vais créer mon code client sous la fome client nom, client pays et num
auto. (mais est-il possible de ne prendre que les 3 ou 4 premières lettres
des deux champs concernés, sinon le code client serait trop long ?)
J'ai donc ouvert mon formulaire, cliqué sur le champs code client,
événement, après maj, là j'ai rentré l'expression, mais la syntaxe n'est pas
correcte.
Est-ce la bonne procédure ?
ou faut-il que je passe par la fonction requete ?
En fait, tu dois copier dans un module standard de ta base de donnée le code

que je t'ai donné...

Ensuite, tu dois mettre dans ton formulaire sur l'événement "après mise à
jour" de tes contrôles "NomClient" et "PaysClient" la synthaxe suivante :

me.CodeClient = fNumTxtAuto ("TaTableClient", "CodeClient",
Left(NomClient,3) & Left(Pays,3), 4)

Biensûr remplaces par les bons noms de tables, de champs et de contrôles de
formulaire.

Lorsque j'active le générateur d'expression, je ne trouve pas cette fonction
fNumAutoTxt (je voulais vérifier ma syntaxe), donc je pense que je ne fais
pas ce qu'il faut faire ..
Tu la trouveras dans le repertoire fonction et ensuite le répertoire du nom

de ta base.

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






Avatar
Eric
Bonjour,


Merci Eric pour ton aide. En fait il fallait que je clique sur le bouton
macro, et là j'avais accès au module, créer ....


Pourquoi passer par Macro pour arriver à un module global ?

Donc, j'ai créé un nouveau module, cela m'a ouvert une fenetre vb avec mon
projet de bdd, et un dossier module avec le module que je dois créer.
Option Compare Database
CodeClient = fNumAutoTxt("Table Liste Clients", "Code Client", Me.ClientNom
& Me.ClientPays, 5)
Ma 1ère question est : est-ce correct ? n'y a-t-il pas un syntaxe pour finir le module ?


Non, dans le module global sous Option Compare Database,
tu copies le code de la fonction donnée par Jessy à cette
adresse: http://access.fr.free.fr/articles.php?lng=fr&pg1
Tu sauves le module et retournes dans l'interface d'Access.

Après je suis retournée dans mon formulaire en mode création, dans les
champs ClientNom et ClientPays, evènement, après MAJ, j'ai rentré la syntaxe
suivante :

me.CodeClient = fNumTxtAuto ("Table Liste Clients", "CodeClient",
Left(ClientNom,3) & Left(ClientPays,3), 4)


Ca, c'est très bien.
...
--

A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Eric
Bonjour,

Option Compare Database est écrit par défaut dans les modules
Option Explicit non mais c'est à demander dans le Menu Outils|Options de
l'interface VB, Onglet Editeur - Cocher Déclarations des variables
obligatoire.

Une copie d'écran là : http://cjoint.com/?bws4stozP3

PS: lors de la copie de la fonction à partir du site de Jessy, la 1ere
ligne Function fNumAutoTxt était en rouge en raison de caractères
supplémentaires récupérés sur le site (des tirets), les enlever.

Alors après plusieurs essais... je pense que je fais une mauvaise manip.
Je m'explique, j'ai donc créé mon module mais voici ma 1ère question :

Non, dans le module global sous Option Compare Database,
tu copies le code de la fonction donnée par Jessy à cette
adresse: http://access.fr.free.fr/articles.php?lng=fr&pg1
Tu sauves le module et retournes dans l'interface d'Access.

Moi j'ai créé un module, là une fenetre s'ouvre, "microsoft visual basic"

avec une arborescence avec le nom de ma base, un sous-répertoire avec les
objets de classe (formulaires) et un sous-répertoire modules (où j'ai
sauvegardé mon module MOD mes funtioncs) - où se trouve "l'option compare
database" ?

après j'ai copié la fonction donnée par Jessy , j'ai rentré dans mon
formulaire des syntaxes... mais rien ne se passe

Désolée, mais je ne maitrise pas encore clairement les modules, je comprends
les syntaxes, mais la dernière fois que j'ai utilisé access, c'était les
toutes premières versions, et là j'ai un peu de mal à m'y retrouver avec
toutes ses fenêtres..




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr


Avatar
Eric
re,

Où mets-tu ce code ?
Bien sur l'évènement Après Mise à jour des contrôles NomClient et
PaysClient et pas dans le module où tu as copié le code de Jessy.

Tu devrais avoir une procédure du genre:
Private Sub NomClient_AfterUpdate()
me.CodeClient = fNumTxtAuto ("Table Liste Clients", "CodeClient",
Left(NomClient,3) & Left(PaysClient,3),4)
End Sub

Idem pour PaysClient

Merci Eric pour ton aide,

Donc j'ai bien tout rentré, mais maintenant j'ai ce message d'erreur lors
de la mise à jour des champs :

access ne peut pas trouver la macro me

j'ai rentré la ligne suivante :
me.CodeClient = fNumTxtAuto ("Table Liste Clients", "CodeClient",
Left(client Nom,3) & Left(client pays,3),4)

dans évenement, après maj.
Que dois-je faire d'autre ?
--

A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Jessy Sempere
Bonjour

Il ne s'agit pas d'écrire la synthaxe sur la propriété du formulaire mais
dans le code de la propriété de ce formulaire.

Quand tu es en création, lorsque tu vas dans la propriété, tu as à droite, 3
petit point pour générer, il te suffit de cliquer dessur et ensuite de
sélectionner générateur de code.

Ensuite, il te suffit de copier la synthaxe, et au final dans ton module,
comme le disais Eric, tu dois avoir :

Private Sub NomClient_AfterUpdate()
me.CodeClient = fNumTxtAuto ("Table Liste Clients", "CodeClient",
Left(NomClient,3) & Left(PaysClient,3),4)
End Sub

Private Sub PaysClient_AfterUpdate()
me.CodeClient = fNumTxtAuto ("Table Liste Clients", "CodeClient",
Left(NomClient,3) & Left(PaysClient,3),4)
End Sub

Par contre, j'ai vu que tu avais des espaces dans ton nom de tables, du coup
j'ai modifié le code de mon site...
La modif consiste à remplacer la ligne :
strRst = "Select [" & strFldAuto & "] From " & strTbl & " ORDER BY [" &
strFldAuto & "];"
par :
strRst = "Select [" & strFldAuto & "] From [" & strTbl & "] ORDER BY [" &
strFldAuto & "];"

Il manquait des crochets pour encadrer le nom des tables avec crochets.

@+
Jessy Sempere

------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"pachanours" a écrit dans le message
de news:
Oui oui bien sur, pour une fois, j'ai bien relu plusieurs fois,
dans mon formulaire, en mode création, j'ai cliqué sur le controle
nomclient, feuille de propriété, onglet évènement, après MAJ, j'ai rentré
la
syntaxe.

Je viens de vérifier à nouveau, et de créer une nouvelle fiche, j'ai tjs
le
mess d'erreur

Devant la syntaxe, il n'y a rien, aucun signe ou ponctuation ?




re,

Où mets-tu ce code ?
Bien sur l'évènement Après Mise à jour des contrôles NomClient et
PaysClient et pas dans le module où tu as copié le code de Jessy.

Tu devrais avoir une procédure du genre:
Private Sub NomClient_AfterUpdate()
me.CodeClient = fNumTxtAuto ("Table Liste Clients", "CodeClient",
Left(NomClient,3) & Left(PaysClient,3),4)
End Sub

Idem pour PaysClient

Merci Eric pour ton aide,

Donc j'ai bien tout rentré, mais maintenant j'ai ce message d'erreur
lors
de la mise à jour des champs :

access ne peut pas trouver la macro me

j'ai rentré la ligne suivante :
me.CodeClient = fNumTxtAuto ("Table Liste Clients", "CodeClient",
Left(client Nom,3) & Left(client pays,3),4)

dans évenement, après maj.
Que dois-je faire d'autre ?
--

A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






1 2