Bricoleuse sur Access, je consulte souvent le forum et ses archives qui
m'aident évidemment beaucoup. Cependant, cette fois-ci, je n'ai pas
trouvé ce que je cherche. Voici mon problème exposé de manière simplifié :
Je gère des troupeaux d'animaux qui ont des numéros de tatouage à 9
chiffres. Comme ce n'est pas très pratique à saisir sans erreur, je leur
affecte
un "numéro de travail" à 3 chiffres plus facile à utiliser.
Lorsque je démarre un cheptel, je crée mes animaux (par exemple 999
individus) et Access leur affecte un numéro de travail auto de 1 à 999.
Dans les semaines suivantes, certains sont vendus ou disparaissent, je
les enregistre et ainsi, leurs numéros se libèrent.
Le mois suivant par exemple, si j'entre d'autres animaux dans le
cheptel, je souhaite qu'Access leur affecte les numéros libérés.
Est-ce possible ? Merci par avance pour vos idées.
Une suggestion : créer une table des numéros libres. A l'enregistrement d'une "sortie", récupérer le numéro libéré dans cette table. Et à l'enregistrement d'une entrée prendre un numéro dans cette table et l'y supprimer.
Bon courage, -- pgz _____________________________
Bonjour,
Bricoleuse sur Access, je consulte souvent le forum et ses archives qui m'aident évidemment beaucoup. Cependant, cette fois-ci, je n'ai pas trouvé ce que je cherche. Voici mon problème exposé de manière simplifié :
Je gère des troupeaux d'animaux qui ont des numéros de tatouage à 9 chiffres. Comme ce n'est pas très pratique à saisir sans erreur, je leur affecte un "numéro de travail" à 3 chiffres plus facile à utiliser. Lorsque je démarre un cheptel, je crée mes animaux (par exemple 999 individus) et Access leur affecte un numéro de travail auto de 1 à 999. Dans les semaines suivantes, certains sont vendus ou disparaissent, je les enregistre et ainsi, leurs numéros se libèrent. Le mois suivant par exemple, si j'entre d'autres animaux dans le cheptel, je souhaite qu'Access leur affecte les numéros libérés.
Est-ce possible ? Merci par avance pour vos idées.
Julie
Bonjour.
Une suggestion : créer une table des numéros libres. A l'enregistrement
d'une "sortie", récupérer le numéro libéré dans cette table. Et à
l'enregistrement d'une entrée prendre un numéro dans cette table et l'y
supprimer.
Bricoleuse sur Access, je consulte souvent le forum et ses archives qui
m'aident évidemment beaucoup. Cependant, cette fois-ci, je n'ai pas
trouvé ce que je cherche. Voici mon problème exposé de manière simplifié :
Je gère des troupeaux d'animaux qui ont des numéros de tatouage à 9
chiffres. Comme ce n'est pas très pratique à saisir sans erreur, je leur
affecte
un "numéro de travail" à 3 chiffres plus facile à utiliser.
Lorsque je démarre un cheptel, je crée mes animaux (par exemple 999
individus) et Access leur affecte un numéro de travail auto de 1 à 999.
Dans les semaines suivantes, certains sont vendus ou disparaissent, je
les enregistre et ainsi, leurs numéros se libèrent.
Le mois suivant par exemple, si j'entre d'autres animaux dans le
cheptel, je souhaite qu'Access leur affecte les numéros libérés.
Est-ce possible ? Merci par avance pour vos idées.
Une suggestion : créer une table des numéros libres. A l'enregistrement d'une "sortie", récupérer le numéro libéré dans cette table. Et à l'enregistrement d'une entrée prendre un numéro dans cette table et l'y supprimer.
Bon courage, -- pgz _____________________________
Bonjour,
Bricoleuse sur Access, je consulte souvent le forum et ses archives qui m'aident évidemment beaucoup. Cependant, cette fois-ci, je n'ai pas trouvé ce que je cherche. Voici mon problème exposé de manière simplifié :
Je gère des troupeaux d'animaux qui ont des numéros de tatouage à 9 chiffres. Comme ce n'est pas très pratique à saisir sans erreur, je leur affecte un "numéro de travail" à 3 chiffres plus facile à utiliser. Lorsque je démarre un cheptel, je crée mes animaux (par exemple 999 individus) et Access leur affecte un numéro de travail auto de 1 à 999. Dans les semaines suivantes, certains sont vendus ou disparaissent, je les enregistre et ainsi, leurs numéros se libèrent. Le mois suivant par exemple, si j'entre d'autres animaux dans le cheptel, je souhaite qu'Access leur affecte les numéros libérés.
Est-ce possible ? Merci par avance pour vos idées.
Julie
JulieH
Bonjour et merci pour ta réponse,
Cette solution me paraît intéressante, mais mon niveau ne me permet pas (encore ?) de réaliser cela. Il me faudrait un peu plus d'indications : D'abord pour récupérer le numéro libéré lors d'une sortie, ainsi que la date de sortie si possible. Ensuite pour "choisir" un numéro parmi les plus anciens libérés pour l'affecter à la nouvelle entrée et le supprimer dans cette table. Enfin, il me faudrait pouvoir gérer les erreurs si par hasard j'entrais un animal alors qu'il n'y a plus de numéros disponibles. En principe, c'est très très rare.
Je ne sais pas si tu peux encore m'aider.
Julie
Bonjour.
Une suggestion : créer une table des numéros libres. A l'enregistrement d'une "sortie", récupérer le numéro libéré dans cette table. Et à l'enregistrement d'une entrée prendre un numéro dans cette table et l'y supprimer.
Bon courage,
Bonjour et merci pour ta réponse,
Cette solution me paraît intéressante, mais mon niveau ne me permet pas
(encore ?) de réaliser cela. Il me faudrait un peu plus d'indications :
D'abord pour récupérer le numéro libéré lors d'une sortie, ainsi que la
date de sortie si possible.
Ensuite pour "choisir" un numéro parmi les plus anciens libérés pour
l'affecter à la nouvelle entrée et le supprimer dans cette table.
Enfin, il me faudrait pouvoir gérer les erreurs si par hasard j'entrais
un animal alors qu'il n'y a plus de numéros disponibles. En principe,
c'est très très rare.
Je ne sais pas si tu peux encore m'aider.
Julie
Bonjour.
Une suggestion : créer une table des numéros libres. A l'enregistrement
d'une "sortie", récupérer le numéro libéré dans cette table. Et à
l'enregistrement d'une entrée prendre un numéro dans cette table et l'y
supprimer.
Cette solution me paraît intéressante, mais mon niveau ne me permet pas (encore ?) de réaliser cela. Il me faudrait un peu plus d'indications : D'abord pour récupérer le numéro libéré lors d'une sortie, ainsi que la date de sortie si possible. Ensuite pour "choisir" un numéro parmi les plus anciens libérés pour l'affecter à la nouvelle entrée et le supprimer dans cette table. Enfin, il me faudrait pouvoir gérer les erreurs si par hasard j'entrais un animal alors qu'il n'y a plus de numéros disponibles. En principe, c'est très très rare.
Je ne sais pas si tu peux encore m'aider.
Julie
Bonjour.
Une suggestion : créer une table des numéros libres. A l'enregistrement d'une "sortie", récupérer le numéro libéré dans cette table. Et à l'enregistrement d'une entrée prendre un numéro dans cette table et l'y supprimer.
Bon courage,
pgz
Re.
Pour t'aider dans le détail, il faudrait voir ce que tu as déjà fait. Tu peux me contacter par email.
-- pgz _____________________________
Bonjour et merci pour ta réponse,
Cette solution me paraît intéressante, mais mon niveau ne me permet pas (encore ?) de réaliser cela. Il me faudrait un peu plus d'indications : D'abord pour récupérer le numéro libéré lors d'une sortie, ainsi que la date de sortie si possible. Ensuite pour "choisir" un numéro parmi les plus anciens libérés pour l'affecter à la nouvelle entrée et le supprimer dans cette table. Enfin, il me faudrait pouvoir gérer les erreurs si par hasard j'entrais un animal alors qu'il n'y a plus de numéros disponibles. En principe, c'est très très rare.
Je ne sais pas si tu peux encore m'aider.
Julie
Bonjour.
Une suggestion : créer une table des numéros libres. A l'enregistrement d'une "sortie", récupérer le numéro libéré dans cette table. Et à l'enregistrement d'une entrée prendre un numéro dans cette table et l'y supprimer.
Bon courage,
Re.
Pour t'aider dans le détail, il faudrait voir ce que tu as déjà fait.
Tu peux me contacter par email.
Cette solution me paraît intéressante, mais mon niveau ne me permet pas
(encore ?) de réaliser cela. Il me faudrait un peu plus d'indications :
D'abord pour récupérer le numéro libéré lors d'une sortie, ainsi que la
date de sortie si possible.
Ensuite pour "choisir" un numéro parmi les plus anciens libérés pour
l'affecter à la nouvelle entrée et le supprimer dans cette table.
Enfin, il me faudrait pouvoir gérer les erreurs si par hasard j'entrais
un animal alors qu'il n'y a plus de numéros disponibles. En principe,
c'est très très rare.
Je ne sais pas si tu peux encore m'aider.
Julie
Bonjour.
Une suggestion : créer une table des numéros libres. A l'enregistrement
d'une "sortie", récupérer le numéro libéré dans cette table. Et à
l'enregistrement d'une entrée prendre un numéro dans cette table et l'y
supprimer.
Pour t'aider dans le détail, il faudrait voir ce que tu as déjà fait. Tu peux me contacter par email.
-- pgz _____________________________
Bonjour et merci pour ta réponse,
Cette solution me paraît intéressante, mais mon niveau ne me permet pas (encore ?) de réaliser cela. Il me faudrait un peu plus d'indications : D'abord pour récupérer le numéro libéré lors d'une sortie, ainsi que la date de sortie si possible. Ensuite pour "choisir" un numéro parmi les plus anciens libérés pour l'affecter à la nouvelle entrée et le supprimer dans cette table. Enfin, il me faudrait pouvoir gérer les erreurs si par hasard j'entrais un animal alors qu'il n'y a plus de numéros disponibles. En principe, c'est très très rare.
Je ne sais pas si tu peux encore m'aider.
Julie
Bonjour.
Une suggestion : créer une table des numéros libres. A l'enregistrement d'une "sortie", récupérer le numéro libéré dans cette table. Et à l'enregistrement d'une entrée prendre un numéro dans cette table et l'y supprimer.
Bon courage,
JulieH
Je n'ai rien fait de particulier pour le moment car je butais sur ce problème.
J'imagine pour l'instant juste une table avec : N° auto = N° de travail N° de tatouage Date d'entrée Date de sortie Cause de sortie
Un formulaire d'entrée (création d'animaux): N° de tatouage Date d'entrée
Un formulaire de sortie N° de travail Date de sortie Cause.
Merci
Re.
Pour t'aider dans le détail, il faudrait voir ce que tu as déjà fait. Tu peux me contacter par email.
Je n'ai rien fait de particulier pour le moment car je butais sur ce
problème.
J'imagine pour l'instant juste une table avec :
N° auto = N° de travail
N° de tatouage
Date d'entrée
Date de sortie
Cause de sortie
Un formulaire d'entrée (création d'animaux):
N° de tatouage
Date d'entrée
Un formulaire de sortie
N° de travail
Date de sortie
Cause.
Merci
Re.
Pour t'aider dans le détail, il faudrait voir ce que tu as déjà fait.
Tu peux me contacter par email.
Je n'ai rien fait de particulier pour le moment car je butais sur ce problème.
J'imagine pour l'instant juste une table avec : N° auto = N° de travail N° de tatouage Date d'entrée Date de sortie Cause de sortie
Un formulaire d'entrée (création d'animaux): N° de tatouage Date d'entrée
Un formulaire de sortie N° de travail Date de sortie Cause.
Merci
Re.
Pour t'aider dans le détail, il faudrait voir ce que tu as déjà fait. Tu peux me contacter par email.
pgz
En fait le plus simple serait que tu utilises un simple numauto, qui bien sûr au fil du temps va croître, mais c’est très simple ;
Si tu tiens à rester avec des « numéros de travail » en nombre limité, cela revient à utiliser une liste de noms réutilisables. Même dans ce cas, je te conseille de garder aussi un num auto, même s’il n’est pas visible pour l’opérateur ;
La table deviendrait alors : tblCheptel : IdAnimal NumAuto Clé NumTravail entier Tatouage long ou texte DateEntrée date/heure DateSortie date/heure CausedeSortie texte ou mémo
Lors de la saisie du formulaire d’entrée, après saisie du tatouage, il faut alors : - vérifier que le tatouage n’existe pas déjà dans la table - rechercher le premier Numtravail disponible.
Pour cela, le plus simple est d’écrire une fonction qui va chercher par exemple le premier numéro dispo entre 1 et 5000. Il faut prendre une limite assez haute pour être sûr de toujours trouver un numéro dispo qq soit l’effectif du cheptel.
-- pgz _____________________________
En fait le plus simple serait que tu utilises un simple numauto, qui bien sûr
au fil du temps va croître, mais c’est très simple ;
Si tu tiens à rester avec des « numéros de travail » en nombre limité, cela
revient à utiliser une liste de noms réutilisables. Même dans ce cas, je te
conseille de garder aussi un num auto, même s’il n’est pas visible pour
l’opérateur ;
La table deviendrait alors :
tblCheptel :
IdAnimal NumAuto Clé
NumTravail entier
Tatouage long ou texte
DateEntrée date/heure
DateSortie date/heure
CausedeSortie texte ou mémo
Lors de la saisie du formulaire d’entrée, après saisie du tatouage, il faut
alors :
- vérifier que le tatouage n’existe pas déjà dans la table
- rechercher le premier Numtravail disponible.
Pour cela, le plus simple est d’écrire une fonction qui va chercher par
exemple le premier numéro dispo entre 1 et 5000. Il faut prendre une limite
assez haute pour être sûr de toujours trouver un numéro dispo qq soit
l’effectif du cheptel.
En fait le plus simple serait que tu utilises un simple numauto, qui bien sûr au fil du temps va croître, mais c’est très simple ;
Si tu tiens à rester avec des « numéros de travail » en nombre limité, cela revient à utiliser une liste de noms réutilisables. Même dans ce cas, je te conseille de garder aussi un num auto, même s’il n’est pas visible pour l’opérateur ;
La table deviendrait alors : tblCheptel : IdAnimal NumAuto Clé NumTravail entier Tatouage long ou texte DateEntrée date/heure DateSortie date/heure CausedeSortie texte ou mémo
Lors de la saisie du formulaire d’entrée, après saisie du tatouage, il faut alors : - vérifier que le tatouage n’existe pas déjà dans la table - rechercher le premier Numtravail disponible.
Pour cela, le plus simple est d’écrire une fonction qui va chercher par exemple le premier numéro dispo entre 1 et 5000. Il faut prendre une limite assez haute pour être sûr de toujours trouver un numéro dispo qq soit l’effectif du cheptel.
-- pgz _____________________________
JulieH
Merci beaucoup pour continuer à t'intéresser à mon petit problème,
Le numéro auto qui va croître au fil du temps, c'est justement ce que je veux éviter.
Ce qui m'intéresserait, si c'est possible, c'est d'avoir quelques éléments pour cette fameuse fonction. Car c'est ce que je ne maitrise pas.
Julie
En fait le plus simple serait que tu utilises un simple numauto, qui bien sûr au fil du temps va croître, mais c’est très simple ;
Si tu tiens à rester avec des « numéros de travail » en nombre limité, cela revient à utiliser une liste de noms réutilisables. Même dans ce cas, je te conseille de garder aussi un num auto, même s’il n’est pas visible pour l’opérateur ;
La table deviendrait alors : tblCheptel : IdAnimal NumAuto Clé NumTravail entier Tatouage long ou texte DateEntrée date/heure DateSortie date/heure CausedeSortie texte ou mémo
Lors de la saisie du formulaire d’entrée, après saisie du tatouage, il faut alors : - vérifier que le tatouage n’existe pas déjà dans la table - rechercher le premier Numtravail disponible.
Pour cela, le plus simple est d’écrire une fonction qui va chercher par exemple le premier numéro dispo entre 1 et 5000. Il faut prendre une limite assez haute pour être sûr de toujours trouver un numéro dispo qq soit l’effectif du cheptel.
Merci beaucoup pour continuer à t'intéresser à mon petit problème,
Le numéro auto qui va croître au fil du temps, c'est justement ce que
je veux éviter.
Ce qui m'intéresserait, si c'est possible, c'est d'avoir quelques
éléments pour cette fameuse fonction. Car c'est ce que je ne maitrise pas.
Julie
En fait le plus simple serait que tu utilises un simple numauto, qui bien sûr
au fil du temps va croître, mais c’est très simple ;
Si tu tiens à rester avec des « numéros de travail » en nombre limité, cela
revient à utiliser une liste de noms réutilisables. Même dans ce cas, je te
conseille de garder aussi un num auto, même s’il n’est pas visible pour
l’opérateur ;
La table deviendrait alors :
tblCheptel :
IdAnimal NumAuto Clé
NumTravail entier
Tatouage long ou texte
DateEntrée date/heure
DateSortie date/heure
CausedeSortie texte ou mémo
Lors de la saisie du formulaire d’entrée, après saisie du tatouage, il faut
alors :
- vérifier que le tatouage n’existe pas déjà dans la table
- rechercher le premier Numtravail disponible.
Pour cela, le plus simple est d’écrire une fonction qui va chercher par
exemple le premier numéro dispo entre 1 et 5000. Il faut prendre une limite
assez haute pour être sûr de toujours trouver un numéro dispo qq soit
l’effectif du cheptel.
Merci beaucoup pour continuer à t'intéresser à mon petit problème,
Le numéro auto qui va croître au fil du temps, c'est justement ce que je veux éviter.
Ce qui m'intéresserait, si c'est possible, c'est d'avoir quelques éléments pour cette fameuse fonction. Car c'est ce que je ne maitrise pas.
Julie
En fait le plus simple serait que tu utilises un simple numauto, qui bien sûr au fil du temps va croître, mais c’est très simple ;
Si tu tiens à rester avec des « numéros de travail » en nombre limité, cela revient à utiliser une liste de noms réutilisables. Même dans ce cas, je te conseille de garder aussi un num auto, même s’il n’est pas visible pour l’opérateur ;
La table deviendrait alors : tblCheptel : IdAnimal NumAuto Clé NumTravail entier Tatouage long ou texte DateEntrée date/heure DateSortie date/heure CausedeSortie texte ou mémo
Lors de la saisie du formulaire d’entrée, après saisie du tatouage, il faut alors : - vérifier que le tatouage n’existe pas déjà dans la table - rechercher le premier Numtravail disponible.
Pour cela, le plus simple est d’écrire une fonction qui va chercher par exemple le premier numéro dispo entre 1 et 5000. Il faut prendre une limite assez haute pour être sûr de toujours trouver un numéro dispo qq soit l’effectif du cheptel.
pgz
Voici, pour l'idée une fonction qui devrait renvoyer le premier numéro libre entre 1 et 5000 :
Public fctNumTravail as Integer Dim db as DAO.DataBase, rst as DAO.RecordSet, i as integer
Set db = application.CurrentDb Set rst = db.OpenRecordSet(“tblCheptel”, dbOpenDynaset)
For i = 1 to 5000 Rst.findfirst “NumTrav = “ & i If rst.NoMatch Then exit For Rst.FindFirst “NumTrav = “ & I & “ AND Not IsNull(DateSortie)” If rst.NoMatch Then exit For Next i
Rst.Close Set rst = Nothing Set db = Nothing
If i = 5000 Then MsgBox “Pb d’attribution du Numéro de travail : plus de 5000.” i = 0 End If
fctNumTravail = i
End function
A mettre au point, bien sûr.
Bon courage, -- pgz _____________________________
Voici, pour l'idée une fonction qui devrait renvoyer le premier numéro libre
entre 1 et 5000 :
Public fctNumTravail as Integer
Dim db as DAO.DataBase, rst as DAO.RecordSet, i as integer
Set db = application.CurrentDb
Set rst = db.OpenRecordSet(“tblCheptel”, dbOpenDynaset)
For i = 1 to 5000
Rst.findfirst “NumTrav = “ & i
If rst.NoMatch Then exit For
Rst.FindFirst “NumTrav = “ & I & “ AND Not IsNull(DateSortie)”
If rst.NoMatch Then exit For
Next i
Rst.Close
Set rst = Nothing
Set db = Nothing
If i = 5000 Then
MsgBox “Pb d’attribution du Numéro de travail : plus de 5000.”
i = 0
End If
Voici, pour l'idée une fonction qui devrait renvoyer le premier numéro libre entre 1 et 5000 :
Public fctNumTravail as Integer Dim db as DAO.DataBase, rst as DAO.RecordSet, i as integer
Set db = application.CurrentDb Set rst = db.OpenRecordSet(“tblCheptel”, dbOpenDynaset)
For i = 1 to 5000 Rst.findfirst “NumTrav = “ & i If rst.NoMatch Then exit For Rst.FindFirst “NumTrav = “ & I & “ AND Not IsNull(DateSortie)” If rst.NoMatch Then exit For Next i
Rst.Close Set rst = Nothing Set db = Nothing
If i = 5000 Then MsgBox “Pb d’attribution du Numéro de travail : plus de 5000.” i = 0 End If
fctNumTravail = i
End function
A mettre au point, bien sûr.
Bon courage, -- pgz _____________________________
3stone
Salut,
"pgz" | Voici, pour l'idée une fonction qui devrait renvoyer le premier numéro libre | entre 1 et 5000 :
Pourquoi diable se limiter à ces valeurs ??
JulieH : Regarde ceci, avec une simple requête... http://www.3stone.be/access/articles.php?lng=fr&pg8
à 3stones : La demande de JulieH est d'utiliser comme un nom les nombres entre 1 et 999, en réutilisant ceux qui se libèrent. Mais quand un nombre se libère, il ne disparait pas : ce n'est donc pas la clé de la table. C'est pourquoi je crains que ce que tu proposes ne conviennes pas. Enfin, si ce n'est pas moi qui ai mal compris...
à 3stones : La demande de JulieH est d'utiliser comme un nom les nombres
entre 1 et 999, en réutilisant ceux qui se libèrent. Mais quand un nombre se
libère, il ne disparait pas : ce n'est donc pas la clé de la table.
C'est pourquoi je crains que ce que tu proposes ne conviennes pas. Enfin, si
ce n'est pas moi qui ai mal compris...
à 3stones : La demande de JulieH est d'utiliser comme un nom les nombres entre 1 et 999, en réutilisant ceux qui se libèrent. Mais quand un nombre se libère, il ne disparait pas : ce n'est donc pas la clé de la table. C'est pourquoi je crains que ce que tu proposes ne conviennes pas. Enfin, si ce n'est pas moi qui ai mal compris...
Je vais tenter cela ce week end. Je reviendrai si problème.
Julie
Bonjour;
à 3stones : La demande de JulieH est d'utiliser comme un nom les nombres entre 1 et 999, en réutilisant ceux qui se libèrent. Mais quand un nombre se libère, il ne disparait pas : ce n'est donc pas la clé de la table. C'est pourquoi je crains que ce que tu proposes ne conviennes pas. Enfin, si ce n'est pas moi qui ai mal compris...
Cordialement,
Merci à tous les deux pour vos réponses.
Je vais tenter cela ce week end. Je reviendrai si problème.
Julie
Bonjour;
à 3stones : La demande de JulieH est d'utiliser comme un nom les nombres
entre 1 et 999, en réutilisant ceux qui se libèrent. Mais quand un nombre se
libère, il ne disparait pas : ce n'est donc pas la clé de la table.
C'est pourquoi je crains que ce que tu proposes ne conviennes pas. Enfin, si
ce n'est pas moi qui ai mal compris...
Je vais tenter cela ce week end. Je reviendrai si problème.
Julie
Bonjour;
à 3stones : La demande de JulieH est d'utiliser comme un nom les nombres entre 1 et 999, en réutilisant ceux qui se libèrent. Mais quand un nombre se libère, il ne disparait pas : ce n'est donc pas la clé de la table. C'est pourquoi je crains que ce que tu proposes ne conviennes pas. Enfin, si ce n'est pas moi qui ai mal compris...