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

attribution d'un numéro (existant non utilisé)

3 réponses
Avatar
URIANE
Bonjour,
J'ai une table comme suit, numdossier, numatricule, nom_prénom, nommée
"tb_doss_agts", c'était à l'origine un fichier excel que qq avait construits
il y'a pas mal de temps, donc du numéro 1 au numéro 650, des personnes sont
parties donc à ce jour je me retrouve avec des numéros non utilisés (148)
pour être précise et qui ne se suivent pas tant qu'à faire ! donc les trous
sont aléatoires.
J'ai repris ce fichier excel, que j'ai rapatrié dans ma base access, je
spécifie tout de suite que je ne peux en aucuns cas renuméroter et refaire
cette liste, car elle sert pour le classement de dossiers dans un tourniquet
et ça prendrait trop de temps à refaire tous ces dossiers.
Donc j'ai dans un 1er tps fais une requête pour trouver tous les numéros
vides,j'ai créé une table "tb_numdossier_dispo" j'ai mis tous les
numdossiers non utilisés.
J'ai créé un formulaire d'ajout pour chaque nouvel agent et je voudrais
utiliser les numéros manquants, donc ouvrir mon formulaire en mode ajout, et
après mise à jour de mon champs "nom_prénom" que le 1er numéro libre de ma
"tb_numdossier_dispo" triée par ordre croissant s'inscrive automatiquement
dans mon champs num dossier ...... quand un agent partira son numéro se
libèrera, prendra la suite dans ma liste des num libres et ainsi de
suite.....
Donc je récapitulette, ma table "tb_doss_agts" ou j'ai la liste de tous les
agents répertoriés et classés, ma table "tb_numdossier_dispo" avec un seul
champs "numdossier".... je fais un lien entre les deux tables dans une
requête, ensuite et "pis" après ????
Voili, voila
Merciiiiiiiiiiiiiiiiii

3 réponses

Avatar
Fred.M.
Salut Uriane,
Bon alors il y a une solution mais je crains que ça pique un peu...
En fait plutot que de renseigner tes enregistrements par la "grille"
habituelle, tu vas devoir passer... en SQL !! Pour rappel pour faire une
requête en SQL, tu demandes une nouvelle requête et tu cliques sur la petite
flêche à côté du bouton "mode création" tout à gauche où tu peux choisir
"SQL".
De là pour insérer un nouvel agent dans ta table "tb_doss_agts" avec le 1er
numéro figurant dans ta table "tb_numdossier_dispo", il te faut construire la
requête suivante:
INSERT INTO tb_doss_agts VALUES
((SELECT MIN(numdossier ) FROM tb_numdossier_dispo), numatricule, nom_prénom)

Enfin une fois l'insertion faite, tu peux purger ce n° de ta table avec
DELETE tb_numdossier_dispo WHERE
numdossier = (SELECT MIN(numdossier ) FROM tb_numdossier_dispo)

It should work :-)

Fred.M.


Bonjour,
J'ai une table comme suit, numdossier, numatricule, nom_prénom, nommée
"tb_doss_agts", c'était à l'origine un fichier excel que qq avait construits
il y'a pas mal de temps, donc du numéro 1 au numéro 650, des personnes sont
parties donc à ce jour je me retrouve avec des numéros non utilisés (148)
pour être précise et qui ne se suivent pas tant qu'à faire ! donc les trous
sont aléatoires.
J'ai repris ce fichier excel, que j'ai rapatrié dans ma base access, je
spécifie tout de suite que je ne peux en aucuns cas renuméroter et refaire
cette liste, car elle sert pour le classement de dossiers dans un tourniquet
et ça prendrait trop de temps à refaire tous ces dossiers.
Donc j'ai dans un 1er tps fais une requête pour trouver tous les numéros
vides,j'ai créé une table "tb_numdossier_dispo" j'ai mis tous les
numdossiers non utilisés.
J'ai créé un formulaire d'ajout pour chaque nouvel agent et je voudrais
utiliser les numéros manquants, donc ouvrir mon formulaire en mode ajout, et
après mise à jour de mon champs "nom_prénom" que le 1er numéro libre de ma
"tb_numdossier_dispo" triée par ordre croissant s'inscrive automatiquement
dans mon champs num dossier ...... quand un agent partira son numéro se
libèrera, prendra la suite dans ma liste des num libres et ainsi de
suite.....
Donc je récapitulette, ma table "tb_doss_agts" ou j'ai la liste de tous les
agents répertoriés et classés, ma table "tb_numdossier_dispo" avec un seul
champs "numdossier".... je fais un lien entre les deux tables dans une
requête, ensuite et "pis" après ????
Voili, voila
Merciiiiiiiiiiiiiiiiii





Avatar
Richard_35
Bonjour Urianne et Fred,

Dans ta table "tb_doss_agts", les "trous" existent-ils en tant
qu'enregistrements de la table ?
Autrement dit, s'il y a un "trou" pour le n° 22, les enreg. de la table
"tb_doss_agts" passent du 21 au 23, ou le n° 22 existe-t-il, physiquement,
dans la table ?
Si oui, tout pourrait être gérer dynamiquement, sans passer par la table
"tb_numdossier_dispo", ce qui serait pratique à l'avenir.

D'autre part, il me paraît dangereux de supprimer, physiquement, les
"trous" : si tu as besoin de retrouver les info. concernant une personne
partie, tu vas trouver une autre personne à sa place !... mais bon, seuls
les utilisateurs peuvent te le préciser... mais, couvre toi, et fais-les
signer !... les "trous" ne seront pas récupérables.

Dis-nous,
Richard.


"Fred.M." a écrit dans le message de news:

Salut Uriane,
Bon alors il y a une solution mais je crains que ça pique un peu...
En fait plutot que de renseigner tes enregistrements par la "grille"
habituelle, tu vas devoir passer... en SQL !! Pour rappel pour faire une
requête en SQL, tu demandes une nouvelle requête et tu cliques sur la
petite
flêche à côté du bouton "mode création" tout à gauche où tu peux choisir
"SQL".
De là pour insérer un nouvel agent dans ta table "tb_doss_agts" avec le
1er
numéro figurant dans ta table "tb_numdossier_dispo", il te faut construire
la
requête suivante:
INSERT INTO tb_doss_agts VALUES
((SELECT MIN(numdossier ) FROM tb_numdossier_dispo), numatricule,
nom_prénom)

Enfin une fois l'insertion faite, tu peux purger ce n° de ta table avec
DELETE tb_numdossier_dispo WHERE
numdossier = (SELECT MIN(numdossier ) FROM tb_numdossier_dispo)

It should work :-)

Fred.M.


Bonjour,
J'ai une table comme suit, numdossier, numatricule, nom_prénom, nommée
"tb_doss_agts", c'était à l'origine un fichier excel que qq avait
construits
il y'a pas mal de temps, donc du numéro 1 au numéro 650, des personnes
sont
parties donc à ce jour je me retrouve avec des numéros non utilisés (148)
pour être précise et qui ne se suivent pas tant qu'à faire ! donc les
trous
sont aléatoires.
J'ai repris ce fichier excel, que j'ai rapatrié dans ma base access, je
spécifie tout de suite que je ne peux en aucuns cas renuméroter et
refaire
cette liste, car elle sert pour le classement de dossiers dans un
tourniquet
et ça prendrait trop de temps à refaire tous ces dossiers.
Donc j'ai dans un 1er tps fais une requête pour trouver tous les numéros
vides,j'ai créé une table "tb_numdossier_dispo" j'ai mis tous les
numdossiers non utilisés.
J'ai créé un formulaire d'ajout pour chaque nouvel agent et je voudrais
utiliser les numéros manquants, donc ouvrir mon formulaire en mode ajout,
et
après mise à jour de mon champs "nom_prénom" que le 1er numéro libre de
ma
"tb_numdossier_dispo" triée par ordre croissant s'inscrive
automatiquement
dans mon champs num dossier ...... quand un agent partira son numéro se
libèrera, prendra la suite dans ma liste des num libres et ainsi de
suite.....
Donc je récapitulette, ma table "tb_doss_agts" ou j'ai la liste de tous
les
agents répertoriés et classés, ma table "tb_numdossier_dispo" avec un
seul
champs "numdossier".... je fais un lien entre les deux tables dans une
requête, ensuite et "pis" après ????
Voili, voila
Merciiiiiiiiiiiiiiiiii







Avatar
pgz
Bonsoir.

Si tes numéros de dossiers se suivent, je te conseillerais ceci :
1. Dans la table des agents d'ajouter une clé propre = num auto. Tu as alors
: IdAgent, NumDossier, Matricule, ...
2. Tu laissses tomber la table des numéros de dossier dispos
3. Dans ton formulaire tu crées une procédure évènementielle après mise à
jour du nom, du genre :
************
sub Nomagent_AfterUpdate
if IsNull(me.NumDossier) then me.NumDossier = fctNumDossier
end sub
************

avec:
**************
Public function fctNumDossier() as long
dim db as DAO.DataBase, rst as DAO.RecordSet, lng1 as long, lng2 as long

set db = Application.CurrentDb
set rst = db.Openrecordset("SELECT * FROM tblAgents ORDER BY NumDosssier;",
dbOpenDynaset)

lng1 = 0
lng2 = 0

While (not rst.EOF) and (lng = 0)
lng2 = lng2 +1
if rst("NumDossier") > lng2 then lng1 = lng2
rst.movenext
wend

rst.close
set rst = nothing
set db = Nothing

fctNumDossier = lif(lng1=0,lng2+1,lng1)
End function
**************************
Juste pour l'idée, à mettre au point, bien sûr.
En espérant que cela t'aide,


--
pgz

"Ce qui se conçoit mal s''exprime obscurément et les mots pour le dire
arrivent péniblement." - dicomoche.net
_____________________________
pgz.conseil at orange.fr