OVH Cloud OVH Cloud

positionnement sur un enregistrement precis d'une table

14 réponses
Avatar
c.barbier
Bonjour,

Je souhaite a l'aide d'un recordset, me positionner sur un
enregistrement precis.
Pour cela, j'ai recuperer la position de l'enregistrement a
l'aide de la fonction :
position = rst_mvt.AbsolutePosition. Mais je n'arrive pas a me
repositionner sur cet enregistrement pour continuer le parcours de la
table. Je pense que cela vient du fait que la fonction que j'utilise
est destinee au formulaire mais je ne suis pas certaine. Voici ci
dessous le code de la procedure. Dans les commentaires, j'ai indique
ou se situe le probleme.
Merci beaucoup,

Sub Remonte_Mouvement()
'variable permettant de designer la table article
Dim db_stock As DAO.Database
Dim rst_stock As DAO.Recordset

'variable permettant de designer la table mouvement
Dim db_mvt As DAO.Database
Dim rst_mvt As DAO.Recordset

Dim Date_Souhaitee As Date
Dim pmpactuel As Double
Dim pmpsortie As Double

Dim position As Long
Dim resultat As Integer
Dim quantite_actuelle As Double
Dim quantitesortie As Double
Dim val_stock_mag As Double

Initialisation_Table
Date_Souhaitee = Date_Saisie()

'Ouverture et positionnement au debut de la table mouvement
Set db_mvt = CurrentDb()
Set rst_mvt = db_mvt.OpenRecordset("SELECT * from dbo_mouvement_copie")

'Tant que l'on n'a pas atteint la fin de la table mouvement
While ((Not rst_mvt.EOF) And (rst_mvt![Date] > Date_Souhaitee))

'ouverture et positionnement au debut de la table article
Set db_stock = CurrentDb()
Set rst_stock = db_stock.OpenRecordset("SELECT * from StockIni")
resultat = 0
While ((Not rst_stock.EOF) And (resultat <> 1))
If rst_stock![Code Article] = rst_mvt![Article] Then 'ce n'est
ni un document ni un outil
resultat = 1
pmpactuel = rst_stock![PMP Actuel]
quantite_actuelle = rst_stock![Quantite Actuelle]
val_stock_mag = rst_stock![Valeur Stock]
End If
rst_stock.MoveNext
Wend
rst_stock.MovePrevious
Select Case rst_mvt![TypeMvt]
Case "ISS-WO", "ISS-UNP"
quantite_actuelle = quantite_actuelle + rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + pmpactuel *
rst_mvt![QteMvt]
'insertion dans la table stockini
Insertion_Table rst_stock, quantite_actuelle, val_stock_mag

Case "RCT-PO"
pmpactuel = (pmpactuel * quantite_actuelle - rst_mvt![Prix]
* rst_mvt![QteMvt]) / (quantite_actuelle - rst_mvt![QteMvt])
quantite_actuelle = quantite_actuelle - rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - rst_mvt![Prix] *
rst_mvt![QteMvt]
'insertion dans la table stockini
Insertion_Table rst_stock, quantite_actuelle, val_stock_mag
rst_stock.Edit
rst_stock("[PMP Actuel]") = pmpactuel
rst_stock.Update

Case "RCT-RS", "RCT-UNP"
resultat = 0
pmpsortie = pmpactuel
quantitesortie = quantite_actuelle

position = rst_mvt.AbsolutePosition 'GARDE LA POSITION DE
L'ENREGISTREMENT COURANT

While resultat <> 1 'Tant que l'on n'a pas trouve un
mouvement ISS-WO ou ISS-UNP
If rst_stock![Code Article] = rst_mvt![Article] Then
Select Case rst_mvt![TypeMvt]
Case "ISS-UNP", "ISS-WO"
resultat = 1 'la derniere sortie ISS-UNP ou
ISS-WO a ete trouve
'recuperation du PMP
quantite_actuelle = quantite_actuelle -
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - pmpsortie *
rst_mvt![QteMvt]
Insertion_Table rst_stock,
quantite_actuelle, val_stock_mag
Case "ISS-SO"
quantitesortie = quantitesortie +
rst_mvt![QteMvt]
Case "RJCT-WO", "RCT-WO", "RCT-RS", "RCT-WO"
quantitesortie = quantitesortie -
rst_mvt![QteMvt]
Case "CYC-RCNT"
If rst_mvt![QteMvt] > 0 Then
'c'est une entree
quantitesortie = quantitesortie -
rst_mvt![QteMvt]
Else
'c'est une sortie
quantitesortie = quantitesortie +
rst_mvt![QteMvt]

End If
Case "RCT-PO"
'calcul du nouveau PMP
pmpsortie = (pmpsortie *
quantite_actuelle - rst_mvt![Prix] * rst_mvt![QteMvt]) /
(quantite_actuelle - rst_mvt![QteMvt])
End Select
rst_mvt.MoveNext
End If
Wend



DoCmd.GoToRecord acDataTable, rst_mvt, acGoTo,
position 'RETOUR A L'ENREGISTREMENT QUI ETAIT EN COURS. MAIS CETTE
LIGNE NE FONCTIONNE PAS, IL NE VEUT PAS DE L'OBJET. Cela est
certainement du au fait qu'il ne s'agit pas d'un formulaire. Avez
vous une autre fonction a me proposer pour retourner a
l'enregistrement qui etait en cours ?





Case "ISS-SO"
quantite_actuelle = quantite_actuelle +
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + rst_mvt![Prix]
* rst_mvt![QteMvt]
Insertion_Table rst_stock, quantite_actuelle,
val_stock_mag
Case "CYC-RCNT"
If rst_mvt![QteMvt] > 0 Then 'c'est une entree
quantite_actuelle = quantite_actuelle -
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - pmpactuelle
* rst_mvt![QteMvt]
Else 'c'est une sortie
quantite_actuelle = quantite_actuelle +
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + pmpactuelle
* rst_mvt![QteMvt]
End If

End Select
rst_stock.Close 'fermeture de la table stock
'Liberation des variables objet permettant de designer la
table article
Set rst_stock = Nothing
Set db_stock = Nothing

rst_mvt.MoveNext
Wend

rst_mvt.Close 'fermeture de la table article
'Liberation des variables objet permettant de designer la table article
Set rst_mvt = Nothing
Set db_mvt = Nothing
End Sub

10 réponses

1 2
Avatar
pgz
Bonjour,

Tu pourrais faire simplement :
rst-mvt.AbsolutePosition = position, puisque la propriété est accessible en
lecture et écriture.

Même s'il y a d'autres choses qui paraissent, à première vue, un peu
étonnant dans ton programme. Par ex, pourquoi
Set rst_mvt = db_mvt.OpenRecordset("SELECT * from dbo_mouvement_copie")
au lieu de
Set rst_mvt = db_mvt.OpenRecordset("dbo_mouvement_copie"), et :
Set rst_stock = db_stock.OpenRecordset("SELECT * from StockIni") au lieu de :
Set rst_stock = db_stock.OpenRecordset("SELECT * from StockIni WHERE [Code
Article] = " & rst_mvt("Article"))?

Bonne journée,
pgz
Avatar
c.barbier

Bonjour,

Tu pourrais faire simplement :
rst-mvt.AbsolutePosition = position, puisque la propriété est acces sible en
lecture et écriture.

Même s'il y a d'autres choses qui paraissent, à première vue, un peu
étonnant dans ton programme. Par ex, pourquoi
Set rst_mvt = db_mvt.OpenRecordset("SELECT * from dbo_mouvement_copie")
au lieu de
Set rst_mvt = db_mvt.OpenRecordset("dbo_mouvement_copie"), et :
Set rst_stock = db_stock.OpenRecordset("SELECT * from StockIni") au lie u de :
Set rst_stock = db_stock.OpenRecordset("SELECT * from StockIni WHERE [C ode
Article] = " & rst_mvt("Article"))?

Bonne journée,
pgz


Bonsoir,

je viens d'essayer de faire rst-mvt.AbsolutePosition = position mais
j'ai le meme pb qu'avec la fonction bookmark et je ne comprends pas
pourquoi ca ne marche pas.
L'execution est interrompue lorsqu'il arrive sur la ligne While
((Not rst_mvt.EOF) And (rst_mvt![Date] > Date_Souhaitee)). Il dit
qu'il n'y a pas d'enregistrement courant alors que si il se
repositonne au bonne endroit, il y a encore des enregistrements. Savez
a quoi est du cette erreur ?
Sinon, pour ce qui est des Select dans l'ouverture des recordset, au
debut je ne les avais pas mis mais lors de l'execution du programme,
il ne lisait pas les enregistrements dans le meme ordre qu'ils sont
ranges dans la table. Or, j'ai besoin pour des calculs qu'ils
respectent l'ordre de parcours de la table. j'ai donc demande conseil
sur le forum car je suis debutante en VB et Access. On m'a alors
conseille de mettre un select. Penez vous que je dois faire autrement?
merci beaucoup pour votre aide,
Voici ci dessous le code avec la fonction bookmark et j'ai indique en
commentaire la ligne sur laquelle s'arrete l'execution.

Sub Remonte_Mouvement()
'variable permettant de designer la table article
Dim db_stock As DAO.Database
Dim rst_stock As DAO.Recordset

'variable permettant de designer la table mouvement
Dim db_mvt As DAO.Database
Dim rst_mvt As DAO.Recordset

Dim Date_Souhaitee As Date
Dim pmpactuel As Double
Dim pmpsortie As Double

Dim position() As Byte
Dim resultat As Integer
Dim quantite_actuelle As Double
Dim quantitesortie As Double
Dim val_stock_mag As Double

Initialisation_Table
Date_Souhaitee = Date_Saisie()

'Ouverture et positionnement au debut de la table mouvement
Set db_mvt = CurrentDb()
Set rst_mvt = db_mvt.OpenRecordset("SELECT * from dbo_mouvement_copie")

'Tant que l'on n'a pas atteint la fin de la table mouvement
While ((Not rst_mvt.EOF) And (rst_mvt![Date] > Date_Souhaitee))
'APRES L'EXECUTION DU CASE RCT-UNP,RCT-RS, LE PROGRAMME REVIENT SUR
CETTE LIGNE ET IL DIT QU'IL N'Y A PAS D'ENREGITREMENT COURANT

'ouverture et positionnement au debut de la table stock
Set db_stock = CurrentDb()
Set rst_stock = db_stock.OpenRecordset("SELECT * from StockIni")
resultat = 0

'Recherche dans la table stock de l'article correspondant au
mouvement lu
While ((Not rst_stock.EOF) And (resultat <> 1))
If rst_stock![Code Article] = rst_mvt![Article] Then 'ce n'est
ni un document ni un outil
resultat = 1
pmpactuel = rst_stock![PMP Actuel]
quantite_actuelle = rst_stock![Quantite Actuelle]
val_stock_mag = rst_stock![Valeur Stock]
End If
rst_stock.MoveNext
Wend
rst_stock.MovePrevious

'Etude des differents type de mouvement
Select Case rst_mvt![TypeMvt]
Case "ISS-WO", "ISS-UNP"
quantite_actuelle = quantite_actuelle + rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + pmpactuel *
rst_mvt![QteMvt]
'insertion dans la table stockini
Insertion_Table rst_stock, quantite_actuelle, val_stock_mag

Case "RCT-PO"
pmpactuel = (pmpactuel * quantite_actuelle - rst_mvt![Prix]
* rst_mvt![QteMvt]) / (quantite_actuelle - rst_mvt![QteMvt])
quantite_actuelle = quantite_actuelle - rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - rst_mvt![Prix] *
rst_mvt![QteMvt]
'insertion dans la table stockini
Insertion_Table rst_stock, quantite_actuelle, val_stock_mag
rst_stock.Edit
rst_stock("[PMP Actuel]") = pmpactuel
rst_stock.Update

Case "RCT-RS", "RCT-UNP"
resultat = 0
pmpsortie = pmpactuel
quantitesortie = quantite_actuelle



position = rst_mvt.Bookmark 'GARDE LA POSITION DE
L'ENREGISTREMENT

Debug.Print position 'AFFICHE UN POINT D'INTERROGATION




While resultat <> 1 'Tant que l'on n'a pas trouve un
mouvement ISS-WO ou ISS-UNP
If rst_stock![Code Article] = rst_mvt![Article] Then
Select Case rst_mvt![TypeMvt]
Case "ISS-UNP", "ISS-WO"
resultat = 1 'la derniere sortie ISS-UNP ou
ISS-WO a ete trouve
'recuperation du PMP
quantite_actuelle = quantite_actuelle -
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - pmpsortie *
rst_mvt![QteMvt]
Insertion_Table rst_stock,
quantite_actuelle, val_stock_mag
Case "ISS-SO"
quantitesortie = quantitesortie +
rst_mvt![QteMvt]
Case "RJCT-WO", "RCT-WO", "RCT-RS", "RCT-WO"
quantitesortie = quantitesortie -
rst_mvt![QteMvt]
Case "CYC-RCNT"
If rst_mvt![QteMvt] > 0 Then
'c'est une entree
quantitesortie = quantitesortie -
rst_mvt![QteMvt]
Else
'c'est une sortie
quantitesortie = quantitesortie +
rst_mvt![QteMvt]

End If
Case "RCT-PO"
'calcul du nouveau PMP
pmpsortie = (pmpsortie *
quantite_actuelle - rst_mvt![Prix] * rst_mvt![QteMvt]) /
(quantite_actuelle - rst_mvt![QteMvt])
End Select
End If
rst_mvt.MoveNext
Wend


rst_mvt.Bookmark = position
'RETOUR A L'ENREGISTREMENT QUI ETAIT EN COURS


Case "ISS-SO"
quantite_actuelle = quantite_actuelle +
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + rst_mvt![Prix]
* rst_mvt![QteMvt]
Insertion_Table rst_stock, quantite_actuelle,
val_stock_mag
Case "CYC-RCNT"
If rst_mvt![QteMvt] > 0 Then 'c'est une entree
quantite_actuelle = quantite_actuelle -
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - pmpactuelle
* rst_mvt![QteMvt]
Else 'c'est une sortie
quantite_actuelle = quantite_actuelle +
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + pmpactuelle
* rst_mvt![QteMvt]
End If

End Select
rst_stock.Close 'fermeture de la table stock
'Liberation des variables objet permettant de designer la
table article
Set rst_stock = Nothing
Set db_stock = Nothing

rst_mvt.MoveNext
Wend

rst_mvt.Close 'fermeture de la table article
'Liberation des variables objet permettant de designer la table article
Set rst_mvt = Nothing
Set db_mvt = Nothing
End Sub

Avatar
Patrice
Bonjour,

Pour contourner le problème, ouvre une deuzième fois la table :

Set rst_mvt = db_mvt.OpenRecordset("SELECT * from dbo_mouvement_copie")
Set rst_mvt1 = db_mvt.OpenRecordset("SELECT * from dbo_mouvement_copie")

et utilise les comme :

Set rst_mvt1 = db_mvt.OpenRecordset("SELECT * from dbo_mouvement_copie")
(ds ton select, tu peux inclure la condition date)
While ((Not rst_mvt1.EOF) And (rst_mvt1![Date] > Date_Souhaitee))
(pour tester la fin de fichier il y a aussi la fonction Do until xxx.eof)

xxxxxxx
While resultat <> 1 'Tant que l'on n'a pas trouve un
mouvement ISS-WO ou ISS-UNP
xxxxxxxxxxx
rst_mvt.MoveNext
Wend
wend


Bonjour,

Tu pourrais faire simplement :
rst-mvt.AbsolutePosition = position, puisque la propriété est accessible en
lecture et écriture.

Même s'il y a d'autres choses qui paraissent, à première vue, un peu
étonnant dans ton programme. Par ex, pourquoi
Set rst_mvt = db_mvt.OpenRecordset("SELECT * from dbo_mouvement_copie")
au lieu de
Set rst_mvt = db_mvt.OpenRecordset("dbo_mouvement_copie"), et :
Set rst_stock = db_stock.OpenRecordset("SELECT * from StockIni") au lieu de :
Set rst_stock = db_stock.OpenRecordset("SELECT * from StockIni WHERE [Code
Article] = " & rst_mvt("Article"))?

Bonne journée,
pgz


Bonsoir,

je viens d'essayer de faire rst-mvt.AbsolutePosition = position mais
j'ai le meme pb qu'avec la fonction bookmark et je ne comprends pas
pourquoi ca ne marche pas.
L'execution est interrompue lorsqu'il arrive sur la ligne While
((Not rst_mvt.EOF) And (rst_mvt![Date] > Date_Souhaitee)). Il dit
qu'il n'y a pas d'enregistrement courant alors que si il se
repositonne au bonne endroit, il y a encore des enregistrements. Savez
a quoi est du cette erreur ?
Sinon, pour ce qui est des Select dans l'ouverture des recordset, au
debut je ne les avais pas mis mais lors de l'execution du programme,
il ne lisait pas les enregistrements dans le meme ordre qu'ils sont
ranges dans la table. Or, j'ai besoin pour des calculs qu'ils
respectent l'ordre de parcours de la table. j'ai donc demande conseil
sur le forum car je suis debutante en VB et Access. On m'a alors
conseille de mettre un select. Penez vous que je dois faire autrement?
merci beaucoup pour votre aide,
Voici ci dessous le code avec la fonction bookmark et j'ai indique en
commentaire la ligne sur laquelle s'arrete l'execution.

Sub Remonte_Mouvement()
'variable permettant de designer la table article
Dim db_stock As DAO.Database
Dim rst_stock As DAO.Recordset

'variable permettant de designer la table mouvement
Dim db_mvt As DAO.Database
Dim rst_mvt As DAO.Recordset

Dim Date_Souhaitee As Date
Dim pmpactuel As Double
Dim pmpsortie As Double

Dim position() As Byte
Dim resultat As Integer
Dim quantite_actuelle As Double
Dim quantitesortie As Double
Dim val_stock_mag As Double

Initialisation_Table
Date_Souhaitee = Date_Saisie()

'Ouverture et positionnement au debut de la table mouvement
Set db_mvt = CurrentDb()
Set rst_mvt = db_mvt.OpenRecordset("SELECT * from dbo_mouvement_copie")

'Tant que l'on n'a pas atteint la fin de la table mouvement
While ((Not rst_mvt.EOF) And (rst_mvt![Date] > Date_Souhaitee))
'APRES L'EXECUTION DU CASE RCT-UNP,RCT-RS, LE PROGRAMME REVIENT SUR
CETTE LIGNE ET IL DIT QU'IL N'Y A PAS D'ENREGITREMENT COURANT

'ouverture et positionnement au debut de la table stock
Set db_stock = CurrentDb()
Set rst_stock = db_stock.OpenRecordset("SELECT * from StockIni")
resultat = 0

'Recherche dans la table stock de l'article correspondant au
mouvement lu
While ((Not rst_stock.EOF) And (resultat <> 1))
If rst_stock![Code Article] = rst_mvt![Article] Then 'ce n'est
ni un document ni un outil
resultat = 1
pmpactuel = rst_stock![PMP Actuel]
quantite_actuelle = rst_stock![Quantite Actuelle]
val_stock_mag = rst_stock![Valeur Stock]
End If
rst_stock.MoveNext
Wend
rst_stock.MovePrevious

'Etude des differents type de mouvement
Select Case rst_mvt![TypeMvt]
Case "ISS-WO", "ISS-UNP"
quantite_actuelle = quantite_actuelle + rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + pmpactuel *
rst_mvt![QteMvt]
'insertion dans la table stockini
Insertion_Table rst_stock, quantite_actuelle, val_stock_mag

Case "RCT-PO"
pmpactuel = (pmpactuel * quantite_actuelle - rst_mvt![Prix]
* rst_mvt![QteMvt]) / (quantite_actuelle - rst_mvt![QteMvt])
quantite_actuelle = quantite_actuelle - rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - rst_mvt![Prix] *
rst_mvt![QteMvt]
'insertion dans la table stockini
Insertion_Table rst_stock, quantite_actuelle, val_stock_mag
rst_stock.Edit
rst_stock("[PMP Actuel]") = pmpactuel
rst_stock.Update

Case "RCT-RS", "RCT-UNP"
resultat = 0
pmpsortie = pmpactuel
quantitesortie = quantite_actuelle



position = rst_mvt.Bookmark 'GARDE LA POSITION DE
L'ENREGISTREMENT

Debug.Print position 'AFFICHE UN POINT D'INTERROGATION




While resultat <> 1 'Tant que l'on n'a pas trouve un
mouvement ISS-WO ou ISS-UNP
If rst_stock![Code Article] = rst_mvt![Article] Then
Select Case rst_mvt![TypeMvt]
Case "ISS-UNP", "ISS-WO"
resultat = 1 'la derniere sortie ISS-UNP ou
ISS-WO a ete trouve
'recuperation du PMP
quantite_actuelle = quantite_actuelle -
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - pmpsortie *
rst_mvt![QteMvt]
Insertion_Table rst_stock,
quantite_actuelle, val_stock_mag
Case "ISS-SO"
quantitesortie = quantitesortie +
rst_mvt![QteMvt]
Case "RJCT-WO", "RCT-WO", "RCT-RS", "RCT-WO"
quantitesortie = quantitesortie -
rst_mvt![QteMvt]
Case "CYC-RCNT"
If rst_mvt![QteMvt] > 0 Then
'c'est une entree
quantitesortie = quantitesortie -
rst_mvt![QteMvt]
Else
'c'est une sortie
quantitesortie = quantitesortie +
rst_mvt![QteMvt]

End If
Case "RCT-PO"
'calcul du nouveau PMP
pmpsortie = (pmpsortie *
quantite_actuelle - rst_mvt![Prix] * rst_mvt![QteMvt]) /
(quantite_actuelle - rst_mvt![QteMvt])
End Select
End If
rst_mvt.MoveNext
Wend


rst_mvt.Bookmark = position
'RETOUR A L'ENREGISTREMENT QUI ETAIT EN COURS


Case "ISS-SO"
quantite_actuelle = quantite_actuelle +
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + rst_mvt![Prix]
* rst_mvt![QteMvt]
Insertion_Table rst_stock, quantite_actuelle,
val_stock_mag
Case "CYC-RCNT"
If rst_mvt![QteMvt] > 0 Then 'c'est une entree
quantite_actuelle = quantite_actuelle -
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - pmpactuelle
* rst_mvt![QteMvt]
Else 'c'est une sortie
quantite_actuelle = quantite_actuelle +
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + pmpactuelle
* rst_mvt![QteMvt]
End If

End Select
rst_stock.Close 'fermeture de la table stock
'Liberation des variables objet permettant de designer la
table article
Set rst_stock = Nothing
Set db_stock = Nothing

rst_mvt.MoveNext
Wend

rst_mvt.Close 'fermeture de la table article
'Liberation des variables objet permettant de designer la table article
Set rst_mvt = Nothing
Set db_mvt = Nothing
End Sub





Avatar
pgz
Déjà, ce n'est plus le même pb qu'au départ.
Tu peux utiliser .bookmark à la place de .Absolute Position, si le resordset
est bookmarkable, ce qui doit être le cas, sinon tu aurais dû avoir une
erreur. Mais tu peux le vérifier en affichant .Bookmarkable qui doit être
vrai.
Sinon pour stocker un signet, il faut une variable qui le puisse d'où:
dim position as variant.

Et si ça ne parche toujours pas ajoute quelques affichage de
rst_mvt.absoluteposition deci delà... et dis-nous ce qu'il en ressort...

Sinon bravo : tu poses tes questions de façon très complète...

pgz
Avatar
c.barbier
Le recordset est bien boomarkable (j&#8217;ai verifie comme vous me
l&#8217;avez dit et on a bien true en sortie). Pour voir le contenu de
la variable position, j&#8217;ai recuperer la position de
l&#8217;enregistrement a l&#8217;aide de la fonction .AbsolutePosition
car avec la fonction bookmark, j&#8217;obtiens un point
d&#8217;interrogation lors de l&#8217;affichage de la valeur de la
position.
J&#8217;ai donc fait des affichages des postions et j&#8217;ai constate
qu&#8217;il va bien jusqu&#8217;a la fin de la table mouvement. Il
realise correctement le programme pour le dernier enregistrement. Puis,
arrive a la fin de la boucle While ((Not rst_mvt.EOF) And
(rst_mvt![Date] > Date_Souhaitee)), il realise le MoveNext qui se situe
juste avant la fin de cette boucle (ce qui est normal).
Comme il s&#8217;agit de la fin de la table, la variable position prend
la valeur -1. Et la, il remonte a la ligne While ((Not rst_mvt.EOF) And
(rst_mvt![Date] > Date_Souhaitee)). A ce moment la, l&#8217;execution
du programme est interronpue et il dit qu&#8217;il n&#8217;y a pas
d&#8217;enregistrement courant.
Ce que je ne comprends pas, c&#8217;est pourquoi lorsqu&#8217;il
revient au debut de la boucle tant que, il ne voit pas que l&#8217;on
est arrive a la fin de la table et qu&#8217;il ne faut pas faire la
boucle.
De plus, lors de la fin de l&#8217;execution du dernier mouvement, il a
bien rst_mvt.EOF a true donc normalement, il devrait savoir que nous
sommes a la fin de la table.

Peut etre qu'avec un extrait de la table, ce sera plus clair :
Voici un extrait de la table mouvement :
Mouvement TypeMvt
4560 RCT-RS
6560 ISS-UNP
85540 ISS-WO
65670 CYC-RCNT

Le mouvement 4560 (RCT-RS) a la position 12 et le mouvement 65670
(CYC-RCNT) a la position 15.
Le programme fonctionne correctement jusqu'au CYC-RCNT. Il realise le
traitement du mouvement puis il passe a l'element suivant (MoveNext
qui se situe juste avant la fin de la boucle While ((Not rst_mvt.EOF)
And (rst_mvt![Date] > Date_Souhaitee))). Apres, il remonte en haut de
la boucle tant que (While ((Not rst_mvt.EOF) And (rst_mvt![Date] >
Date_Souhaitee))) et la l'execution s'arrete car il dit qu'il
n' y a pas d'enregistrement courant.
Ce que je ne comprends pas, c'est pourquoi lorsqu'il revient au
debut de la boucle tant que, il ne voit pas que l'on est arrive a la
fin de la table et qu'il ne faut pas faire la boucle.
De plus, lors de la fin de l'execution du dernier mouvement, il a
bien rst_mvt.EOF a true donc normalement, il devrait savoir que nous
sommes a la fin de la table.
Savez vous d'ou vient le probleme ?

Sinon, j'ai pense a une autre solution. Au lieu de retourner a
l'enregistrement a l'aide de sa position, je pourrais y retourner a
l'aide du code mouvement (il est unique pour chaque mouvement). Mais
je pensais que la methode des positions serait plus rapide.
Vous en pensez quoi, il vaut mieux utiliser quelle methode ?

Mais dans tous les cas, j'aimerai bien comprendre pourquoi
l'execution est interrompue. Parce que je trouve vraiment cela
bizarre, soit ma programmation est vraiment fragile soit il y a quelque
chose que j'ai mal fait.

Voici ci dessous le code.

MERCI BEAUCOUP POUR VOTRE AIDE,


Sub Remonte_Mouvement()
'variable permettant de designer la table article
Dim db_stock As DAO.Database
Dim rst_stock As DAO.Recordset

'variable permettant de designer la table mouvement
Dim db_mvt As DAO.Database
Dim rst_mvt As DAO.Recordset

Dim Date_Souhaitee As Date
Dim pmpactuel As Double
Dim pmpsortie As Double

Dim position As Long
Dim position3 As Long
Dim position2 As Long
Dim resultat As Integer
Dim quantite_actuelle As Double
Dim quantitesortie As Double
Dim val_stock_mag As Double


Debug.Print "DEBUT"

Initialisation_Table
Date_Souhaitee = Date_Saisie()

'Ouverture et positionnement au debut de la table mouvement
Set db_mvt = CurrentDb()
Set rst_mvt = db_mvt.OpenRecordset("SELECT * from dbo_mouvement_copie")

'Tant que l'on n'a pas atteint la fin de la table mouvement
While ((Not rst_mvt.EOF) And (rst_mvt![Date] > Date_Souhaitee))

Debug.Print "passage au debut"

'ouverture et positionnement au debut de la table stock
Set db_stock = CurrentDb()
Set rst_stock = db_stock.OpenRecordset("SELECT * from StockIni")
resultat = 0

'Recherche dans la table stock de l'article correspondant au
mouvement lu
While ((Not rst_stock.EOF) And (resultat <> 1))
If rst_stock![Code Article] = rst_mvt![Article] Then 'ce n'est
ni un document ni un outil
resultat = 1
pmpactuel = rst_stock![PMP Actuel]
quantite_actuelle = rst_stock![Quantite Actuelle]
val_stock_mag = rst_stock![Valeur Stock]
End If
rst_stock.MoveNext
Wend
rst_stock.MovePrevious

'Etude des differents type de mouvement
Select Case rst_mvt![TypeMvt]
Case "ISS-WO", "ISS-UNP"
quantite_actuelle = quantite_actuelle + rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + pmpactuel *
rst_mvt![QteMvt]
'insertion dans la table stockini
Insertion_Table rst_stock, quantite_actuelle, val_stock_mag

Case "RCT-PO"
pmpactuel = (pmpactuel * quantite_actuelle - rst_mvt![Prix]
* rst_mvt![QteMvt]) / (quantite_actuelle - rst_mvt![QteMvt])
quantite_actuelle = quantite_actuelle - rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - rst_mvt![Prix] *
rst_mvt![QteMvt]
'insertion dans la table stockini
Insertion_Table rst_stock, quantite_actuelle, val_stock_mag
rst_stock.Edit
rst_stock("[PMP Actuel]") = pmpactuel
rst_stock.Update

Case "RCT-RS", "RCT-UNP"
resultat = 0
pmpsortie = pmpactuel
quantitesortie = quantite_actuelle


position2 = rst_mvt.AbsolutePosition
Debug.Print "ESSAI 5"
Debug.Print position2
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]


rst_mvt.MoveNext
While resultat <> 1 'Tant que l'on n'a pas trouve un
mouvement ISS-WO ou ISS-UNP
If rst_stock![Code Article] = rst_mvt![Article] Then
Select Case rst_mvt![TypeMvt]
Case "ISS-UNP", "ISS-WO"
resultat = 1 'la derniere sortie ISS-UNP ou
ISS-WO a ete trouve
'recuperation du PMP
quantite_actuelle = quantite_actuelle -
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - pmpsortie *
rst_mvt![QteMvt]


Debug.Print "position + 1"
position = rst_mvt.AbsolutePosition
Debug.Print position
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]
rst_mvt.AbsolutePosition = position2



position3 = rst_mvt.AbsolutePosition
Debug.Print "retour position"
Debug.Print position3
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]



Insertion_Table rst_stock,
quantite_actuelle, val_stock_mag



position3 = rst_mvt.AbsolutePosition
Debug.Print "apres insertion PMP"
Debug.Print position3
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]



Case "ISS-SO"
quantitesortie = quantitesortie +
rst_mvt![QteMvt]
Case "RJCT-WO", "RCT-WO", "RCT-RS", "RCT-WO"
quantitesortie = quantitesortie -
rst_mvt![QteMvt]
Case "CYC-RCNT"
If rst_mvt![QteMvt] > 0 Then
'c'est une entree
quantitesortie = quantitesortie -
rst_mvt![QteMvt]
Else
'c'est une sortie
quantitesortie = quantitesortie +
rst_mvt![QteMvt]

End If
Case "RCT-PO"
'calcul du nouveau PMP
pmpsortie = (pmpsortie *
quantite_actuelle - rst_mvt![Prix] * rst_mvt![QteMvt]) /
(quantite_actuelle - rst_mvt![QteMvt])
End Select


position3 = rst_mvt.AbsolutePosition
Debug.Print "apres le select"
Debug.Print position3
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]


End If


position3 = rst_mvt.AbsolutePosition
Debug.Print "juste avant le movenext"
Debug.Print position3
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]


rst_mvt.MoveNext



position3 = rst_mvt.AbsolutePosition
Debug.Print "juste apres le movenext"
Debug.Print position3
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]


Wend

Case "ISS-SO"
quantite_actuelle = quantite_actuelle +
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + rst_mvt![Prix]
* rst_mvt![QteMvt]
Insertion_Table rst_stock, quantite_actuelle,
val_stock_mag
Case "CYC-RCNT"
If rst_mvt![QteMvt] > 0 Then 'c'est une entree
quantite_actuelle = quantite_actuelle -
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - pmpactuelle
* rst_mvt![QteMvt]
Else 'c'est une sortie
quantite_actuelle = quantite_actuelle +
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + pmpactuelle
* rst_mvt![QteMvt]
End If

End Select
rst_stock.Close 'fermeture de la table stock
'Liberation des variables objet permettant de designer la table
article
Set rst_stock = Nothing
Set db_stock = Nothing





position3 = rst_mvt.AbsolutePosition
Debug.Print "juste avant le movenext de la fin"
Debug.Print position3
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]



rst_mvt.MoveNext 'LORSQUE NOUS EN SOMMES A LA FIN DU TRAITEMENT
DU DERNIER MOUVEMENT, ON PASSE A L'ELEMENT SUIVANT, MAIS COMME NOUS
SOMMES A LA FIN DE LA TABLE, ON N'A PAS D'ELEMENT SUIVANT DONC LA
VARIABLE POSITION PREND LA VALEUR -1. MAIS LE PROBLEME EST LORSQUE
L'ON REMONTE AU DEBUT DE CETTE BOUCLE, IL NE DETECTE PAS QUE NOUS
SOMMES A LA FIN DE LA TABLE ET IL ARRETE L'EXECUTION ET DIT QUE
QU'IL N'Y A PAS D'ENREGISTREMENT COURANT.




position3 = rst_mvt.AbsolutePosition
Debug.Print "juste apres le movenext de la fin"
Debug.Print position3
' Debug.Print rst_mvt![TypeMvt]
'Debug.Print rst_mvt![Mouvement]

Debug.Print rst_mvt.EOF 'PAR CONTRE, LORS DU DERNIER PASSAGE SUR
CETTE INSTRUCTION, C'EST A DIRE A LA FIN DU TRAITEMENT DU DERNIER
MOUVEMENT DE LA TABLE, ON A BIEN rst_mvt.EOF a true donc il devrait
savoir que c'est la fin de la table lorsqu'il remonte en haut de la
boucle.

Wend

rst_mvt.Close 'fermeture de la table article
'Liberation des variables objet permettant de designer la table article
Set rst_mvt = Nothing
Set db_mvt = Nothing
End Sub
Avatar
pgz
Bonjour,

le pb semble donc venir de la boucle qui ne détecte pas EOF. Il serait
intéressant de faire 2 essais:
essai 1 : supprimer la condition sur date;
essai2 : écrire le critère date : Nz(rst-mvt("Date"),0) > ...
esssai3: écrire le critère Nz(rst_mvt("Date")>date_Souhaitée, false)

On verra ce que ça donne.

pgz
Avatar
c.barbier
Bonjour,

Je n'arrive toujours pas a resoudre mon probleme. Quelqu'un sait il ou
est l'erreur?

Merci beaucoup,
Avatar
Raymond [mvp]
Bonjour.

à ma connaissance AbsolutePosition mémorise la position -1 et le GoToRecord
positionne sur le numéro réel ce qui doit déjà provoquer un décalage de 1.
il serait préférable de passer par :
rst_mvt.AbsolutePosition = position
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


a écrit dans le message de news:


Bonjour,

Je n'arrive toujours pas a resoudre mon probleme. Quelqu'un sait il ou
est l'erreur?

Merci beaucoup,



Avatar
c.barbier
Bonjour,

J'ai essaye avec la fonction boomark et absolute position. Mais le
programme plante lorsqu'il arrive a la fin de la table. Voici ci
dessous l'explication du pb. Le test de la boucle While ((Not
rst_mvt.EOF) And (rst_mvt![Date] > Date_Souhaitee))ne detecte pas la
fin de la table alors que rst_mvt.EOF est a true. Il dit qu'il n'y a
pas d'enregistrement courant.
J'ai donc fait des affichages des postions et j'ai constate qu'il
va bien jusqu'a la fin de la table mouvement. Il realise correctement
le programme pour le dernier enregistrement. Puis, arrive a la fin de
la boucle While ((Not rst_mvt.EOF) And (rst_mvt![Date] >
Date_Souhaitee)), il realise le MoveNext qui se situe juste avant la
fin de cette boucle (ce qui est normal).
Comme il s'agit de la fin de la table, la variable position prend la
valeur -1. Et la, il remonte a la ligne While ((Not rst_mvt.EOF) And
(rst_mvt![Date] > Date_Souhaitee)). A ce moment la, l'execution du
programme est interronpue et il dit qu'il n'y a pas
d'enregistrement courant.
Ce que je ne comprends pas, c'est pourquoi lorsqu'il revient au
debut de la boucle tant que, il ne voit pas que l'on est arrive a la
fin de la table et qu'il ne faut pas faire la boucle.
De plus, lors de la fin de l'execution du dernier mouvement, il a
bien rst_mvt.EOF a true donc normalement, il devrait savoir que nous
sommes a la fin de la table.


Peut etre qu'avec un extrait de la table, ce sera plus clair :
Voici un extrait de la table mouvement :
Mouvement TypeMvt
4560 RCT-RS
6560 ISS-UNP
85540 ISS-WO
65670 CYC-RCNT

Le mouvement 4560 (RCT-RS) a la position 12 et le mouvement 65670
(CYC-RCNT) a la position 15.
Le programme fonctionne correctement jusqu'au CYC-RCNT. Il realise le
traitement du mouvement puis il passe a l'element suivant (MoveNext
qui se situe juste avant la fin de la boucle While ((Not rst_mvt.EOF)
And (rst_mvt![Date] > Date_Souhaitee))). Apres, il remonte en haut de
la boucle tant que (While ((Not rst_mvt.EOF) And (rst_mvt![Date] >
Date_Souhaitee))) et la l'execution s'arrete car il dit qu'il
n' y a pas d'enregistrement courant.
Ce que je ne comprends pas, c'est pourquoi lorsqu'il revient au
debut de la boucle tant que, il ne voit pas que l'on est arrive a la
fin de la table et qu'il ne faut pas faire la boucle.
De plus, lors de la fin de l'execution du dernier mouvement, il a
bien rst_mvt.EOF a true donc normalement, il devrait savoir que nous
sommes a la fin de la table.
Savez vous d'ou vient le probleme ?

Sinon, j'ai pense a une autre solution. Au lieu de retourner a
l'enregistrement a l'aide de sa position, je pourrais y retourner a
l'aide du code mouvement (il est unique pour chaque mouvement). Mais
je pensais que la methode des positions serait plus rapide.
Vous en pensez quoi, il vaut mieux utiliser quelle methode ?

Mais dans tous les cas, j'aimerai bien comprendre pourquoi
l'execution est interrompue. Parce que je trouve vraiment cela
bizarre, soit ma programmation est vraiment fragile soit il y a quelque
chose que j'ai mal fait.

Voici ci dessous le code.

MERCI BEAUCOUP POUR VOTRE AIDE,


Sub Remonte_Mouvement()
'variable permettant de designer la table article
Dim db_stock As DAO.Database
Dim rst_stock As DAO.Recordset

'variable permettant de designer la table mouvement
Dim db_mvt As DAO.Database
Dim rst_mvt As DAO.Recordset

Dim Date_Souhaitee As Date
Dim pmpactuel As Double
Dim pmpsortie As Double

Dim position As Long
Dim position3 As Long
Dim position2 As Long
Dim resultat As Integer
Dim quantite_actuelle As Double
Dim quantitesortie As Double
Dim val_stock_mag As Double


Debug.Print "DEBUT"

Initialisation_Table
Date_Souhaitee = Date_Saisie()

'Ouverture et positionnement au debut de la table mouvement
Set db_mvt = CurrentDb()
Set rst_mvt = db_mvt.OpenRecordset("SELECT * from dbo_mouvement_copie")

'Tant que l'on n'a pas atteint la fin de la table mouvement
While ((Not rst_mvt.EOF) And (rst_mvt![Date] > Date_Souhaitee))

Debug.Print "passage au debut"

'ouverture et positionnement au debut de la table stock
Set db_stock = CurrentDb()
Set rst_stock = db_stock.OpenRecordset("SELECT * from StockIni")
resultat = 0

'Recherche dans la table stock de l'article correspondant au
mouvement lu
While ((Not rst_stock.EOF) And (resultat <> 1))
If rst_stock![Code Article] = rst_mvt![Article] Then 'ce n'est
ni un document ni un outil
resultat = 1
pmpactuel = rst_stock![PMP Actuel]
quantite_actuelle = rst_stock![Quantite Actuelle]
val_stock_mag = rst_stock![Valeur Stock]
End If
rst_stock.MoveNext
Wend
rst_stock.MovePrevious

'Etude des differents type de mouvement
Select Case rst_mvt![TypeMvt]
Case "ISS-WO", "ISS-UNP"
quantite_actuelle = quantite_actuelle + rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + pmpactuel *
rst_mvt![QteMvt]
'insertion dans la table stockini
Insertion_Table rst_stock, quantite_actuelle, val_stock_mag

Case "RCT-PO"
pmpactuel = (pmpactuel * quantite_actuelle - rst_mvt![Prix]
* rst_mvt![QteMvt]) / (quantite_actuelle - rst_mvt![QteMvt])
quantite_actuelle = quantite_actuelle - rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - rst_mvt![Prix] *
rst_mvt![QteMvt]
'insertion dans la table stockini
Insertion_Table rst_stock, quantite_actuelle, val_stock_mag
rst_stock.Edit
rst_stock("[PMP Actuel]") = pmpactuel
rst_stock.Update

Case "RCT-RS", "RCT-UNP"
resultat = 0
pmpsortie = pmpactuel
quantitesortie = quantite_actuelle


position2 = rst_mvt.AbsolutePosition
Debug.Print "ESSAI 5"
Debug.Print position2
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]


rst_mvt.MoveNext
While resultat <> 1 'Tant que l'on n'a pas trouve un
mouvement ISS-WO ou ISS-UNP
If rst_stock![Code Article] = rst_mvt![Article] Then
Select Case rst_mvt![TypeMvt]
Case "ISS-UNP", "ISS-WO"
resultat = 1 'la derniere sortie ISS-UNP ou
ISS-WO a ete trouve
'recuperation du PMP
quantite_actuelle = quantite_actuelle -
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - pmpsortie *
rst_mvt![QteMvt]


Debug.Print "position + 1"
position = rst_mvt.AbsolutePosition
Debug.Print position
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]
rst_mvt.AbsolutePosition = position2



position3 = rst_mvt.AbsolutePosition
Debug.Print "retour position"
Debug.Print position3
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]



Insertion_Table rst_stock,
quantite_actuelle, val_stock_mag



position3 = rst_mvt.AbsolutePosition
Debug.Print "apres insertion PMP"
Debug.Print position3
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]



Case "ISS-SO"
quantitesortie = quantitesortie +
rst_mvt![QteMvt]
Case "RJCT-WO", "RCT-WO", "RCT-RS", "RCT-WO"
quantitesortie = quantitesortie -
rst_mvt![QteMvt]
Case "CYC-RCNT"
If rst_mvt![QteMvt] > 0 Then
'c'est une entree
quantitesortie = quantitesortie -
rst_mvt![QteMvt]
Else
'c'est une sortie
quantitesortie = quantitesortie +
rst_mvt![QteMvt]

End If
Case "RCT-PO"
'calcul du nouveau PMP
pmpsortie = (pmpsortie *
quantite_actuelle - rst_mvt![Prix] * rst_mvt![QteMvt]) /
(quantite_actuelle - rst_mvt![QteMvt])
End Select


position3 = rst_mvt.AbsolutePosition
Debug.Print "apres le select"
Debug.Print position3
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]


End If


position3 = rst_mvt.AbsolutePosition
Debug.Print "juste avant le movenext"
Debug.Print position3
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]


rst_mvt.MoveNext



position3 = rst_mvt.AbsolutePosition
Debug.Print "juste apres le movenext"
Debug.Print position3
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]


Wend

Case "ISS-SO"
quantite_actuelle = quantite_actuelle +
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + rst_mvt![Prix]
* rst_mvt![QteMvt]
Insertion_Table rst_stock, quantite_actuelle,
val_stock_mag
Case "CYC-RCNT"
If rst_mvt![QteMvt] > 0 Then 'c'est une entree
quantite_actuelle = quantite_actuelle -
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag - pmpactuelle
* rst_mvt![QteMvt]
Else 'c'est une sortie
quantite_actuelle = quantite_actuelle +
rst_mvt![QteMvt]
val_stock_mag = val_stock_mag + pmpactuelle
* rst_mvt![QteMvt]
End If

End Select
rst_stock.Close 'fermeture de la table stock
'Liberation des variables objet permettant de designer la table
article
Set rst_stock = Nothing
Set db_stock = Nothing





position3 = rst_mvt.AbsolutePosition
Debug.Print "juste avant le movenext de la fin"
Debug.Print position3
Debug.Print rst_mvt![TypeMvt]
Debug.Print rst_mvt![Mouvement]



rst_mvt.MoveNext 'LORSQUE NOUS EN SOMMES A LA FIN DU TRAITEMENT
DU DERNIER MOUVEMENT, ON PASSE A L'ELEMENT SUIVANT, MAIS COMME NOUS
SOMMES A LA FIN DE LA TABLE, ON N'A PAS D'ELEMENT SUIVANT DONC LA
VARIABLE POSITION PREND LA VALEUR -1. MAIS LE PROBLEME EST LORSQUE
L'ON REMONTE AU DEBUT DE CETTE BOUCLE, IL NE DETECTE PAS QUE NOUS
SOMMES A LA FIN DE LA TABLE ET IL ARRETE L'EXECUTION ET DIT QUE
QU'IL N'Y A PAS D'ENREGISTREMENT COURANT.




position3 = rst_mvt.AbsolutePosition
Debug.Print "juste apres le movenext de la fin"
Debug.Print position3
' Debug.Print rst_mvt![TypeMvt]
'Debug.Print rst_mvt![Mouvement]

Debug.Print rst_mvt.EOF 'PAR CONTRE, LORS DU DERNIER PASSAGE SUR
CETTE INSTRUCTION, C'EST A DIRE A LA FIN DU TRAITEMENT DU DERNIER
MOUVEMENT DE LA TABLE, ON A BIEN rst_mvt.EOF a true donc il devrait
savoir que c'est la fin de la table lorsqu'il remonte en haut de la
boucle.

Wend

rst_mvt.Close 'fermeture de la table article
'Liberation des variables objet permettant de designer la table article
Set rst_mvt = Nothing
Set db_mvt = Nothing
End Sub
Avatar
Raymond [mvp]
ça me parait normal étant donné la condition And .
d'autre part ce ne sont pas deux conditions reliables par and ou Or. il faut
indiquer la seule condition EOF sur le while et dessous placer une condition
If sur la date pour faire sortir prématurément de la boucle ou sauter
l'enregistrement.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


a écrit dans le message de news:

Bonjour,

J'ai essaye avec la fonction boomark et absolute position. Mais le
programme plante lorsqu'il arrive a la fin de la table. Voici ci
dessous l'explication du pb. Le test de la boucle While ((Not
rst_mvt.EOF) And (rst_mvt![Date] > Date_Souhaitee))ne detecte pas la
fin de la table alors que rst_mvt.EOF est a true. Il dit qu'il n'y a
pas d'enregistrement courant.


1 2