-----Message d'origine-----
Bonjour à tous,
Je crée une base de données pour gérer des dossiers, dans
une table étape je regroupe toute les étapes il y en a
18. Il y a une case à cocher complet quand l'étape est
terminée.
Dans un formulaire je fais une recherche pour savoir à
quelle étape je suis arrivée et que je ne sois pas
obligée de faire toutes les étapes avant d'arriver à
celle qui n'est pas encore encodée.
La dificultée est que si la case à cochée "complet" n'a
pas été cochée cela fonctionne très bien, mais si la case
est cochée je recois le message: il n'y a pas
d'enregistrement en court.
Voici le code:
Set Mb = CurrentDb()
Set Mr = Mb.OpenRecordset("T_etape", dbOpenTable)
Mr.Index = "Num_dossierindex"
Mr.Seek "=", Me!Num_dossieri
Do
If Mr.NoMatch = False Then
If Mr![Num_ordre] < 18 Then
If Mr![Complet] = -1 Then
Mr.MoveNext
If Mr![Num_dossier] <> Me!Num_dossieri.Value Then
(avec ceci le programme revient au premier enregistrement)
Mr.MovePrevious
MsgBox (Mr![Num_ordre] & " " & Mr![Num_dossier])
(ceci est test pour voir où arrive la boucle)
DoCmd.OpenForm (Mr![Formulaire]), acNormal
Exit Do
End If
Else
MsgBox (Mr![Num_ordre] & " " & Mr![Num_dossier])(ceci
est test pour voir où arrive la boucle)
DoCmd.OpenForm (Mr![Formulaire]), acNormal
Exit Do
End If
Else
MsgBox (" Ce dossier est terminé !")
Exit Do
End If
Else
MsgBox (" Ce dossier n'existe pas !")
Exit Do
End If
Loop
Mr.Close
Quelqu'un peut-il m'aider svp :((?
Nadine
.
-----Message d'origine-----
Bonjour à tous,
Je crée une base de données pour gérer des dossiers, dans
une table étape je regroupe toute les étapes il y en a
18. Il y a une case à cocher complet quand l'étape est
terminée.
Dans un formulaire je fais une recherche pour savoir à
quelle étape je suis arrivée et que je ne sois pas
obligée de faire toutes les étapes avant d'arriver à
celle qui n'est pas encore encodée.
La dificultée est que si la case à cochée "complet" n'a
pas été cochée cela fonctionne très bien, mais si la case
est cochée je recois le message: il n'y a pas
d'enregistrement en court.
Voici le code:
Set Mb = CurrentDb()
Set Mr = Mb.OpenRecordset("T_etape", dbOpenTable)
Mr.Index = "Num_dossierindex"
Mr.Seek "=", Me!Num_dossieri
Do
If Mr.NoMatch = False Then
If Mr![Num_ordre] < 18 Then
If Mr![Complet] = -1 Then
Mr.MoveNext
If Mr![Num_dossier] <> Me!Num_dossieri.Value Then
(avec ceci le programme revient au premier enregistrement)
Mr.MovePrevious
MsgBox (Mr![Num_ordre] & " " & Mr![Num_dossier])
(ceci est test pour voir où arrive la boucle)
DoCmd.OpenForm (Mr![Formulaire]), acNormal
Exit Do
End If
Else
MsgBox (Mr![Num_ordre] & " " & Mr![Num_dossier])(ceci
est test pour voir où arrive la boucle)
DoCmd.OpenForm (Mr![Formulaire]), acNormal
Exit Do
End If
Else
MsgBox (" Ce dossier est terminé !")
Exit Do
End If
Else
MsgBox (" Ce dossier n'existe pas !")
Exit Do
End If
Loop
Mr.Close
Quelqu'un peut-il m'aider svp :((?
Nadine
.
-----Message d'origine-----
Bonjour à tous,
Je crée une base de données pour gérer des dossiers, dans
une table étape je regroupe toute les étapes il y en a
18. Il y a une case à cocher complet quand l'étape est
terminée.
Dans un formulaire je fais une recherche pour savoir à
quelle étape je suis arrivée et que je ne sois pas
obligée de faire toutes les étapes avant d'arriver à
celle qui n'est pas encore encodée.
La dificultée est que si la case à cochée "complet" n'a
pas été cochée cela fonctionne très bien, mais si la case
est cochée je recois le message: il n'y a pas
d'enregistrement en court.
Voici le code:
Set Mb = CurrentDb()
Set Mr = Mb.OpenRecordset("T_etape", dbOpenTable)
Mr.Index = "Num_dossierindex"
Mr.Seek "=", Me!Num_dossieri
Do
If Mr.NoMatch = False Then
If Mr![Num_ordre] < 18 Then
If Mr![Complet] = -1 Then
Mr.MoveNext
If Mr![Num_dossier] <> Me!Num_dossieri.Value Then
(avec ceci le programme revient au premier enregistrement)
Mr.MovePrevious
MsgBox (Mr![Num_ordre] & " " & Mr![Num_dossier])
(ceci est test pour voir où arrive la boucle)
DoCmd.OpenForm (Mr![Formulaire]), acNormal
Exit Do
End If
Else
MsgBox (Mr![Num_ordre] & " " & Mr![Num_dossier])(ceci
est test pour voir où arrive la boucle)
DoCmd.OpenForm (Mr![Formulaire]), acNormal
Exit Do
End If
Else
MsgBox (" Ce dossier est terminé !")
Exit Do
End If
Else
MsgBox (" Ce dossier n'existe pas !")
Exit Do
End If
Loop
Mr.Close
Quelqu'un peut-il m'aider svp :((?
Nadine
.
-----Message d'origine-----
Bonjour Michel (et Nadine)!
Attention au DLast! Contrairement a ce que le nom de
cette fonction peut
nous faire croire, elle ne renvoie pas plus le dernier
enregistrement que
DFirst ne renvoie le premier. Extrait de l'aide en ligne:
You can use the DFirst and DLast functions to return a
random record from a
particular field in a table or query when you simply need
any value from
that field.
La seule solution fiable est d'utiliser un TOP 1 sur une
requete ordonnee,
ou un DMax/DMin.
Bonne continuation.
--
Daniel :-)
Computing Technologies International - www.computing-
tech.com - We
provide solutions...
"Michel Gesnot"
wrote in message
news:14ea501c4455a$ff541450$
Bonjour Nadine
Apparemment, vous etes toujours en attente.
Si je comprends bien, un dossier en cours peut se trouver
a un des deux stades suivants :
- entre deux etapes, par ex. 11 complete et 12 pas
commencee
- etape 12 en cours.
Et vous gerez deux informations, la derniere etape
entreprise et son statut, complet ou non.
Le dossier n'est jamais complet s'il n'a pas parcouru les
18 étapes.
Pour revenir a votre message d'erreur, c'est Mr.Movenext
ou Mr.MovePrevious qui le genere.
Donc, vous devriez voir s'il passe le Mr.MoveNext : que se
passe-t-il si vous testez le dernier dossier en cours?
Vous atteignez le EOF. Non ? Et vous ne le gérez pas.
C'est une possibilite.
J'ai compris ceci : vous avez une cle qui reprend le n° de
dossier et son etape, votre boucle Do-Loop parcourt les
etapes du dossier jusqu'au dossier suivant et la, vous
revenez en arriere (MovePrevious) pour retrouver la
derniere etape du dossier recherche.
A mon avis, il y a plus simple :
- Soit les etapes sont stockees dans une table et vous
pouvez utiliser la fonction DLast sur la racine (n°
dossier) du champ Etape qui serait constitue du n° et de
l'index d'etape (00 a 18)
- Soit vous travaillez sur le recordset, mais avec
FindLast et la racine de l'index (n° dossier) comme
critere. Dans ce cas, il faut savoir que FindLast va
remplir tout le recordset a la premiere execution et il
faut donc voir si cela pose un probleme de delai d'acces
(nombre de dossiers tres important), ce qui m'etonnerait.
La vous tomberez d'emblee sur la derniere etape du
dossier.
Enfin, vous pouvez travailler sur une requete, plutot que
sur la table, et ne retenir ainsi que les dossiers
incomplets, ce qui accelerera les choses.
Encore 3 observations :
1. voyez l'instruction With, qui simplifiera l'ecriture de
vos procedures.
2. pour faciliter la lecture, je testerais
If Mr.NoMatch then
ce dossier n'existe pas
Else
le traitement
End if
Et je veillerais a bien indenter, mais ce n'est peu-
etre que dans le post que vous n'avez pas indente
completetemnt.
3. Si vous ne les connaissez pas bien, allez voir les
fenetres de variables locales, d'exécution, les
possibilites d'execution ligne par ligne etc (F8, ctr-F8
etc) qui vous permettront de suivre votre procedure pas a
pas au lieu de passer par les MsgBox. (Il faut
reinitialiser le code pour revenir a la forme).
Si vous ne trouvez pas, et bien revenez.
Bon travail
Michel Gesnot
.
-----Message d'origine-----
Bonjour Michel (et Nadine)!
Attention au DLast! Contrairement a ce que le nom de
cette fonction peut
nous faire croire, elle ne renvoie pas plus le dernier
enregistrement que
DFirst ne renvoie le premier. Extrait de l'aide en ligne:
You can use the DFirst and DLast functions to return a
random record from a
particular field in a table or query when you simply need
any value from
that field.
La seule solution fiable est d'utiliser un TOP 1 sur une
requete ordonnee,
ou un DMax/DMin.
Bonne continuation.
--
Daniel :-)
Computing Technologies International - www.computing-
tech.com - We
provide solutions...
"Michel Gesnot" <anonymous@discussions.microsoft.com>
wrote in message
news:14ea501c4455a$ff541450$a101280a@phx.gbl...
Bonjour Nadine
Apparemment, vous etes toujours en attente.
Si je comprends bien, un dossier en cours peut se trouver
a un des deux stades suivants :
- entre deux etapes, par ex. 11 complete et 12 pas
commencee
- etape 12 en cours.
Et vous gerez deux informations, la derniere etape
entreprise et son statut, complet ou non.
Le dossier n'est jamais complet s'il n'a pas parcouru les
18 étapes.
Pour revenir a votre message d'erreur, c'est Mr.Movenext
ou Mr.MovePrevious qui le genere.
Donc, vous devriez voir s'il passe le Mr.MoveNext : que se
passe-t-il si vous testez le dernier dossier en cours?
Vous atteignez le EOF. Non ? Et vous ne le gérez pas.
C'est une possibilite.
J'ai compris ceci : vous avez une cle qui reprend le n° de
dossier et son etape, votre boucle Do-Loop parcourt les
etapes du dossier jusqu'au dossier suivant et la, vous
revenez en arriere (MovePrevious) pour retrouver la
derniere etape du dossier recherche.
A mon avis, il y a plus simple :
- Soit les etapes sont stockees dans une table et vous
pouvez utiliser la fonction DLast sur la racine (n°
dossier) du champ Etape qui serait constitue du n° et de
l'index d'etape (00 a 18)
- Soit vous travaillez sur le recordset, mais avec
FindLast et la racine de l'index (n° dossier) comme
critere. Dans ce cas, il faut savoir que FindLast va
remplir tout le recordset a la premiere execution et il
faut donc voir si cela pose un probleme de delai d'acces
(nombre de dossiers tres important), ce qui m'etonnerait.
La vous tomberez d'emblee sur la derniere etape du
dossier.
Enfin, vous pouvez travailler sur une requete, plutot que
sur la table, et ne retenir ainsi que les dossiers
incomplets, ce qui accelerera les choses.
Encore 3 observations :
1. voyez l'instruction With, qui simplifiera l'ecriture de
vos procedures.
2. pour faciliter la lecture, je testerais
If Mr.NoMatch then
ce dossier n'existe pas
Else
le traitement
End if
Et je veillerais a bien indenter, mais ce n'est peu-
etre que dans le post que vous n'avez pas indente
completetemnt.
3. Si vous ne les connaissez pas bien, allez voir les
fenetres de variables locales, d'exécution, les
possibilites d'execution ligne par ligne etc (F8, ctr-F8
etc) qui vous permettront de suivre votre procedure pas a
pas au lieu de passer par les MsgBox. (Il faut
reinitialiser le code pour revenir a la forme).
Si vous ne trouvez pas, et bien revenez.
Bon travail
Michel Gesnot
.
-----Message d'origine-----
Bonjour Michel (et Nadine)!
Attention au DLast! Contrairement a ce que le nom de
cette fonction peut
nous faire croire, elle ne renvoie pas plus le dernier
enregistrement que
DFirst ne renvoie le premier. Extrait de l'aide en ligne:
You can use the DFirst and DLast functions to return a
random record from a
particular field in a table or query when you simply need
any value from
that field.
La seule solution fiable est d'utiliser un TOP 1 sur une
requete ordonnee,
ou un DMax/DMin.
Bonne continuation.
--
Daniel :-)
Computing Technologies International - www.computing-
tech.com - We
provide solutions...
"Michel Gesnot"
wrote in message
news:14ea501c4455a$ff541450$
Bonjour Nadine
Apparemment, vous etes toujours en attente.
Si je comprends bien, un dossier en cours peut se trouver
a un des deux stades suivants :
- entre deux etapes, par ex. 11 complete et 12 pas
commencee
- etape 12 en cours.
Et vous gerez deux informations, la derniere etape
entreprise et son statut, complet ou non.
Le dossier n'est jamais complet s'il n'a pas parcouru les
18 étapes.
Pour revenir a votre message d'erreur, c'est Mr.Movenext
ou Mr.MovePrevious qui le genere.
Donc, vous devriez voir s'il passe le Mr.MoveNext : que se
passe-t-il si vous testez le dernier dossier en cours?
Vous atteignez le EOF. Non ? Et vous ne le gérez pas.
C'est une possibilite.
J'ai compris ceci : vous avez une cle qui reprend le n° de
dossier et son etape, votre boucle Do-Loop parcourt les
etapes du dossier jusqu'au dossier suivant et la, vous
revenez en arriere (MovePrevious) pour retrouver la
derniere etape du dossier recherche.
A mon avis, il y a plus simple :
- Soit les etapes sont stockees dans une table et vous
pouvez utiliser la fonction DLast sur la racine (n°
dossier) du champ Etape qui serait constitue du n° et de
l'index d'etape (00 a 18)
- Soit vous travaillez sur le recordset, mais avec
FindLast et la racine de l'index (n° dossier) comme
critere. Dans ce cas, il faut savoir que FindLast va
remplir tout le recordset a la premiere execution et il
faut donc voir si cela pose un probleme de delai d'acces
(nombre de dossiers tres important), ce qui m'etonnerait.
La vous tomberez d'emblee sur la derniere etape du
dossier.
Enfin, vous pouvez travailler sur une requete, plutot que
sur la table, et ne retenir ainsi que les dossiers
incomplets, ce qui accelerera les choses.
Encore 3 observations :
1. voyez l'instruction With, qui simplifiera l'ecriture de
vos procedures.
2. pour faciliter la lecture, je testerais
If Mr.NoMatch then
ce dossier n'existe pas
Else
le traitement
End if
Et je veillerais a bien indenter, mais ce n'est peu-
etre que dans le post que vous n'avez pas indente
completetemnt.
3. Si vous ne les connaissez pas bien, allez voir les
fenetres de variables locales, d'exécution, les
possibilites d'execution ligne par ligne etc (F8, ctr-F8
etc) qui vous permettront de suivre votre procedure pas a
pas au lieu de passer par les MsgBox. (Il faut
reinitialiser le code pour revenir a la forme).
Si vous ne trouvez pas, et bien revenez.
Bon travail
Michel Gesnot
.