[Access]création de valeur à partir de 2 autr

Fermé
babouone Messages postés 19 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 21 juillet 2008 - 5 déc. 2007 à 11:36
hervelot Messages postés 535 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 20 mars 2008 - 7 déc. 2007 à 15:46
Bonjour a tous.

Je voudrais pouvoir automatiser la création d'une valeur à partir de 2 autres valeurs :
Mes 2 valeurs sont : "Numéro" et "Indice".
Indice ne devra pas avoir de doublon.
Ma valeur automatisé : "N°plan"

La valeur automatisé (N°plan) sera sous la forme de "Numéro - indice" (avec respect des espaces et du "-").

Le but de la manoeuvre permettra à un utilisateur de ne pas faire de faute de saisie dans la valeur N°plan ainsi que de mettre automatiquement cette valeur dans un sous formulaire à chaque nouvelle ligne.

Merci de votre aide. Si vous avez des question, n'hésitez pas.
A voir également:

13 réponses

phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
6 déc. 2007 à 16:52
dans une texte box non liés tapes :

=[Numéro] & " - " & [indice]
0
babouone Messages postés 19 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 21 juillet 2008 1
7 déc. 2007 à 10:11
Merci Phil232 pour la synthaxe !

Par contre cette valeur est dans une table et l'affichage est fait par un sous-formulaire. Ou je peux indiquer =[Numéro] & " - " & [indice] alors ?
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
7 déc. 2007 à 11:11
Fait tomber une texte box (champ de saisie ?) sur la forme. En mode Design tape directement dans ce champ "=[Numéro] & " - " & [indice]" (attention, les deux champs doivent être present dans la requête pour la forme). Alternativement tu utilise une requête et dans la grille où tu définis les champs à afficher tu va sur une colonne vide et au lieu de choisir un champ dans la liste tu tape [Numéro] & " - " & [indice]. Les deux opérations générent un champ appelé "champ calculé". Logiquement il ne peut pas être modifié (je crois c'est ce que tu cherche).
0
hervelot Messages postés 535 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 20 mars 2008 123
7 déc. 2007 à 11:45
Bonjour,

Je reprends, tu as 2 valeurs numéro et indice à partir desquelles tu veux créer n° plan. Ces 3 valeurs sont dans la même table.

Ton but : dans un formulaire quand on saisie numéro et indice la valeur de n° plan est généré automatiquement

Ai-je bien résumé

C'est pour que je sois sur de la solution à apporter
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
7 déc. 2007 à 11:57
D'accord. Mais c'est redondant de stocker n° plan vu qu'il peut etre généré à n'importe quel moment.

Ceci demande donc d'utiliser des évenements, mais attention : vu que ce sont 2 champs ça va etre rigolo de gérer ça. Je te fournirait donc pas toute la soluce car ça prend un peu de temps d'implementer ça de façon que ce soit "fool proof"

txtIndex_OnExit

if txtIndex = "" then Exit sub

if txtNumber <> "" then
txtPlan = txtNumber & " - " & txtIndex
endif

end sub

txtNumber_OnExit

if txtNumber = "" then Exit sub

if txtIndex <> "" then
txtPlan = txtNumber & " - " & txtIndex
endif

end sub


Après on doit éventuellement jouer avec OnLostFocus, OnChange, OnKeyPress etc. Mais pour un début ça devrait déjà marcher.
0
hervelot Messages postés 535 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 20 mars 2008 123
7 déc. 2007 à 13:00
D'accord. Mais c'est redondant de stocker n° plan vu qu'il peut etre généré à n'importe quel moment.

Oui mais cela peut-être très utile pour faire des recherches
0
babouone Messages postés 19 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 21 juillet 2008 1
7 déc. 2007 à 12:02
@ Hervelot :

Mon but : dans un formulaire, lorsque l'on crée une nouvelle ligne (ajout de donnée), le n°plan est généré automatiquement.

Mon autre numéro étant un numéro d'affaire (un numéro d'affaire peut contenir plusieurs n°plan pour donner un exemple).
L'indice doit etre etre unique par numéro de plan.

Mon numéro de plan et numéro d'affaire sont dans la meme table, l'indice peut y etre ajouter pour facilité le probleme.

Exemple
Numéro d'affaire : A8
le premier numéro de plan sera égal à : A8 - 1
le deuxième " " " " : A8 - 2
etc.

j'espère que l'exemple vous aidera dans la compréhension.

@Phil232, je verais cette aprem après mangé.
0
hervelot Messages postés 535 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 20 mars 2008 123
7 déc. 2007 à 14:36
Cela veut dire que pour une meme affaire tu as plusieurs plans
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
7 déc. 2007 à 12:08
donc txtIndex se rempli aussi automatiquement si je comprends bien dans ce cas il faudrait faire une requête du genre

SELECT ISNULL(Max(Index) + 1, 1) FROM MyTable WHERE N°Affaire = 'A8'

et puis transférer le resultat dans txtIndex
0
babouone Messages postés 19 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 21 juillet 2008 1
7 déc. 2007 à 13:46
Merci pour votre aide à tous les deux. Comme je suis un jeune adpete de Access, je ne comprend malheuresement pas tout à vos explications. Je comprend bien la logique adopté pour conclure ce probleme,mais la réalisation peine. J'ai pour habite de travailler sur le mode "création", que sa soit sur les requêtes ou les actions (le moins de VB possible et SQL).
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
7 déc. 2007 à 14:05
Dans

SELECT ISNULL(Max(Index) + 1, 1) FROM MyTable WHERE N°Affaire = '" & Forms!MyFormDeSaisie!MonChampAvecLeNuméroDAffaire
& "'"'

il suffit de remplacer "Index" par le nom de champ qui contient l'Indice, "N°Affaire" par le nom de champ qui contient ce numéro et "MyTable" c'est le nom de la table (n'est ce pas ? :). Bien sur "MyFormDeSaisie" c'est le nom de la forme avec le champ automatique, et (faut-il que je le dise ?) "MonChampAvecLeNuméroDAffaire" c'est bein sur le nom du champ qui contien le numéro d'affaire.

Puis dans la requête tu va en mode SQL et tu copie/paste le select adapté à ta bdd. Ca devrait marcher du coup
0
babouone Messages postés 19 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 21 juillet 2008 1
7 déc. 2007 à 14:49
Phil232 je te remercie beacoup pour les explications, mais j'ai pas tout compris *honte* . Donc résumons.

SELECT ISNULL(Max(Index) + 1, 1) FROM MyTable
ça, c'est bon, j'ai compris :)

WHERE N°Affaire = '" & Forms!MyFormDeSaisie!MonChampAvecLeNuméroDAffaire
& "'"'
N°Affaire, je l'ai remplacé, y'a pas de problème la dessus.

Par contre la, sa se complique : '" & Forms!MyFormDeSaisie!MonChampAvecLeNuméroDAffaire & "'"'
Le MyFormDeSaisie correspond au nom de mon formulaire ?
MonChampAvecLeNuméroDAffaire correspond aux nom du champ N°Affaire ?

J'ai bien C/C le tout et adapter (comme je pense), mais j'ai une erreur une erreur de syntaxe.

Pour expliquer au mieux, et pour éviter de te faire perdre de temps surtout. Voila un petit dessin résumant au mieux le probleme.

N°Affaire| N°plan|Bla Bla|indice (facultatif a l'affichage
...A42....|A42 - 1| ...... |......... 1
...A42....|A42 - 2| ...... |......... 2
Ceci est un sous-formulaire :)

Si l'utilisateur rajoute une ligne dans le sous-formulaire (la ligne d'écriture avec une petite "*"), le N°plan doit y etre affiché.
Le N°Affaire est sélétionné via une liste de choix par l'utilisateur. Donc suivant son choix le N°d'affaire changera (A 82 etc..)

En espérant avoir été le plus clair possible avec mes maigres qualité de dessin :)
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
7 déc. 2007 à 15:07
faudrait savoir un peu plus à propos de l'erreur. Malheureusement, je n'ai pas d'Access au boulot.

Donc, j'avais oublié qu'il s'agit d'un sous-formulaire

Forms!MyMainFormDeSaisie!MySubFormDeSaisie.Form!MonChampAvecLeNuméroDAffaire

https://support.microsoft.com/en-us/help/113352

Mais bien sur l'utilisateur doit d'abord choisr dans la liste et seulement après il peut ajouter une ligne dans la subform sinon logiquement il y a un grand risque la requête utilise le mauvais n° d'affaire. On pourrait éventuellement mettre la création de la nouvelle ligne et la recherche d'indice sur un event OnClick/OnChange
0
hervelot Messages postés 535 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 20 mars 2008 123
7 déc. 2007 à 15:45
Vu sous cet angle, tu ne dois pas stocker le n° Affaire et le n° de plan dans la même table (base d'un SGBDR - redondance n° affaire)

Cré une table affaire dans laquelle tu mets les infos concernant l'affaire - tu peux mettre en clé le n°affaire (unique)

Cré une table plan dans laquelle tu mets les infos concernant le plan (n° de plan + clé étrangère sur n°affaire)

Ton formulaire principal aura en source la table Affaire, ton sous formulaire aura en source la table plans
0
hervelot Messages postés 535 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 20 mars 2008 123
7 déc. 2007 à 15:46
j'ai fait une maquette que je peux t'envoyer et tu pourras me dire si c'est dans l'esprit de ton projet
0