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 : 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
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!!!

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.