Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/03/2011, 16h21   #1
Invité de passage
 
Inscription : mars 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 4
Points : 1
Points : 1
Par défaut message d'erreur "Update ou cancelUpdate effectué sans appeler AddNew ni Edit"

Bonjour à Tous,

je gère une base access2003 pour ma société et je bloque sur le message d'erreur suivant : "Update ou cancelUpdate effectué sans appeler AddNew ni Edit"

le contexte :
1- j'ai une table nommée Tmp avec 3 colonnes (cette table est issue d'un import Excel) :
colonne 1 = [Index contact]
colonne 2 = [voeux 2011]
colonne3 = [cadeau 2011]

2- j'ai une table cible T_mailing déjà existante où je crée deux nouvelles colonnes [voeux 2011] et [cadeau 2011] pour l'instant vierge de données. la première colonne de cette table est [index contact]

Jusqu'ici tout va bien, mais c'est par la suite que cela bug
3- je souhaite remplir mes nouvelles colonnes sous T_mailing avec les 2 colonnes de Tmp en respectant la condition pour chaque ligne :
[Index contact].[T_mailing]=[Index contact].[Tmp].

voici donc le code qui pose problème lors du passage sur la ligne : ![voeux_2012] = " & Tabletmp.Fields(1).Value" avec le message énoncé précédemment.
je ne comprends pas pourquoi, il me sort ce message alors que je lui indique Matable.edit dans la boucle With.

J'ai beau chercher sur la toile des solutions dans les forums, je bloque...

si quelqu'un a une idée sur une grosse erreur que j'aurais fait.
Merci d'avance !

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
 
    Dim MaTable As DAO.Recordset
    Dim Tabletmp As DAO.Recordset
    Set MaTable = CurrentDb.OpenRecordset("T_mailing", dbOpenDynaset)
    Set Tabletmp = CurrentDb.OpenRecordset("tmp", dbOpenDynaset)
 
 
   'on répercute les ajouts sur la table mailing pour les deux nouvelles colonnes
    Dim val As Integer
     While Not Tabletmp.EOF
        MaTable.Edit
        Tabletmp.Edit
        Tabletmp.MoveFirst
        val = Tabletmp.Fields(0).Value
        With MaTable
            .Edit
            .FindFirst ("[Index contact] = " & val)
            ![voeux_2011] = " & Tabletmp.Fields(1).Value"
            ![Cadeau_2011] = " & Tabletmp.Fields(2).Value"
            .Update
            .Requery
        End With
        Tabletmp.MoveNext
     Wend
     MaTable.Update
     MaTable.Close
     Tabletmp.Close
geogeo_31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 17h31   #2
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Bonjour,

je pense que votre problème vient que vous faites 2 fois MaTable.Edit et 2 fois MaTable.Update.
Le premier MaTable.Edit qui se trouve en dehors de votre With et dans votre boucle While est inutile. De même pour votre second MaTable.Update (situé juste après votre boucle While).
Ah, et aussi, vous avez un MaTabletmp.Edit dans votre boucle While inutile puisque vous ne mettez pas à jour ce recordset. Le .Requery est aussi inutile car vous ne mettez pas à jour les champs sur lesquekls vous effectuez votre recherche.
Et dernier point : votre boucle est infinie puisque vous revenez au premier enregistrement à chaque fois que vous passez dans votre boucle.

Personnellement, j'aurai écrit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
    Dim MaTable As DAO.Recordset
    Dim Tabletmp As DAO.Recordset
    Set MaTable = CurrentDb.OpenRecordset("T_mailing", dbOpenDynaset)
    Set Tabletmp = CurrentDb.OpenRecordset("tmp", dbOpenDynaset)
 
 
   'on répercute les ajouts sur la table mailing pour les deux nouvelles colonnes
    Dim val As Integer
     Tabletmp.MoveFirst
     While Not Tabletmp.EOF
        val = Tabletmp.Fields(0).Value
        With MaTable
            .FindFirst ("[Index contact] = " & val)
            .Edit
            ![voeux_2011] = " & Tabletmp.Fields(1).Value"
            ![Cadeau_2011] = " & Tabletmp.Fields(2).Value"
            .Update
            End With
        Tabletmp.MoveNext
     Wend
     MaTable.Close
     Tabletmp.Close
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 08h58   #3
Invité de passage
 
Inscription : mars 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 4
Points : 1
Points : 1
Bonjour Aegnor,

désolé pour le retard dans la réponse, mais j'avais de l'huile sur le feu sur d'autres projets...

Je vous remercie de vos conseils, la solution proposée marche effectivement très bien

je suis encore loin d'arriver à coder bon du premier coup....

A bientôt et j'espère pouvoir vous aider un jour.

Cordialement, Geoffroy
geogeo_31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h54.


 
 
 
 
Partenaires

Hébergement Web