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

Modification de plusieurs enregistrements

17 réponses
Avatar
Francis
Bonsoir,

Voici mon problème. Dans l'application que j'utilise, lorsque je fais
un virement de compte A vers un compte B, j'ai une procédure qui crée
deux enregistrements dans le journal des opérations: une pour le
mouvement de A->B et une pour le mouvement de B->A. Là, tout va bien.
J'ai tenté d'adapter cette procédure pour pouvoir modifier le virement,
une fois créé, et là, j'ai systématiquement un message me disant que
"La commande de l'action "atteidre suivant" n'est pas disponible pour
le moment"
Voici le code utilisé, et merci de me dire ce que je dois faire pour
que ça marche.

Dim montant As Variant
Dim pièce As String
Dim val As Variant
Dim dbs As Database
Dim rcst As DAO.Recordset

If Me!numéro <> 0 Then

Dim dbs As Database
Dim rcst As DAO.Recordset
Set dbs = CurrentDb
Set rcst = dbs.OpenRecordset("tbl journal des opérations",
dbOpenDynaset)
val = DMax("[numéro]", "[tbl journal des opérations]")
rcst.Close

montant = Me!sortie
pièce = Me!ref_pièce
entrée = 0
solde = -montant
libellé = "Virement vers compte"

DoCmd.RunCommand acCmdSaveRecord

DoCmd.RunCommand acCmdRecordsGoToNext

Me!code_compte = Me!compte2
Me!entrée = montant
Me!sortie = 0
Me!solde = montant
libellé = "Virement depuis compte"
Me!ref_pièce = pièce

End If

@+
Francis


--
Francis
fhgc@wanadoudou.fr
RÈGLE DE FLUGG
Plus est urgent le motif pour lequel tu es dans la file d'attente,
plus sera lent l'employé du guichet.

10 réponses

1 2
Avatar
Raymond [mvp]
Bonsoir.

Essayer avec acCmdRecordsGoToNew (peut-être)

à quoi sert ton recordset ?
tu définis 2 fois les objets DAO. ( même pour la base il faut préciser
DAO.Database).
tu utilises une variable Val qui est déjà une fonction Access ( ne pas
nommer une variable avec un mot réservé).
des noms de données sont explicités, d'autres non.
faire un dim variant pour décrire un numérique n'est pas très normal, un
Double ou currency serait plus approprié.

pour que ça marche il faut réécrire toute la séquence.
--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

| Bonsoir,
|
| Voici mon problème. Dans l'application que j'utilise, lorsque je fais
| un virement de compte A vers un compte B, j'ai une procédure qui crée
| deux enregistrements dans le journal des opérations: une pour le
| mouvement de A->B et une pour le mouvement de B->A. Là, tout va bien.
| J'ai tenté d'adapter cette procédure pour pouvoir modifier le virement,
| une fois créé, et là, j'ai systématiquement un message me disant que
| "La commande de l'action "atteidre suivant" n'est pas disponible pour
| le moment"
| Voici le code utilisé, et merci de me dire ce que je dois faire pour
| que ça marche.
|
| Dim montant As Variant
| Dim pièce As String
| Dim val As Variant
| Dim dbs As Database
| Dim rcst As DAO.Recordset
|
| If Me!numéro <> 0 Then
|
| Dim dbs As Database
| Dim rcst As DAO.Recordset
| Set dbs = CurrentDb
| Set rcst = dbs.OpenRecordset("tbl journal des opérations",
| dbOpenDynaset)
| val = DMax("[numéro]", "[tbl journal des opérations]")
| rcst.Close
|
| montant = Me!sortie
| pièce = Me!ref_pièce
| entrée = 0
| solde = -montant
| libellé = "Virement vers compte"
|
| DoCmd.RunCommand acCmdSaveRecord
|
| DoCmd.RunCommand acCmdRecordsGoToNext
|
| Me!code_compte = Me!compte2
| Me!entrée = montant
| Me!sortie = 0
| Me!solde = montant
| libellé = "Virement depuis compte"
| Me!ref_pièce = pièce
|
| End If
|
| @+
| Francis
|
|
| --
| Francis
|
| RÈGLE DE FLUGG
| Plus est urgent le motif pour lequel tu es dans la file d'attente,
| plus sera lent l'employé du guichet.
|
|
Avatar
Francis
Raymond [mvp] a formulé la demande :
Bonsoir.

Essayer avec acCmdRecordsGoToNew (peut-être)

à quoi sert ton recordset ?
tu définis 2 fois les objets DAO. ( même pour la base il faut préciser
DAO.Database).
tu utilises une variable Val qui est déjà une fonction Access ( ne pas
nommer une variable avec un mot réservé).
des noms de données sont explicités, d'autres non.
faire un dim variant pour décrire un numérique n'est pas très normal, un
Double ou currency serait plus approprié.

pour que ça marche il faut réécrire toute la séquence.
--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

Bonsoir,

Voici mon problème. Dans l'application que j'utilise, lorsque je fais
un virement de compte A vers un compte B, j'ai une procédure qui crée
deux enregistrements dans le journal des opérations: une pour le
mouvement de A->B et une pour le mouvement de B->A. Là, tout va bien.
J'ai tenté d'adapter cette procédure pour pouvoir modifier le virement,
une fois créé, et là, j'ai systématiquement un message me disant que
"La commande de l'action "atteidre suivant" n'est pas disponible pour
le moment"
Voici le code utilisé, et merci de me dire ce que je dois faire pour
que ça marche.

Dim montant As Variant
Dim pièce As String
Dim val As Variant
Dim dbs As Database
Dim rcst As DAO.Recordset

If Me!numéro <> 0 Then

Dim dbs As Database
Dim rcst As DAO.Recordset
Set dbs = CurrentDb
Set rcst = dbs.OpenRecordset("tbl journal des opérations",
dbOpenDynaset)
val = DMax("[numéro]", "[tbl journal des opérations]")
rcst.Close

montant = Me!sortie
pièce = Me!ref_pièce
entrée = 0
solde = -montant
libellé = "Virement vers compte"

DoCmd.RunCommand acCmdSaveRecord

DoCmd.RunCommand acCmdRecordsGoToNext

Me!code_compte = Me!compte2
Me!entrée = montant
Me!sortie = 0
Me!solde = montant
libellé = "Virement depuis compte"
Me!ref_pièce = pièce

End If

@+
Francis


--
Francis

RÈGLE DE FLUGG
Plus est urgent le motif pour lequel tu es dans la file d'attente,
plus sera lent l'employé du guichet.





Bonsoir Raymond,
Merci pour ta réponse, qui ne me dépanne malheureusement pas.
Je suis un peu apprenti sorcier dans ma démarche car, bien que ne
connaissant vraiment pas grand chose vis à vis d'Access, je tente
d'adapter une procédure qui marche bien en création, et dont je ne suis
pas du tout l'auteur, pour en faire une procédure de modification, qui
me serait bien utile.
Avec les opérations de débit ou de crédit, ça a bien marché, car il n'y
a qu'un enregistrement dans la table des opérations pour chaque
opération de ce type. Avec les virements, il y a 2 enregistrements qui
sont créés dans cette table. Pour les modifications, il y a donc deux
enregistrements, qui se suivent dans la table, à mettre à jour. Après
avoir fait la modif sur la première, il faut passer à la suivante pour
être complet dans les modifs, et c'est ce passage qui ne se fait pas.
J'ai remplacé GoToNext par GoToNew, comme tu le suggères, mais ça
génère le même message qu'avec Next.
Voilà, si tu peux m'en dire un peu plus, merci beaucoup,

Francis

--
Francis

LOI DE LA GRAVITE SÉLECTIVE
En tout point de la surface du globe, toute biscotte tombera côté
beurre.


Avatar
Raymond [mvp]
Bonjour.

Il semblerait que tu modifies tes enregistrements et non que tu les crées.
est-ce ceci ? ou est-ce que tu dois créer deux nouveaux enregistrements ?
quelle est ta procédure théorique exact pour traiter cette écriture ?

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

| Raymond [mvp] a formulé la demande :
| > Bonsoir.
| >
| > Essayer avec acCmdRecordsGoToNew (peut-être)
| >
| > à quoi sert ton recordset ?
| > tu définis 2 fois les objets DAO. ( même pour la base il faut préciser
| > DAO.Database).
| > tu utilises une variable Val qui est déjà une fonction Access ( ne pas
| > nommer une variable avec un mot réservé).
| > des noms de données sont explicités, d'autres non.
| > faire un dim variant pour décrire un numérique n'est pas très normal, un
| > Double ou currency serait plus approprié.
| >
| > pour que ça marche il faut réécrire toute la séquence.
| > --
| > @+
| > Raymond Access MVP http://OfficeSystemAccess.seneque.net/
| > http://officesystem.access.over-blog.com/
| > http://access2007.over-blog.com/
| > Pour débuter sur le forum: http://www.mpfa.info/
| >
| >
| > "Francis" a écrit dans le message de news:
| >
| >> Bonsoir,
| >>
| >> Voici mon problème. Dans l'application que j'utilise, lorsque je fais
| >> un virement de compte A vers un compte B, j'ai une procédure qui crée
| >> deux enregistrements dans le journal des opérations: une pour le
| >> mouvement de A->B et une pour le mouvement de B->A. Là, tout va bien.
| >> J'ai tenté d'adapter cette procédure pour pouvoir modifier le virement,
| >> une fois créé, et là, j'ai systématiquement un message me disant que
| >> "La commande de l'action "atteidre suivant" n'est pas disponible pour
| >> le moment"
| >> Voici le code utilisé, et merci de me dire ce que je dois faire pour
| >> que ça marche.
| >>
| >> Dim montant As Variant
| >> Dim pièce As String
| >> Dim val As Variant
| >> Dim dbs As Database
| >> Dim rcst As DAO.Recordset
| >>
| >> If Me!numéro <> 0 Then
| >>
| >> Dim dbs As Database
| >> Dim rcst As DAO.Recordset
| >> Set dbs = CurrentDb
| >> Set rcst = dbs.OpenRecordset("tbl journal des opérations",
| >> dbOpenDynaset)
| >> val = DMax("[numéro]", "[tbl journal des opérations]")
| >> rcst.Close
| >>
| >> montant = Me!sortie
| >> pièce = Me!ref_pièce
| >> entrée = 0
| >> solde = -montant
| >> libellé = "Virement vers compte"
| >>
| >> DoCmd.RunCommand acCmdSaveRecord
| >>
| >> DoCmd.RunCommand acCmdRecordsGoToNext
| >>
| >> Me!code_compte = Me!compte2
| >> Me!entrée = montant
| >> Me!sortie = 0
| >> Me!solde = montant
| >> libellé = "Virement depuis compte"
| >> Me!ref_pièce = pièce
| >>
| >> End If
| >>
| >> @+
| >> Francis
| >>
| >>
| >> --
| >> Francis
| >>
| >> RÈGLE DE FLUGG
| >> Plus est urgent le motif pour lequel tu es dans la file d'attente,
| >> plus sera lent l'employé du guichet.
| >>
| >>
|
| Bonsoir Raymond,
| Merci pour ta réponse, qui ne me dépanne malheureusement pas.
| Je suis un peu apprenti sorcier dans ma démarche car, bien que ne
| connaissant vraiment pas grand chose vis à vis d'Access, je tente
| d'adapter une procédure qui marche bien en création, et dont je ne suis
| pas du tout l'auteur, pour en faire une procédure de modification, qui
| me serait bien utile.
| Avec les opérations de débit ou de crédit, ça a bien marché, car il n'y
| a qu'un enregistrement dans la table des opérations pour chaque
| opération de ce type. Avec les virements, il y a 2 enregistrements qui
| sont créés dans cette table. Pour les modifications, il y a donc deux
| enregistrements, qui se suivent dans la table, à mettre à jour. Après
| avoir fait la modif sur la première, il faut passer à la suivante pour
| être complet dans les modifs, et c'est ce passage qui ne se fait pas.
| J'ai remplacé GoToNext par GoToNew, comme tu le suggères, mais ça
| génère le même message qu'avec Next.
| Voilà, si tu peux m'en dire un peu plus, merci beaucoup,
|
| Francis
|
| --
| Francis
|
| LOI DE LA GRAVITE SÉLECTIVE
| En tout point de la surface du globe, toute biscotte tombera côté
| beurre.
|
|
Avatar
Francis
Bonsoir Raymond,

C'est bien ça, je voudrais pouvoir modifier deux enregistrements de ma
table des opérations comptables, qui résultent en fait d'une seule
opération de virement d'un compte à un autre. Leur création initiale se
fait sans problème, et j'ai naivement cru que je pourrais transposer la
procédure de création pour en faire une procédure de modification, mais
voilà, ça coince.
Les deux enregistrements on des numéros d'ordre qui se suivent dans la
table. Quand je demande une modif du virement correspondant, je suis
capable de savoir si c'est le premier ou le second des enregistrements,
et de me positionner sur le premier. Voici ce que je fais:
If [type] = "V" Then stDocName = "SF virement"
If [sortie] = 0 Then DoCmd.GoToRecord , , acGoTo, CurrentRecord -1
stLinkCriteria = "[N°_écriture]=" & "'" & Me![N°_écriture] & "'"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Le formulaire SF virement est celui qui a été initialement conçu pour
la création de l'opération de virement, et dont je te donne le code
ci-après:

Private Sub Valider_Click()
On Error GoTo Err_Valider_Click
If Me!numéro = 0 Then

Dim dbs As Database
Dim rcst As DAO.Recordset
Set dbs = CurrentDb
Set rcst = dbs.OpenRecordset("tbl journal des opérations",
dbOpenDynaset)
valeur = DMax("[numéro]", "[tbl journal des opérations]")
rcst.Close
If Right(Year(date), 2) * 10000 > valeur Then
valeur = Right(Year(date), 1) * 10000
If valeur = 0 Then valeur = 10000
End If
valeur = valeur + 1
val2 = valeur + 1
Me!numéro = valeur
Me!N°_écriture = "E" & Right(Year(date), 1) & Right(valeur, 4)

montant = Me!sortie
tiers = Form!compte.Column(2)
If Not IsNull(Me!ref_pièce) Then pièce = Me!ref_pièce
If Not IsNull(Me!notes) Then notes = Me!notes

entrée = 0
solde = -montant
libellé = "Virement vers compte"
Me!ref_tiers = Form!compte2.Column(2)
' If Not IsNull(notes) Then Me!notes = notes
Me!type = "V"

DoCmd.RunCommand acCmdSaveRecord

DoCmd.RunCommand acCmdRecordsGoToNew
Me!numéro = val2
Me!N°_écriture = "E" & Right(Year(date), 1) & Right(val2, 4)

Me!code_compte = Me!compte2
Me!entrée = montant
Me!sortie = 0
Me!solde = montant
libellé = "Virement depuis compte"
Me!ref_tiers = tiers
If Not IsNull(pièce) Then Me!ref_pièce = pièce
If Not IsNull(notes) Then Me!notes = notes
Me!type = "V"

End If

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
acMenuVer70
DoCmd.Close

Exit_Valider_Click:
Exit Sub

Err_Valider_Click:
MsgBox Err.Description
Resume Exit_Valider_Click

End Sub

Voilà, j'espère que j'ai été assez clair dans mes propos et que tu
pourras me donner le coup de main qui me serait bien utile.

@plus

Francis


Raymond [mvp] a utilisé son clavier pour écrire :
Bonjour.

Il semblerait que tu modifies tes enregistrements et non que tu les crées.
est-ce ceci ? ou est-ce que tu dois créer deux nouveaux enregistrements ?
quelle est ta procédure théorique exact pour traiter cette écriture ?

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

Raymond [mvp] a formulé la demande :
Bonsoir.

Essayer avec acCmdRecordsGoToNew (peut-être)

à quoi sert ton recordset ?
tu définis 2 fois les objets DAO. ( même pour la base il faut préciser
DAO.Database).
tu utilises une variable Val qui est déjà une fonction Access ( ne pas
nommer une variable avec un mot réservé).
des noms de données sont explicités, d'autres non.
faire un dim variant pour décrire un numérique n'est pas très normal, un
Double ou currency serait plus approprié.

pour que ça marche il faut réécrire toute la séquence.
--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

Bonsoir,

Voici mon problème. Dans l'application que j'utilise, lorsque je fais
un virement de compte A vers un compte B, j'ai une procédure qui crée
deux enregistrements dans le journal des opérations: une pour le
mouvement de A->B et une pour le mouvement de B->A. Là, tout va bien.
J'ai tenté d'adapter cette procédure pour pouvoir modifier le virement,
une fois créé, et là, j'ai systématiquement un message me disant que
"La commande de l'action "atteidre suivant" n'est pas disponible pour
le moment"
Voici le code utilisé, et merci de me dire ce que je dois faire pour
que ça marche.

Dim montant As Variant
Dim pièce As String
Dim val As Variant
Dim dbs As Database
Dim rcst As DAO.Recordset

If Me!numéro <> 0 Then

Dim dbs As Database
Dim rcst As DAO.Recordset
Set dbs = CurrentDb
Set rcst = dbs.OpenRecordset("tbl journal des opérations",
dbOpenDynaset)
val = DMax("[numéro]", "[tbl journal des opérations]")
rcst.Close

montant = Me!sortie
pièce = Me!ref_pièce
entrée = 0
solde = -montant
libellé = "Virement vers compte"

DoCmd.RunCommand acCmdSaveRecord

DoCmd.RunCommand acCmdRecordsGoToNext

Me!code_compte = Me!compte2
Me!entrée = montant
Me!sortie = 0
Me!solde = montant
libellé = "Virement depuis compte"
Me!ref_pièce = pièce

End If

@+
Francis


--
Francis

RÈGLE DE FLUGG
Plus est urgent le motif pour lequel tu es dans la file d'attente,
plus sera lent l'employé du guichet.





Bonsoir Raymond,
Merci pour ta réponse, qui ne me dépanne malheureusement pas.
Je suis un peu apprenti sorcier dans ma démarche car, bien que ne
connaissant vraiment pas grand chose vis à vis d'Access, je tente
d'adapter une procédure qui marche bien en création, et dont je ne suis
pas du tout l'auteur, pour en faire une procédure de modification, qui
me serait bien utile.
Avec les opérations de débit ou de crédit, ça a bien marché, car il n'y
a qu'un enregistrement dans la table des opérations pour chaque
opération de ce type. Avec les virements, il y a 2 enregistrements qui
sont créés dans cette table. Pour les modifications, il y a donc deux
enregistrements, qui se suivent dans la table, à mettre à jour. Après
avoir fait la modif sur la première, il faut passer à la suivante pour
être complet dans les modifs, et c'est ce passage qui ne se fait pas.
J'ai remplacé GoToNext par GoToNew, comme tu le suggères, mais ça
génère le même message qu'avec Next.
Voilà, si tu peux m'en dire un peu plus, merci beaucoup,

Francis

--
Francis

LOI DE LA GRAVITE SÉLECTIVE
En tout point de la surface du globe, toute biscotte tombera côté
beurre.





--
Francis

LOI DE BOOB
Quel que soit l'objet, il sera trouvé dans le dernier endroit dans
lequel on l'aura cherché.




Avatar
Raymond [mvp]
Bonjour.

si tu travailles en multi-utilisateur, ta méthode de création n'est pas
fiable car tu risques d'avoir des doublons dans le Me!N°_écriture et tu ne
pourras jamais atteindre la 2e écriture par ta méthode. chaque écriture doit
avoir son numéro, généré immédiatement avant sa création et les numéros
d'écritues mémorisés dans les deux écritures pour pouvoir faire la
correspondance.

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

| Bonsoir Raymond,
|
| C'est bien ça, je voudrais pouvoir modifier deux enregistrements de ma
| table des opérations comptables, qui résultent en fait d'une seule
| opération de virement d'un compte à un autre. Leur création initiale se
| fait sans problème, et j'ai naivement cru que je pourrais transposer la
| procédure de création pour en faire une procédure de modification, mais
| voilà, ça coince.
| Les deux enregistrements on des numéros d'ordre qui se suivent dans la
| table. Quand je demande une modif du virement correspondant, je suis
| capable de savoir si c'est le premier ou le second des enregistrements,
| et de me positionner sur le premier. Voici ce que je fais:
| If [type] = "V" Then stDocName = "SF virement"
| If [sortie] = 0 Then DoCmd.GoToRecord , , acGoTo, CurrentRecord -1
| stLinkCriteria = "[N°_écriture]=" & "'" & Me![N°_écriture] & "'"
| DoCmd.OpenForm stDocName, , , stLinkCriteria
|
| Le formulaire SF virement est celui qui a été initialement conçu pour
| la création de l'opération de virement, et dont je te donne le code
| ci-après:
|
| Private Sub Valider_Click()
| On Error GoTo Err_Valider_Click
| If Me!numéro = 0 Then
|
| Dim dbs As Database
| Dim rcst As DAO.Recordset
| Set dbs = CurrentDb
| Set rcst = dbs.OpenRecordset("tbl journal des opérations",
| dbOpenDynaset)
| valeur = DMax("[numéro]", "[tbl journal des opérations]")
| rcst.Close
| If Right(Year(date), 2) * 10000 > valeur Then
| valeur = Right(Year(date), 1) * 10000
| If valeur = 0 Then valeur = 10000
| End If
| valeur = valeur + 1
| val2 = valeur + 1
| Me!numéro = valeur
| Me!N°_écriture = "E" & Right(Year(date), 1) & Right(valeur, 4)
|
| montant = Me!sortie
| tiers = Form!compte.Column(2)
| If Not IsNull(Me!ref_pièce) Then pièce = Me!ref_pièce
| If Not IsNull(Me!notes) Then notes = Me!notes
|
| entrée = 0
| solde = -montant
| libellé = "Virement vers compte"
| Me!ref_tiers = Form!compte2.Column(2)
| ' If Not IsNull(notes) Then Me!notes = notes
| Me!type = "V"
|
| DoCmd.RunCommand acCmdSaveRecord
|
| DoCmd.RunCommand acCmdRecordsGoToNew
| Me!numéro = val2
| Me!N°_écriture = "E" & Right(Year(date), 1) & Right(val2, 4)
|
| Me!code_compte = Me!compte2
| Me!entrée = montant
| Me!sortie = 0
| Me!solde = montant
| libellé = "Virement depuis compte"
| Me!ref_tiers = tiers
| If Not IsNull(pièce) Then Me!ref_pièce = pièce
| If Not IsNull(notes) Then Me!notes = notes
| Me!type = "V"
|
| End If
|
| DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
| acMenuVer70
| DoCmd.Close
|
| Exit_Valider_Click:
| Exit Sub
|
| Err_Valider_Click:
| MsgBox Err.Description
| Resume Exit_Valider_Click
|
| End Sub
|
| Voilà, j'espère que j'ai été assez clair dans mes propos et que tu
| pourras me donner le coup de main qui me serait bien utile.
|
| @plus
|
| Francis
|
|
| Raymond [mvp] a utilisé son clavier pour écrire :
| > Bonjour.
| >
| > Il semblerait que tu modifies tes enregistrements et non que tu les
crées.
| > est-ce ceci ? ou est-ce que tu dois créer deux nouveaux enregistrements
?
| > quelle est ta procédure théorique exact pour traiter cette écriture ?
| >
| > --
| > @+
| > Raymond Access MVP http://OfficeSystemAccess.seneque.net/
| > http://officesystem.access.over-blog.com/
| > http://access2007.over-blog.com/
| > Pour débuter sur le forum: http://www.mpfa.info/
| >
| >
| > "Francis" a écrit dans le message de news:
| >
| >> Raymond [mvp] a formulé la demande :
| >>> Bonsoir.
| >>>
| >>> Essayer avec acCmdRecordsGoToNew (peut-être)
| >>>
| >>> à quoi sert ton recordset ?
| >>> tu définis 2 fois les objets DAO. ( même pour la base il faut préciser
| >>> DAO.Database).
| >>> tu utilises une variable Val qui est déjà une fonction Access ( ne pas
| >>> nommer une variable avec un mot réservé).
| >>> des noms de données sont explicités, d'autres non.
| >>> faire un dim variant pour décrire un numérique n'est pas très normal,
un
| >>> Double ou currency serait plus approprié.
| >>>
| >>> pour que ça marche il faut réécrire toute la séquence.
| >>> --
| >>> @+
| >>> Raymond Access MVP http://OfficeSystemAccess.seneque.net/
| >>> http://officesystem.access.over-blog.com/
| >>> http://access2007.over-blog.com/
| >>> Pour débuter sur le forum: http://www.mpfa.info/
| >>>
| >>>
| >>> "Francis" a écrit dans le message de news:
| >>>
| >>>> Bonsoir,
| >>>>
| >>>> Voici mon problème. Dans l'application que j'utilise, lorsque je fais
| >>>> un virement de compte A vers un compte B, j'ai une procédure qui crée
| >>>> deux enregistrements dans le journal des opérations: une pour le
| >>>> mouvement de A->B et une pour le mouvement de B->A. Là, tout va bien.
| >>>> J'ai tenté d'adapter cette procédure pour pouvoir modifier le
virement,
| >>>> une fois créé, et là, j'ai systématiquement un message me disant que
| >>>> "La commande de l'action "atteidre suivant" n'est pas disponible pour
| >>>> le moment"
| >>>> Voici le code utilisé, et merci de me dire ce que je dois faire pour
| >>>> que ça marche.
| >>>>
| >>>> Dim montant As Variant
| >>>> Dim pièce As String
| >>>> Dim val As Variant
| >>>> Dim dbs As Database
| >>>> Dim rcst As DAO.Recordset
| >>>>
| >>>> If Me!numéro <> 0 Then
| >>>>
| >>>> Dim dbs As Database
| >>>> Dim rcst As DAO.Recordset
| >>>> Set dbs = CurrentDb
| >>>> Set rcst = dbs.OpenRecordset("tbl journal des opérations",
| >>>> dbOpenDynaset)
| >>>> val = DMax("[numéro]", "[tbl journal des opérations]")
| >>>> rcst.Close
| >>>>
| >>>> montant = Me!sortie
| >>>> pièce = Me!ref_pièce
| >>>> entrée = 0
| >>>> solde = -montant
| >>>> libellé = "Virement vers compte"
| >>>>
| >>>> DoCmd.RunCommand acCmdSaveRecord
| >>>>
| >>>> DoCmd.RunCommand acCmdRecordsGoToNext
| >>>>
| >>>> Me!code_compte = Me!compte2
| >>>> Me!entrée = montant
| >>>> Me!sortie = 0
| >>>> Me!solde = montant
| >>>> libellé = "Virement depuis compte"
| >>>> Me!ref_pièce = pièce
| >>>>
| >>>> End If
| >>>>
| >>>> @+
| >>>> Francis
| >>>>
| >>>>
| >>>> --
| >>>> Francis
| >>>>
| >>>> RÈGLE DE FLUGG
| >>>> Plus est urgent le motif pour lequel tu es dans la file d'attente,
| >>>> plus sera lent l'employé du guichet.
| >>>>
| >>>>
| >>
| >> Bonsoir Raymond,
| >> Merci pour ta réponse, qui ne me dépanne malheureusement pas.
| >> Je suis un peu apprenti sorcier dans ma démarche car, bien que ne
| >> connaissant vraiment pas grand chose vis à vis d'Access, je tente
| >> d'adapter une procédure qui marche bien en création, et dont je ne suis
| >> pas du tout l'auteur, pour en faire une procédure de modification, qui
| >> me serait bien utile.
| >> Avec les opérations de débit ou de crédit, ça a bien marché, car il n'y
| >> a qu'un enregistrement dans la table des opérations pour chaque
| >> opération de ce type. Avec les virements, il y a 2 enregistrements qui
| >> sont créés dans cette table. Pour les modifications, il y a donc deux
| >> enregistrements, qui se suivent dans la table, à mettre à jour. Après
| >> avoir fait la modif sur la première, il faut passer à la suivante pour
| >> être complet dans les modifs, et c'est ce passage qui ne se fait pas.
| >> J'ai remplacé GoToNext par GoToNew, comme tu le suggères, mais ça
| >> génère le même message qu'avec Next.
| >> Voilà, si tu peux m'en dire un peu plus, merci beaucoup,
| >>
| >> Francis
| >>
| >> --
| >> Francis
| >>
| >> LOI DE LA GRAVITE SÉLECTIVE
| >> En tout point de la surface du globe, toute biscotte tombera côté
| >> beurre.
| >>
| >>
|
| --
| Francis
|
| LOI DE BOOB
| Quel que soit l'objet, il sera trouvé dans le dernier endroit dans
| lequel on l'aura cherché.
|
|
Avatar
Francis
Bonjour Raymond,

Bien noté ton commentaire ci-dessous.
Dans le cas présent, l'appli que j'essaye d'améliorer sert à gérer une
association sportive dont je suis le trésorier et, pour la partie
trésorerie/compta, j'en suis le seul utilisateur. Ce risque de doublons
est donc inexistant.
Le fait que je ne puisse pas atteindre ma 2ème écriture ne tient donc
pas à l'existence d'un doublon. Je ne peux d'ailleurs pas plus
atteindre la première écriture, ni la dernière, ni en créer une
nouvelle.
Une autre piste, sans doute ?
@ bientôt,
Francis

Raymond [mvp] a utilisé son clavier pour écrire :
Bonjour.

si tu travailles en multi-utilisateur, ta méthode de création n'est pas
fiable car tu risques d'avoir des doublons dans le Me!N°_écriture et tu ne
pourras jamais atteindre la 2e écriture par ta méthode. chaque écriture doit
avoir son numéro, généré immédiatement avant sa création et les numéros
d'écritues mémorisés dans les deux écritures pour pouvoir faire la
correspondance.

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

Bonsoir Raymond,

C'est bien ça, je voudrais pouvoir modifier deux enregistrements de ma
table des opérations comptables, qui résultent en fait d'une seule
opération de virement d'un compte à un autre. Leur création initiale se
fait sans problème, et j'ai naivement cru que je pourrais transposer la
procédure de création pour en faire une procédure de modification, mais
voilà, ça coince.
Les deux enregistrements on des numéros d'ordre qui se suivent dans la
table. Quand je demande une modif du virement correspondant, je suis
capable de savoir si c'est le premier ou le second des enregistrements,
et de me positionner sur le premier. Voici ce que je fais:
If [type] = "V" Then stDocName = "SF virement"
If [sortie] = 0 Then DoCmd.GoToRecord , , acGoTo, CurrentRecord -1
stLinkCriteria = "[N°_écriture]=" & "'" & Me![N°_écriture] & "'"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Le formulaire SF virement est celui qui a été initialement conçu pour
la création de l'opération de virement, et dont je te donne le code
ci-après:

Private Sub Valider_Click()
On Error GoTo Err_Valider_Click
If Me!numéro = 0 Then

Dim dbs As Database
Dim rcst As DAO.Recordset
Set dbs = CurrentDb
Set rcst = dbs.OpenRecordset("tbl journal des opérations",
dbOpenDynaset)
valeur = DMax("[numéro]", "[tbl journal des opérations]")
rcst.Close
If Right(Year(date), 2) * 10000 > valeur Then
valeur = Right(Year(date), 1) * 10000
If valeur = 0 Then valeur = 10000
End If
valeur = valeur + 1
val2 = valeur + 1
Me!numéro = valeur
Me!N°_écriture = "E" & Right(Year(date), 1) & Right(valeur, 4)

montant = Me!sortie
tiers = Form!compte.Column(2)
If Not IsNull(Me!ref_pièce) Then pièce = Me!ref_pièce
If Not IsNull(Me!notes) Then notes = Me!notes

entrée = 0
solde = -montant
libellé = "Virement vers compte"
Me!ref_tiers = Form!compte2.Column(2)
' If Not IsNull(notes) Then Me!notes = notes
Me!type = "V"

DoCmd.RunCommand acCmdSaveRecord

DoCmd.RunCommand acCmdRecordsGoToNew
Me!numéro = val2
Me!N°_écriture = "E" & Right(Year(date), 1) & Right(val2, 4)

Me!code_compte = Me!compte2
Me!entrée = montant
Me!sortie = 0
Me!solde = montant
libellé = "Virement depuis compte"
Me!ref_tiers = tiers
If Not IsNull(pièce) Then Me!ref_pièce = pièce
If Not IsNull(notes) Then Me!notes = notes
Me!type = "V"

End If

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
acMenuVer70
DoCmd.Close

Exit_Valider_Click:
Exit Sub

Err_Valider_Click:
MsgBox Err.Description
Resume Exit_Valider_Click

End Sub

Voilà, j'espère que j'ai été assez clair dans mes propos et que tu
pourras me donner le coup de main qui me serait bien utile.

@plus

Francis


Raymond [mvp] a utilisé son clavier pour écrire :
Bonjour.

Il semblerait que tu modifies tes enregistrements et non que tu les crées.
est-ce ceci ? ou est-ce que tu dois créer deux nouveaux enregistrements ?
quelle est ta procédure théorique exact pour traiter cette écriture ?

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

Raymond [mvp] a formulé la demande :
Bonsoir.

Essayer avec acCmdRecordsGoToNew (peut-être)

à quoi sert ton recordset ?
tu définis 2 fois les objets DAO. ( même pour la base il faut préciser
DAO.Database).
tu utilises une variable Val qui est déjà une fonction Access ( ne pas
nommer une variable avec un mot réservé).
des noms de données sont explicités, d'autres non.
faire un dim variant pour décrire un numérique n'est pas très normal, un
Double ou currency serait plus approprié.

pour que ça marche il faut réécrire toute la séquence.
--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

Bonsoir,

Voici mon problème. Dans l'application que j'utilise, lorsque je fais
un virement de compte A vers un compte B, j'ai une procédure qui crée
deux enregistrements dans le journal des opérations: une pour le
mouvement de A->B et une pour le mouvement de B->A. Là, tout va bien.
J'ai tenté d'adapter cette procédure pour pouvoir modifier le virement,
une fois créé, et là, j'ai systématiquement un message me disant que
"La commande de l'action "atteidre suivant" n'est pas disponible pour
le moment"
Voici le code utilisé, et merci de me dire ce que je dois faire pour
que ça marche.

Dim montant As Variant
Dim pièce As String
Dim val As Variant
Dim dbs As Database
Dim rcst As DAO.Recordset

If Me!numéro <> 0 Then

Dim dbs As Database
Dim rcst As DAO.Recordset
Set dbs = CurrentDb
Set rcst = dbs.OpenRecordset("tbl journal des opérations",
dbOpenDynaset)
val = DMax("[numéro]", "[tbl journal des opérations]")
rcst.Close

montant = Me!sortie
pièce = Me!ref_pièce
entrée = 0
solde = -montant
libellé = "Virement vers compte"

DoCmd.RunCommand acCmdSaveRecord

DoCmd.RunCommand acCmdRecordsGoToNext

Me!code_compte = Me!compte2
Me!entrée = montant
Me!sortie = 0
Me!solde = montant
libellé = "Virement depuis compte"
Me!ref_pièce = pièce

End If

@+
Francis


--
Francis

RÈGLE DE FLUGG
Plus est urgent le motif pour lequel tu es dans la file d'attente,
plus sera lent l'employé du guichet.





Bonsoir Raymond,
Merci pour ta réponse, qui ne me dépanne malheureusement pas.
Je suis un peu apprenti sorcier dans ma démarche car, bien que ne
connaissant vraiment pas grand chose vis à vis d'Access, je tente
d'adapter une procédure qui marche bien en création, et dont je ne suis
pas du tout l'auteur, pour en faire une procédure de modification, qui
me serait bien utile.
Avec les opérations de débit ou de crédit, ça a bien marché, car il n'y
a qu'un enregistrement dans la table des opérations pour chaque
opération de ce type. Avec les virements, il y a 2 enregistrements qui
sont créés dans cette table. Pour les modifications, il y a donc deux
enregistrements, qui se suivent dans la table, à mettre à jour. Après
avoir fait la modif sur la première, il faut passer à la suivante pour
être complet dans les modifs, et c'est ce passage qui ne se fait pas.
J'ai remplacé GoToNext par GoToNew, comme tu le suggères, mais ça
génère le même message qu'avec Next.
Voilà, si tu peux m'en dire un peu plus, merci beaucoup,

Francis

--
Francis

LOI DE LA GRAVITE SÉLECTIVE
En tout point de la surface du globe, toute biscotte tombera côté
beurre.





--
Francis

LOI DE BOOB
Quel que soit l'objet, il sera trouvé dans le dernier endroit dans
lequel on l'aura cherché.





--
Francis

OBSERVATION DE ZENONE
L'autre file va toujours plus vite.
VARIATION DE O'BRIEN SUR L'OBSERVATION DE ZENONE
Si tu changes de file, celle que tu viens de quitter deviendra alors
la plus rapide.






Avatar
Raymond [mvp]
ne connaissant pas ta procédure pour atteindre l'enregistrement en
modification, peux-tu l'afficher ici si elle n'est pas trop longue.

normalement, tu devrais faire composer le numéro d'écriture dans une liste
et te positionner sur l'enregistrement avec la fonction FindFirst.

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

| Bonjour Raymond,
|
| Bien noté ton commentaire ci-dessous.
| Dans le cas présent, l'appli que j'essaye d'améliorer sert à gérer une
| association sportive dont je suis le trésorier et, pour la partie
| trésorerie/compta, j'en suis le seul utilisateur. Ce risque de doublons
| est donc inexistant.
| Le fait que je ne puisse pas atteindre ma 2ème écriture ne tient donc
| pas à l'existence d'un doublon. Je ne peux d'ailleurs pas plus
| atteindre la première écriture, ni la dernière, ni en créer une
| nouvelle.
| Une autre piste, sans doute ?
| @ bientôt,
| Francis
Avatar
Francis
Re,
La procédure est hyper courte: la voici:

If [type] = "V" Then stDocName = "SF virement"
If [sortie] = 0 Then DoCmd.GoToRecord , , acGoTo, CurrentRecord -1
stLinkCriteria = "[N°_écriture]=" & "'" & Me![N°_écriture] & "'"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Quelques explications en plus:
Toutes les opérations d'encaissement, de paiement ou de virement des
mes différents comptes font l'objet d'écritures dans une seule et même
table "journal des opérations", avec mention de C, D ou V selon le type
d'opération.
Pour un virement, j'ai 2 écritures: une pour mouvement du compte A vers
compte B qui est rattachée à A, et en sens inverse qui est rattachée au
compte B. Ces 2 enregistrements ont des numéros de séquence qui se
suivent. Que je sois dans la liste des opérations du compte A ou celle
du compte B, je pointe la ligne de l'opération à modifier et s'il
s'agit d'un virement ("V"), j'ai pris pour option de remonter
systématiquement à la première opération des deux: c'est ce que fait le
procédure ci-dessus. Ça, ça marche bien.

C'est ensuite dans ma procédure liée à "SF virement" que je ne parviens
pas à passer à l'enregistrement suivant pour reporter la modif sur la
deuxième ligne qui correspond à la transaction. Je te redonne le code
utilisé (j'ai volontairement réduit le nombre de valeurs à écrire):

Dim montant As Variant
Dim pièce As String
Dim val As Variant

If Me!numéro <> 0 Then ' si numéro = 0, alors je vais vers le
procédure de création dont je t'ai donné le code dans mon post
précédent.
Dim dbs As Database
Dim rcst As DAO.Recordset
Set dbs = CurrentDb
Set rcst = dbs.OpenRecordset("tbl journal des opérations",
dbOpenDynaset)
rcst.Close

montant = Me!sortie
pièce = Me!ref_pièce
solde = -montant

DoCmd.GoToRecord , , acGoTo, CurrentRecord + 1 ' C'est ici que
ça coince. J'ai remplacé cette instruction par : "DoCmd.RunCommand
acCmdRecordsGoToNext" , ou "DoCmd.GoToRecord , , acNext" et ça ne
change rien au blocage.

Me!entrée = montant
Me!sortie = 0
Me!solde = montant
Me!ref_pièce = pièce

End If

Je fais sûrement une méga bourde à un moment, mais où??? Eh bien,
j'espère que ce sera clair pour toi.

@ plus,

Francis



Raymond [mvp] vient de nous annoncer :
ne connaissant pas ta procédure pour atteindre l'enregistrement en
modification, peux-tu l'afficher ici si elle n'est pas trop longue.

normalement, tu devrais faire composer le numéro d'écriture dans une liste
et te positionner sur l'enregistrement avec la fonction FindFirst.

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

Bonjour Raymond,

Bien noté ton commentaire ci-dessous.
Dans le cas présent, l'appli que j'essaye d'améliorer sert à gérer une
association sportive dont je suis le trésorier et, pour la partie
trésorerie/compta, j'en suis le seul utilisateur. Ce risque de doublons
est donc inexistant.
Le fait que je ne puisse pas atteindre ma 2ème écriture ne tient donc
pas à l'existence d'un doublon. Je ne peux d'ailleurs pas plus
atteindre la première écriture, ni la dernière, ni en créer une
nouvelle.
Une autre piste, sans doute ?
@ bientôt,
Francis



--
Francis

LOI DE ROGER
C'est seulement après que l'hôtesse a servi le café, que l'avion
traverse une zone de turbulences.
EXPLICATION DE TONTON BERNARD
Le café est la cause principale de turbulences en altitude.


Avatar
Raymond [mvp]
de la façon dont c'est fait, dans le formulaire stDocName, tu neux pas
atteindre la 2e écriture pour la bonne raison que tu as filtré sur la 1ere
écriture. pour pouvoir l'atteindre il faut l'indiquer dans le critère, mais
il se pose le problème que ton numéro d'écriture est alpha et non numérique,
ce qui semble bizarre.
si c'est alpha:
stLinkCriteria = ("[N°_écriture]='" & Me![N°_écriture] & "'") Or
("[N°_écriture]='" & (Me![N°_écriture] + 1) & "'")
DoCmd.OpenForm stDocName, , , stLinkCriteria
si c'est numerique:
stLinkCriteria = ("[N°_écriture]=" & Me![N°_écriture]) Or
("[N°_écriture]=" & (Me![N°_écriture] + 1))
DoCmd.OpenForm stDocName, , , stLinkCriteria

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

| Re,
| La procédure est hyper courte: la voici:
|
| If [type] = "V" Then stDocName = "SF virement"
| If [sortie] = 0 Then DoCmd.GoToRecord , , acGoTo, CurrentRecord -1
| stLinkCriteria = "[N°_écriture]=" & "'" & Me![N°_écriture] & "'"
| DoCmd.OpenForm stDocName, , , stLinkCriteria
|
| Quelques explications en plus:
| Toutes les opérations d'encaissement, de paiement ou de virement des
| mes différents comptes font l'objet d'écritures dans une seule et même
| table "journal des opérations", avec mention de C, D ou V selon le type
| d'opération.
| Pour un virement, j'ai 2 écritures: une pour mouvement du compte A vers
| compte B qui est rattachée à A, et en sens inverse qui est rattachée au
| compte B. Ces 2 enregistrements ont des numéros de séquence qui se
| suivent. Que je sois dans la liste des opérations du compte A ou celle
| du compte B, je pointe la ligne de l'opération à modifier et s'il
| s'agit d'un virement ("V"), j'ai pris pour option de remonter
| systématiquement à la première opération des deux: c'est ce que fait le
| procédure ci-dessus. Ça, ça marche bien.
|
| C'est ensuite dans ma procédure liée à "SF virement" que je ne parviens
| pas à passer à l'enregistrement suivant pour reporter la modif sur la
| deuxième ligne qui correspond à la transaction. Je te redonne le code
| utilisé (j'ai volontairement réduit le nombre de valeurs à écrire):
|
| Dim montant As Variant
| Dim pièce As String
| Dim val As Variant
|
| If Me!numéro <> 0 Then ' si numéro = 0, alors je vais vers le
| procédure de création dont je t'ai donné le code dans mon post
| précédent.
| Dim dbs As Database
| Dim rcst As DAO.Recordset
| Set dbs = CurrentDb
| Set rcst = dbs.OpenRecordset("tbl journal des opérations",
| dbOpenDynaset)
| rcst.Close
|
| montant = Me!sortie
| pièce = Me!ref_pièce
| solde = -montant
|
| DoCmd.GoToRecord , , acGoTo, CurrentRecord + 1 ' C'est ici que
| ça coince. J'ai remplacé cette instruction par : "DoCmd.RunCommand
| acCmdRecordsGoToNext" , ou "DoCmd.GoToRecord , , acNext" et ça ne
| change rien au blocage.
|
| Me!entrée = montant
| Me!sortie = 0
| Me!solde = montant
| Me!ref_pièce = pièce
|
| End If
|
| Je fais sûrement une méga bourde à un moment, mais où??? Eh bien,
| j'espère que ce sera clair pour toi.
|
| @ plus,
|
| Francis
Avatar
Francis
CQFD, tout marche au poil !
En fin de compte, je ne vois pas à quoi sert vraiment ce champ
N°_écriture alpha, qui peut facilement être transformé en numérique en
virant la lettre E qu'il comporte.
Tout marche impec, et je me coucherai ce soir, un peu plus savant es
access.
Merci beaucoup, et peut-être à une prochaine

Francis


Raymond [mvp] avait soumis l'idée :
de la façon dont c'est fait, dans le formulaire stDocName, tu neux pas
atteindre la 2e écriture pour la bonne raison que tu as filtré sur la 1ere
écriture. pour pouvoir l'atteindre il faut l'indiquer dans le critère, mais
il se pose le problème que ton numéro d'écriture est alpha et non numérique,
ce qui semble bizarre.
si c'est alpha:
stLinkCriteria = ("[N°_écriture]='" & Me![N°_écriture] & "'") Or
("[N°_écriture]='" & (Me![N°_écriture] + 1) & "'")
DoCmd.OpenForm stDocName, , , stLinkCriteria
si c'est numerique:
stLinkCriteria = ("[N°_écriture]=" & Me![N°_écriture]) Or
("[N°_écriture]=" & (Me![N°_écriture] + 1))
DoCmd.OpenForm stDocName, , , stLinkCriteria

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Francis" a écrit dans le message de news:

Re,
La procédure est hyper courte: la voici:

If [type] = "V" Then stDocName = "SF virement"
If [sortie] = 0 Then DoCmd.GoToRecord , , acGoTo, CurrentRecord -1
stLinkCriteria = "[N°_écriture]=" & "'" & Me![N°_écriture] & "'"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Quelques explications en plus:
Toutes les opérations d'encaissement, de paiement ou de virement des
mes différents comptes font l'objet d'écritures dans une seule et même
table "journal des opérations", avec mention de C, D ou V selon le type
d'opération.
Pour un virement, j'ai 2 écritures: une pour mouvement du compte A vers
compte B qui est rattachée à A, et en sens inverse qui est rattachée au
compte B. Ces 2 enregistrements ont des numéros de séquence qui se
suivent. Que je sois dans la liste des opérations du compte A ou celle
du compte B, je pointe la ligne de l'opération à modifier et s'il
s'agit d'un virement ("V"), j'ai pris pour option de remonter
systématiquement à la première opération des deux: c'est ce que fait le
procédure ci-dessus. Ça, ça marche bien.

C'est ensuite dans ma procédure liée à "SF virement" que je ne parviens
pas à passer à l'enregistrement suivant pour reporter la modif sur la
deuxième ligne qui correspond à la transaction. Je te redonne le code
utilisé (j'ai volontairement réduit le nombre de valeurs à écrire):

Dim montant As Variant
Dim pièce As String
Dim val As Variant

If Me!numéro <> 0 Then ' si numéro = 0, alors je vais vers le
procédure de création dont je t'ai donné le code dans mon post
précédent.
Dim dbs As Database
Dim rcst As DAO.Recordset
Set dbs = CurrentDb
Set rcst = dbs.OpenRecordset("tbl journal des opérations",
dbOpenDynaset)
rcst.Close

montant = Me!sortie
pièce = Me!ref_pièce
solde = -montant

DoCmd.GoToRecord , , acGoTo, CurrentRecord + 1 ' C'est ici que
ça coince. J'ai remplacé cette instruction par : "DoCmd.RunCommand
acCmdRecordsGoToNext" , ou "DoCmd.GoToRecord , , acNext" et ça ne
change rien au blocage.

Me!entrée = montant
Me!sortie = 0
Me!solde = montant
Me!ref_pièce = pièce

End If

Je fais sûrement une méga bourde à un moment, mais où??? Eh bien,
j'espère que ce sera clair pour toi.

@ plus,

Francis



--
Francis

LOI DE LA GRAVITE SÉLECTIVE
En tout point de la surface du globe, toute biscotte tombera côté
beurre.


1 2