Conflit d'édition lors de l'exécution d'un code VBA
salut tout le monde.
Je vous explique ma situation :
une liste déroulante dans mon formulaire F_Facture (ListeBonCommande)me permet de choisir mon bon de commande pour créer une facture. Chaque bon de commande comprend une liste d'items qui doivent s'afficher dans F_Facture. Pour ce faire, je copie la liste d'items ( contenus dans T_ListeItemDansBonCommande) vers T_ListeItemDansFacture. Je me sers du code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
Private Sub ListeBonCommande_AfterUpdate()
Static IsListeBonCommande As Byte
IsListeBonCommande = IsListeBonCommande + 1
Me.Refresh
CopieTableListeItemBonCommande (IsListeBonCommande)
End Sub
Private Function CopieTableListeItemBonCommande(IsListeBonCommande)
Set db = CurrentDb
Set rsf = db.OpenRecordset("T_ListeItemBonCommande", dbOpenTable)
Set rsi = db.OpenRecordset("T_ListeItemFacture", dbOpenTable)
'JE VÉRIFIE SI LA LISTE DEROULANTE EST UTILISÉ POUR LA PREMIÈRE FOIS 'OU NON: SI C'EST LE CAS, JE COPIE SIMPLEMENT LES VALEURS. SINON, J''EFFACE DABORD LES ENREGISTREMENTS QUE J'AI COPIÉ ET ENSUITE JE 'RECOPIE LES NOUVEAUX DEMANDÉS.
If IsListeBonCommande > 1 Then
If rsf.EOF <> True And rsi.EOF <> True Then
rsf.MoveFirst
rsi.MoveFirst
Do While rsf.EOF <> True
Do While rsi.EOF <> True
If rsf![NoBonCommande] = rsi![NoBonCommande] Then
rsi.Delete
'DoCmd.RunCommand acCmdSaveRecord
End If
rsi.MoveNext
On Error GoTo Suite
Loop
Suite:
rsf.MoveNext
On Error GoTo Suite2
rsi.MoveFirst
On Error GoTo Suite2
Loop
End If
'DoCmd.RunCommand acCmdSaveRecord
GoTo Suite2
Else
Suite2:
rsf.Close
rsi.Close
Set rsf = db.OpenRecordset("T_ListeItemBonCommande", dbOpenTable)
Set rsi = db.OpenRecordset("T_ListeItemFacture", dbOpenTable)
If rsf.EOF <> True Then
rsf.MoveFirst
Do While rsf.EOF <> True
If rsf![NoBonCommande] = NoBonCommande Then
With rsi
.AddNew
!NoFacture = NoFacture
!NoBonCommande = NoBonCommande
!NomItem = rsf![NomItem]
!QuantiteItem = rsf![QuantiteItem]
!PrixItem = rsf![PrixItem]
!DepartementItem = rsf![DepartementItem]
.Update
End With
End If
On Error GoTo Fin
rsf.MoveNext
Loop
End If
End If
Fin:
'DoCmd.RunCommand acCmdSaveRecord
rsf.Close
rsi.Close
Set rsf = Nothing
Set rsi = Nothing
End Function |
Assez compliqué comme vous pouvez voir. Bref, ce code sert à copier les données d'une table vers une autre. Si une copie a déjà été réalisée, il faut effacer les donnnées copier et recommencer une copie d'après le nouveau bon de commande donné.
Le problème qui intervient dans mon cas est un message d'erreur qui dit :
"Les données ont été modifiées
Un autre utilisateur a modifié cet enregistrement et a sauvegardé ses modifications avant que vous essayiez de sauvegarder les votres.
Re-modifiez l'enregistrement."
Or je suis le seul utilisateur!!!8O
Lorsque je reselectionne un bon dans la liste, ça fonctionne. Mais dès que je recommence, pam le même message. Je pense que ça vient du code que je vous ai envoyé, deux choses entrent en conflit.
Je ne peux pas trouver la source du problème parce que l'erreur ne se produit jamais en DEBUG !!!!!!!!!!!!:aie:
Bref, ce problème est vraiment très étrange. Avez vous des suggestions ?
N'hésitez pas à me poser des questions.
http://smileys.sur-la-toile.com/repo...s/Smiley20.gif
pas besoin, mais merci quand meme
C'est bon j'ai trouvé mon problème. Il fallait que je fasse un Me.Refresh après appeler le code que je vous demande. De cette manière, l'utilisateur peut enregistrer ses données sans problèmes. C'est pour ça que le mode Debug ne marchait pas. Le fait de changer de fenête entraînait un Refresh.
Pas facile à trouver.
Bonne journée.:D