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

probleme pour faire un calcul

4 réponses
Avatar
c.barbier
Bonjour,

Je souhaite realise un calcul a partir des differents champs se
trouvant dans une table. Je souhaite effectuer pour l'enregistrement
n le calcul suivant :
Qantite3(n) = Quantite1(n) + Quantite3(n-1)
J'ai donc ecrit cela en VB de la maniere suivante :

rst_resultat("Quantite3") = rst_resultat("Quantite1") + .....
Mon probleme est : je ne sais pas comment faire pour la valeur de
Quantite3(n-1) car pour cela, il faudrait que je remonte a
l'enregistrement precedent. J'avais pense utilise MovePrevious mais
est ce que l'on peut l'utiliser dans les calculs ? Si oui, comment
?
Sinon avez vous une autre solution pour faire ce calcul
Merci beaucoup,

4 réponses

Avatar
c.barbier
J’ai essaye la chose suivante :

rst_resultat.MovePrevious
QtePrecedente = rst_resultat![Quantite3]
rst_resultat.MoveNext
rst_resultat("Quantite3") = rst_resultat("Quantite1") + QtePrecedente

mais ca ne marche pas. Le probleme est sur la variable
rst_resultat![Quantite3]
. Elle n’a pas de valeur. De plus, je ne trouve pas cela tres
joli comme programmation. Alors si vous avez des conseils a me donner,
je suis preneuse.
Merci beaucoup,
Avatar
Raymond [mvp]
Bonsoir.

il faudrait expliciter un peu.

tu travailles sur un formulaire ou un recordset avec uniquement du code vba
?
quelles est la ligne exacte en erreur ?
quelle est la procédure pour déclarer le recordset et le modifier ?

--
@+
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:

J’ai essaye la chose suivante :

rst_resultat.MovePrevious
QtePrecedente = rst_resultat![Quantite3]
rst_resultat.MoveNext
rst_resultat("Quantite3") = rst_resultat("Quantite1") + QtePrecedente

mais ca ne marche pas. Le probleme est sur la variable
rst_resultat![Quantite3]
. Elle n’a pas de valeur. De plus, je ne trouve pas cela tres
joli comme programmation. Alors si vous avez des conseils a me donner,
je suis preneuse.
Merci beaucoup,



Avatar
c.barbier
Bonjour,

Je travaille avec un recordset avec uniquement du VBA Il y a ni
formulaire, ni requete.
Voici ci dessous la procedure ou se trouve le recorset en erreur. Il
s''agit du recordset rst_resultat. J''ai ecrit en majuscule la ligne ou
il y a l'erreur
Merci beaucoup pour votre aide,

Sub Principale()

'variable permettant de designer la table article
Dim db_art As DAO.Database
Dim rst_art As DAO.Recordset

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

'variable permettant de designer la table resultat
Dim db_resultat As DAO.Database
Dim rst_resultat As DAO.Recordset

Dim stock_final As Double 'valeur du stock final
Dim code_article As String 'code de l'article lu dans la table article
Dim article As String 'code article lu dans la table mouvement
Dim annee As Integer 'annee extraite de la date lu dans la table
mouvement
Dim annee_souhaitee As Integer 'annee pour laquelle l'utilisateur
souhaite connaitre la valeur du stock
Dim mois As Integer 'mois extrait de la date lu dans la table mouvement
Dim mois_souhaite As Integer 'mois pour lequel l'utilisateur souhaite
connaitre la valeur du stock
Dim QtePrecedente As Double


annee_souhaitee = Saisie_Annee_Souhaitee() 'recuperation de l'annee
saisi par l'utilisateur
mois_souhaite = Saisie_Mois_Souhaite() 'recuperation du mois saisi par
l'utilisateur
'Debug.Print annee_souhaitee 'affichage de la variable annee_souhaitee
stock_final = 0 'initialisation de la valeur du stock final a 0

'ouverture et positionnement au debut de la table article
Set db_art = CurrentDb()
Set rst_art = db_art.OpenRecordset("SELECT * from dbo_article_copie")

While Not rst_art.EOF 'tant que l'on n'a pas atteint la fin de la table
'si la valeur du champ AchetPlan de la table article n'est pas un
outil
If rst_art![AchetPlan] <> "OUT" Then
code_article = rst_art![Code] 'lecture du code article de la
table dbo-article
StockIni (code_article) 'Appel de la procedure permettant de
mettre la valeur du stock initial, d'un article donne, dans la table
resultat

'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
article = rst_mvt![article] 'lecture du code article dans
la table des mouvements
annee = Year(rst_mvt![Date]) 'recuperation de l'annee dans
le champ date de la table mouvement
mois = Month(rst_mvt![Date]) 'recuperation du mois dans le
champ date de la table mouvement


If ((code_article = article) And (annee = annee_souhaitee)
And (mois = mois_souhaite)) Then
If rst_mvt![TypeMvt] = "RCT-PO" Then
'Ouverture et positionnement au debut de la table
resultat
Set db_resultat = CurrentDb()
Set rst_resultat db_resultat.OpenRecordset("SELECT * from tbl_resultat")
'Ajout du mouvement et du resultat des calculs dans
la table resultat
rst_resultat.AddNew
rst_resultat("CodeArticle") = code_article
rst_resultat("Designation") rst_art![Description1]
rst_resultat("CodeMvt") = rst_mvt![Mouvement]
rst_resultat("TypeMvt") = rst_mvt![TypeMvt]
rst_resultat("Quantite1") = rst_mvt![QteMvt]
rst_resultat("PrixUnit1") = rst_mvt![Prix]
rst_resultat("Montant1") rst_resultat("Quantite1") * rst_resultat("PrixUnit1")
rst_resultat.Update

'Calcul de la quantite en stock

rst_resultat.MovePrevious
'QtePrecedente = rst_resultat![Quantite3]
Debug.Print rst_mvt![Mouvement]



'BUG A LA LIGNE SUIVANTE:


Debug.Print rst_resultat![Quantite3] ' C''EST ICI
QUE CA BUG,IL DIT Run-time error 3021 No current record. Or, il y a
forcement un enregistrement car chaque article a une valeur de stock
initial qui est enregistre juste avant dans la table resultat



rst_resultat.MoveNext
rst_resultat.AddNew
rst_resultat("Quantite3") rst_resultat("Quantite1") + QtePrecedente
rst_resultat.Update

rst_resultat.Close 'Fermeture de la table resultat
'Liberation des variables permettant de designer la
table resultat
Set rst_resultat = Nothing
Set db_resultat = Nothing

End If


End If
rst_mvt.MoveNext 'passage au mouvement suivant
Wend

rst_mvt.Close 'fermeture de la table mouvement
'Liberation des variables objets permettant de designer la
table mouvement
Set rst_mvt = Nothing
Set db_mvt = Nothing

End If
rst_art.MoveNext 'passer a l'element suivant
Wend


rst_art.Close 'fermeture de la table article
'Liberation des variables objet permettant de designer la table article
Set rst_art = Nothing
Set db_art = Nothing

End Sub
Avatar
Raymond [mvp]
Bonjour.

arrête de passer des messages sur les deux conversations, reste toujours sur
la même.

--
@+
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 travaille avec un recordset avec uniquement du VBA Il y a ni
formulaire, ni requete.
Voici ci dessous la procedure ou se trouve le recorset en erreur. Il
s''agit du recordset rst_resultat. J''ai ecrit en majuscule la ligne ou
il y a l'erreur
Merci beaucoup pour votre aide,

Sub Principale()

'variable permettant de designer la table article
Dim db_art As DAO.Database
Dim rst_art As DAO.Recordset

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

'variable permettant de designer la table resultat
Dim db_resultat As DAO.Database
Dim rst_resultat As DAO.Recordset

Dim stock_final As Double 'valeur du stock final
Dim code_article As String 'code de l'article lu dans la table article
Dim article As String 'code article lu dans la table mouvement
Dim annee As Integer 'annee extraite de la date lu dans la table
mouvement
Dim annee_souhaitee As Integer 'annee pour laquelle l'utilisateur
souhaite connaitre la valeur du stock
Dim mois As Integer 'mois extrait de la date lu dans la table mouvement
Dim mois_souhaite As Integer 'mois pour lequel l'utilisateur souhaite
connaitre la valeur du stock
Dim QtePrecedente As Double


annee_souhaitee = Saisie_Annee_Souhaitee() 'recuperation de l'annee
saisi par l'utilisateur
mois_souhaite = Saisie_Mois_Souhaite() 'recuperation du mois saisi par
l'utilisateur
'Debug.Print annee_souhaitee 'affichage de la variable annee_souhaitee
stock_final = 0 'initialisation de la valeur du stock final a 0

'ouverture et positionnement au debut de la table article
Set db_art = CurrentDb()
Set rst_art = db_art.OpenRecordset("SELECT * from dbo_article_copie")

While Not rst_art.EOF 'tant que l'on n'a pas atteint la fin de la table
'si la valeur du champ AchetPlan de la table article n'est pas un
outil
If rst_art![AchetPlan] <> "OUT" Then
code_article = rst_art![Code] 'lecture du code article de la
table dbo-article
StockIni (code_article) 'Appel de la procedure permettant de
mettre la valeur du stock initial, d'un article donne, dans la table
resultat

'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
article = rst_mvt![article] 'lecture du code article dans
la table des mouvements
annee = Year(rst_mvt![Date]) 'recuperation de l'annee dans
le champ date de la table mouvement
mois = Month(rst_mvt![Date]) 'recuperation du mois dans le
champ date de la table mouvement


If ((code_article = article) And (annee = annee_souhaitee)
And (mois = mois_souhaite)) Then
If rst_mvt![TypeMvt] = "RCT-PO" Then
'Ouverture et positionnement au debut de la table
resultat
Set db_resultat = CurrentDb()
Set rst_resultat > db_resultat.OpenRecordset("SELECT * from tbl_resultat")
'Ajout du mouvement et du resultat des calculs dans
la table resultat
rst_resultat.AddNew
rst_resultat("CodeArticle") = code_article
rst_resultat("Designation") > rst_art![Description1]
rst_resultat("CodeMvt") = rst_mvt![Mouvement]
rst_resultat("TypeMvt") = rst_mvt![TypeMvt]
rst_resultat("Quantite1") = rst_mvt![QteMvt]
rst_resultat("PrixUnit1") = rst_mvt![Prix]
rst_resultat("Montant1") > rst_resultat("Quantite1") * rst_resultat("PrixUnit1")
rst_resultat.Update

'Calcul de la quantite en stock

rst_resultat.MovePrevious
'QtePrecedente = rst_resultat![Quantite3]
Debug.Print rst_mvt![Mouvement]



'BUG A LA LIGNE SUIVANTE:


Debug.Print rst_resultat![Quantite3] ' C''EST ICI
QUE CA BUG,IL DIT Run-time error 3021 No current record. Or, il y a
forcement un enregistrement car chaque article a une valeur de stock
initial qui est enregistre juste avant dans la table resultat



rst_resultat.MoveNext
rst_resultat.AddNew
rst_resultat("Quantite3") > rst_resultat("Quantite1") + QtePrecedente
rst_resultat.Update

rst_resultat.Close 'Fermeture de la table resultat
'Liberation des variables permettant de designer la
table resultat
Set rst_resultat = Nothing
Set db_resultat = Nothing

End If


End If
rst_mvt.MoveNext 'passage au mouvement suivant
Wend

rst_mvt.Close 'fermeture de la table mouvement
'Liberation des variables objets permettant de designer la
table mouvement
Set rst_mvt = Nothing
Set db_mvt = Nothing

End If
rst_art.MoveNext 'passer a l'element suivant
Wend


rst_art.Close 'fermeture de la table article
'Liberation des variables objet permettant de designer la table article
Set rst_art = Nothing
Set db_art = Nothing

End Sub