positionnement sur un enregistrement precis d'une table
14 réponses
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
'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
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
Ok, c’est bon, ca marche. Merci beaucoup. Mais je ne comprends pas pourquoi la condition Not rst_mvt.EOF et la condition rst_mvt![Date] > Date_Souhaitee sont incompatibles ? Est ce que c’est pareil pour la condition Not rst_stock.EOF et la condition resultat <> 1 ?
De plus, j’ai un petit probleme au niveau de la saisie de la date. Mon pb est le suivant :
Je souhaite pouvoir saisir dans une inputbox une date de la forme dd/mm/yyyy. Sur le forum, j’ai vu la fonction suivante :
Sub Date_Saisie() Dim date_souhaitee As Date On Error Resume Next Do Err.Clear date_souhaitee = CDate(InputBox("Si la date vous convient, cliquez sur OK", "Veuillez saisir une date", Format(Now, "dd/mm/yyyy"))) Loop While Err.Number <> 0 Debug.Print date_souhaitee End Sub
Je ne comprends pas dans quel cas, on a le message « Veuillez saisir une date » qui s’affiche. De plus, lorsque je saisie comme date uniquement un chiffre, par exemple 8, il me retourne une date incoherente avec la saisie (il retourne par exemple 03/02/1900). Comment fait on pour que si l’utilisateur saisi un seul chiffre et non une date, ca detecte l’erreur et lui demande de resaisir une date ?
Merci beaucoup,
Bonjour,
Ok, c’est bon, ca marche. Merci beaucoup.
Mais je ne comprends pas pourquoi la condition Not rst_mvt.EOF et la
condition rst_mvt![Date] > Date_Souhaitee sont incompatibles ?
Est ce que c’est pareil pour la condition Not rst_stock.EOF et la
condition resultat <> 1 ?
De plus, j’ai un petit probleme au niveau de la saisie de la
date. Mon pb est le suivant :
Je souhaite pouvoir saisir dans une inputbox une date de la forme
dd/mm/yyyy. Sur le forum, j’ai vu la fonction suivante :
Sub Date_Saisie()
Dim date_souhaitee As Date
On Error Resume Next
Do
Err.Clear
date_souhaitee = CDate(InputBox("Si la date vous convient, cliquez
sur OK", "Veuillez saisir une date", Format(Now, "dd/mm/yyyy")))
Loop While Err.Number <> 0
Debug.Print date_souhaitee
End Sub
Je ne comprends pas dans quel cas, on a le message « Veuillez saisir
une date » qui s’affiche.
De plus, lorsque je saisie comme date uniquement un chiffre, par
exemple 8, il me retourne une date incoherente avec la saisie (il
retourne par exemple 03/02/1900). Comment fait on pour que si
l’utilisateur saisi un seul chiffre et non une date, ca detecte
l’erreur et lui demande de resaisir une date ?
Ok, c’est bon, ca marche. Merci beaucoup. Mais je ne comprends pas pourquoi la condition Not rst_mvt.EOF et la condition rst_mvt![Date] > Date_Souhaitee sont incompatibles ? Est ce que c’est pareil pour la condition Not rst_stock.EOF et la condition resultat <> 1 ?
De plus, j’ai un petit probleme au niveau de la saisie de la date. Mon pb est le suivant :
Je souhaite pouvoir saisir dans une inputbox une date de la forme dd/mm/yyyy. Sur le forum, j’ai vu la fonction suivante :
Sub Date_Saisie() Dim date_souhaitee As Date On Error Resume Next Do Err.Clear date_souhaitee = CDate(InputBox("Si la date vous convient, cliquez sur OK", "Veuillez saisir une date", Format(Now, "dd/mm/yyyy"))) Loop While Err.Number <> 0 Debug.Print date_souhaitee End Sub
Je ne comprends pas dans quel cas, on a le message « Veuillez saisir une date » qui s’affiche. De plus, lorsque je saisie comme date uniquement un chiffre, par exemple 8, il me retourne une date incoherente avec la saisie (il retourne par exemple 03/02/1900). Comment fait on pour que si l’utilisateur saisi un seul chiffre et non une date, ca detecte l’erreur et lui demande de resaisir une date ?
Merci beaucoup,
Raymond [mvp]
parce qu'il faut que les deux conditions soient réunies pour que la boucle cesse, ce qui a peu de chance de se trouver sur une fin de fichier qui n'a pas d'enregistrement actif. c'est valable pour tout ton code. si tu saisis un nombre pour indiquer la date, tu indiques donc le nombre de jours écoulés depuis la date de référence qui est le 31/12/1899. si tu composes 10 tu indiques la date du 9 janvier 1900. -- @+ 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,
Ok, c’est bon, ca marche. Merci beaucoup. Mais je ne comprends pas pourquoi la condition Not rst_mvt.EOF et la condition rst_mvt![Date] > Date_Souhaitee sont incompatibles ? Est ce que c’est pareil pour la condition Not rst_stock.EOF et la condition resultat <> 1 ?
De plus, j’ai un petit probleme au niveau de la saisie de la date. Mon pb est le suivant :
Je souhaite pouvoir saisir dans une inputbox une date de la forme dd/mm/yyyy. Sur le forum, j’ai vu la fonction suivante :
Sub Date_Saisie() Dim date_souhaitee As Date On Error Resume Next Do Err.Clear date_souhaitee = CDate(InputBox("Si la date vous convient, cliquez sur OK", "Veuillez saisir une date", Format(Now, "dd/mm/yyyy"))) Loop While Err.Number <> 0 Debug.Print date_souhaitee End Sub
Je ne comprends pas dans quel cas, on a le message « Veuillez saisir une date » qui s’affiche. De plus, lorsque je saisie comme date uniquement un chiffre, par exemple 8, il me retourne une date incoherente avec la saisie (il retourne par exemple 03/02/1900). Comment fait on pour que si l’utilisateur saisi un seul chiffre et non une date, ca detecte l’erreur et lui demande de resaisir une date ?
Merci beaucoup,
parce qu'il faut que les deux conditions soient réunies pour que la boucle
cesse, ce qui a peu de chance de se trouver sur une fin de fichier qui n'a
pas d'enregistrement actif.
c'est valable pour tout ton code.
si tu saisis un nombre pour indiquer la date, tu indiques donc le nombre de
jours écoulés depuis la date de référence qui est le 31/12/1899. si tu
composes 10 tu indiques la date du 9 janvier 1900.
--
@+
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
<c.barbier@smileye.com> a écrit dans le message de news:
1125477655.978807.100620@g49g2000cwa.googlegroups.com...
Bonjour,
Ok, c’est bon, ca marche. Merci beaucoup.
Mais je ne comprends pas pourquoi la condition Not rst_mvt.EOF et la
condition rst_mvt![Date] > Date_Souhaitee sont incompatibles ?
Est ce que c’est pareil pour la condition Not rst_stock.EOF et la
condition resultat <> 1 ?
De plus, j’ai un petit probleme au niveau de la saisie de la
date. Mon pb est le suivant :
Je souhaite pouvoir saisir dans une inputbox une date de la forme
dd/mm/yyyy. Sur le forum, j’ai vu la fonction suivante :
Sub Date_Saisie()
Dim date_souhaitee As Date
On Error Resume Next
Do
Err.Clear
date_souhaitee = CDate(InputBox("Si la date vous convient, cliquez
sur OK", "Veuillez saisir une date", Format(Now, "dd/mm/yyyy")))
Loop While Err.Number <> 0
Debug.Print date_souhaitee
End Sub
Je ne comprends pas dans quel cas, on a le message « Veuillez saisir
une date » qui s’affiche.
De plus, lorsque je saisie comme date uniquement un chiffre, par
exemple 8, il me retourne une date incoherente avec la saisie (il
retourne par exemple 03/02/1900). Comment fait on pour que si
l’utilisateur saisi un seul chiffre et non une date, ca detecte
l’erreur et lui demande de resaisir une date ?
parce qu'il faut que les deux conditions soient réunies pour que la boucle cesse, ce qui a peu de chance de se trouver sur une fin de fichier qui n'a pas d'enregistrement actif. c'est valable pour tout ton code. si tu saisis un nombre pour indiquer la date, tu indiques donc le nombre de jours écoulés depuis la date de référence qui est le 31/12/1899. si tu composes 10 tu indiques la date du 9 janvier 1900. -- @+ 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,
Ok, c’est bon, ca marche. Merci beaucoup. Mais je ne comprends pas pourquoi la condition Not rst_mvt.EOF et la condition rst_mvt![Date] > Date_Souhaitee sont incompatibles ? Est ce que c’est pareil pour la condition Not rst_stock.EOF et la condition resultat <> 1 ?
De plus, j’ai un petit probleme au niveau de la saisie de la date. Mon pb est le suivant :
Je souhaite pouvoir saisir dans une inputbox une date de la forme dd/mm/yyyy. Sur le forum, j’ai vu la fonction suivante :
Sub Date_Saisie() Dim date_souhaitee As Date On Error Resume Next Do Err.Clear date_souhaitee = CDate(InputBox("Si la date vous convient, cliquez sur OK", "Veuillez saisir une date", Format(Now, "dd/mm/yyyy"))) Loop While Err.Number <> 0 Debug.Print date_souhaitee End Sub
Je ne comprends pas dans quel cas, on a le message « Veuillez saisir une date » qui s’affiche. De plus, lorsque je saisie comme date uniquement un chiffre, par exemple 8, il me retourne une date incoherente avec la saisie (il retourne par exemple 03/02/1900). Comment fait on pour que si l’utilisateur saisi un seul chiffre et non une date, ca detecte l’erreur et lui demande de resaisir une date ?
Merci beaucoup,
Jc
Bonjour(soir) Raymond,
"Raymond [mvp]" a écrit dans le message de news:
parce qu'il faut que les deux conditions soient réunies pour que la boucle cesse, ce qui a peu de chance de se trouver sur une fin de fichier qui n'a pas d'enregistrement actif. c'est valable pour tout ton code. si tu saisis un nombre pour indiquer la date, tu indiques donc le nombre de jours écoulés depuis la date de référence qui est le 31/12/1899. si tu composes 10 tu indiques la date du 9 janvier 1900.
Ce n'est pas le 30-12-1899, plutôt ?
-- Bonne fin de journée. ---------------------------------------- Jclg88 Cliquer sur ce lien pour me joindre par mél : http://cerbermail.com/?JVKAlLV1Rf ----------------------------------------
Bonjour(soir) Raymond,
"Raymond [mvp]" <XYZ.officesystem.access@free.fr> a écrit dans le message de
news: u96K70irFHA.3720@TK2MSFTNGP14.phx.gbl...
parce qu'il faut que les deux conditions soient réunies pour que la boucle
cesse, ce qui a peu de chance de se trouver sur une fin de fichier qui n'a
pas d'enregistrement actif.
c'est valable pour tout ton code.
si tu saisis un nombre pour indiquer la date, tu indiques donc le nombre
de jours écoulés depuis la date de référence qui est le 31/12/1899. si tu
composes 10 tu indiques la date du 9 janvier 1900.
Ce n'est pas le 30-12-1899, plutôt ?
--
Bonne fin de journée.
----------------------------------------
Jclg88
Cliquer sur ce lien pour me joindre par mél :
http://cerbermail.com/?JVKAlLV1Rf
----------------------------------------
parce qu'il faut que les deux conditions soient réunies pour que la boucle cesse, ce qui a peu de chance de se trouver sur une fin de fichier qui n'a pas d'enregistrement actif. c'est valable pour tout ton code. si tu saisis un nombre pour indiquer la date, tu indiques donc le nombre de jours écoulés depuis la date de référence qui est le 31/12/1899. si tu composes 10 tu indiques la date du 9 janvier 1900.
Ce n'est pas le 30-12-1899, plutôt ?
-- Bonne fin de journée. ---------------------------------------- Jclg88 Cliquer sur ce lien pour me joindre par mél : http://cerbermail.com/?JVKAlLV1Rf ----------------------------------------
Raymond [mvp]
oui, oui, exact, erreur de frappe.
-- @+ 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
"Jc" a écrit dans le message de news:
Bonjour(soir) Raymond,
Ce n'est pas le 30-12-1899, plutôt ?
oui, oui, exact, erreur de frappe.
--
@+
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
"Jc" <remplacer.par.ma.signature@free.fr> a écrit dans le message de news:
eVIqyBjrFHA.2596@TK2MSFTNGP09.phx.gbl...
-- @+ 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