IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Conflit d'édition lors de l'exécution d'un code VBA


Sujet :

Access

  1. #1
    Membre régulier Avatar de nicou50
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 131
    Points : 80
    Points
    80
    Par défaut 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 : 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.

  2. #2
    Faw
    Faw est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1 169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 169
    Points : 1 383
    Points
    1 383
    Par défaut
    Salut,
    pas tout suivi mais essaye de vérouiller l'enregistrement avant d'agir dessus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.RunCommand acCmdSelectRecord 

  3. #3
    Membre régulier Avatar de nicou50
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 131
    Points : 80
    Points
    80
    Par défaut 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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ARM] Etat des registres lors de l'exécution d'un code
    Par devdeb91 dans le forum Autres architectures
    Réponses: 3
    Dernier message: 24/06/2015, 18h40
  2. [XL-2007] Optimisation du temps d'exécution d'un code vba
    Par chepa dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/06/2012, 09h39
  3. problème d'exécution d'un code VBA
    Par Orion34080 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/06/2012, 11h33
  4. erreur lors de l'exécution de mon code
    Par sarrsouraa dans le forum Visual Studio
    Réponses: 0
    Dernier message: 11/10/2011, 15h33
  5. Optimisation de temps d'exécution d'un Code VBA
    Par Adilleroy dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 26/07/2010, 13h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo