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 :
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é.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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!!!
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 !!!!!!!!!!!!
Bref, ce problème est vraiment très étrange. Avez vous des suggestions ?
N'hésitez pas à me poser des questions.
![]()
Partager