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

VBA Access Discussion :

[débutant] Transferer un enregistrement entre 2 tables


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Points : 13
    Points
    13
    Par défaut [débutant] Transferer un enregistrement entre 2 tables
    Bonjour,

    Je cherche en vain ma solution dans le FAQ bien garni mais sans succes
    c'est tout simple mais je bug...
    J'ai deux tables [Table1] et [Table2] qui ont les mêmes champ

    Un formulaire [Formulaire] qui affiche la [table1]

    Je cherche le code pour le mettre sur un bouton pour transferer cet l'enregistrement ( et tous les champs) en cours vers ma [table2] et les supprimer de la [table1] !

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 148
    Points : 112
    Points
    112
    Par défaut
    Utilise un recordset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    set db = currentdb()
    set rs = db.openrecordset("table2")
     
    rs.addnew
    rs!<NomChampTable2> = <ChampTexteFormulaire
    etc...
    rs.update

    Enuiste pour effacer dans ta table, utilise une simple requete sql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    docmd.runsql "Delect * from table 1 where <condition>

    Bon faut affiné ce code, en te servant de l'aide () et de la

  3. #3
    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, si c'est pour transférer/supprimer l'enregistrement en cours essaye
    d'adapter ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Bascule6_Click()
    CurrentDb.Execute "insert into Table2 (ChampNumérique,ChampTexte) values(" & "" & Me.ChampNumérique & "" & _
    "," & "'" & Me.ChampTexte & "'" & ")"
     
    CurrentDb.Execute "Delete from Table1 where ChampClé = " & Me.ChampClé
    Me.Requery
    End Sub

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    oki merci je vais essayer de le mettre en place...

    et je vous remontre mon code

    merci pour le coup de main!

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    sous estimant mes capacités en VBA je voudrais savoir un dernier détail concernant le code que tu m'as fourni :

    A quoi correspondent lestermes champNumérique, champText
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (ChampNumérique,ChampTexte) values(" & "" & Me.ChampNumérique & "" & _
    "," & "'" & Me.ChampTexte & "'" & ")"

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    j'ai essayé de récuper aussi le code fourni dans la FAQ et de l'adaptr à mes besoins (en n'y m'etant que pour l'exemple quelques champ) mais ca ne marche pa :

    voila mon code :

    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
     Private Sub Commande102_Click()
     
      'Création des 2 recordsets
        Dim myRS1 As New ADODB.Recordset
        Dim myRS2 As New ADODB.Recordset
     
        myRS1.Open "Sorti Matériel", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
        myRS2.Open "Table", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
     
        'Parcours du RS pour ajouter à table1 tout en supprimant de table2
        Do Until myRS2.EOF
            With myRS1
                .AddNew Array("N° garage", "Carte grise", "Site"), _
                              Array(myRS2("N° garage"), myRS2("Carte grise"), myRS2("Site"))
                .Update
            End With
     
           myRS2.Delete
           myRS2.MoveNext
        Loop
     
        'Fermeture des recordsets
        myRS1.Close
        myRS2.Close
     
        Set myRS1 = Nothing
        Set myRS2 = Nothing
     
    End Sub
    j'ai un message d'erreur deja sur la 1er ligne de code...: "instruction sql non valide????"
    je suis perdu la //merci //

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 148
    Points : 112
    Points
    112
    Par défaut
    Pense a mettre les balises de code stp !

    sinon il la fait où l'erreur ??

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    IL la fait des le début :

    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
      'Création des 2 recordsets
        Dim myRS1 As New ADODB.Recordset
        Dim myRS2 As New ADODB.Recordset
    
        myRS1.Open "Sorti Matériel", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
        myRS2.Open "Table", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
    
        'Parcours du RS pour ajouter à table1 tout en supprimant de table2
        Do Until myRS2.EOF
            With myRS1
                .AddNew Array("N° garage", "Carte grise", "Site"), _
                              Array(myRS2("N° garage"), myRS2("Carte grise"), myRS2("Site"))
                .Update
            End With
    
           myRS2.Delete
           myRS2.MoveNext
        Loop
    
        'Fermeture des recordsets
        myRS1.Close
        myRS2.Close
    
        Set myRS1 = Nothing
        Set myRS2 = Nothing
    et je vois pas pourkoi...

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    et ceci est mon message d'erreur :

    "Erreur d'execution 214 721 900 (80040e14)
    instruction sql non valide ; DELET INSERT PROCEDURE SELECT sont attendus"


    merci pour le coup de main...

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Points : 13
    Points
    13
    Par défaut Presque fini mais ..
    Bonjour,

    Je bloque sur un détail pouvez vous m'aider? j'ai un bouton de commande inspiré de la FAQ pour transferer TOUS les enregistrements d'une table à une autre mais je ne souhaite le faire que pour l'enregistrement en cours... j'ai parcouru la FAQ mais ss réponse..
    Voici le code :

    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
     
    'Création des 2 recordsets
        Dim MyRS1 As New ADODB.Recordset
        Dim myRS2 As New ADODB.Recordset
     
        MyRS1.Open "[Sorti Matériel]", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
        myRS2.Open "[Table]", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
     
        'Parcours du RS pour ajouter à table1 tout en supprimant de table2
        Do Until myRS2.EOF
            With MyRS1
                 .AddNew Array("Codgarage", "Carte Grise", "Site", "Date d'achat", "Date de mise en service", "Marque", "Catégorie", "Modèle", "Immatriculation", "Affectation", "Série", "Concéssion", "Garanti", "Plaque oval", "Date renouvellement", "Photos", "Prix d'achat"), _
                              Array(myRS2("Codgarage"), myRS2("Carte Grise"), myRS2("Site"), myRS2("Date d'achat"), myRS2("Date de mise en service"), myRS2("Marque"), myRS2("Catégorie"), myRS2("Modèle"), myRS2("Immatriculation"), myRS2("Affectation"), myRS2("Série"), myRS2("Concéssion"), myRS2("Garanti"), myRS2("Plaque oval"), myRS2("Date renouvellement"), myRS2("Photos"), myRS2("Prix d'achat"))
                .Update
            End With
     
           myRS2.Delete
           myRS2.MoveNext
        Loop
     
        'Fermeture des recordsets
        MyRS1.Close
        myRS2.Close
     
        Set MyRS1 = Nothing
        Set myRS2 = Nothing
     
    Me.Refresh
    Merci d'avance et desolé de mettre trompé de message...

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Points : 13
    Points
    13
    Par défaut tjrs le même problème :[
    Bonjour,
    je reviens avec toujours le même soucis que je n'arrive pas à résoudre et pourtant je cherche dans la FAQ...
    je voudrais que ce bouton ne copie que l'enregistrement en cours de visualisation ou alors une boite de dialogue qui me demande le Codgarage ?

    Merci pour votre coup de main et de se pancher sur mon pbm...

    leeloo perdue

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    Je rejoins Faw en te proposant une solution via SQL (mais en prenant les données directement dans la table et pas dans le formulaire) :

    (je suppose de Codgarage est la clef unique et numérique)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL = "INSERT INTO [Sorti Matériel]  ( [Codgarage], [Carte Grise], [Site], [Date d'achat], [Date de mise en service], [Marque], [Catégorie], [Modèle], [Immatriculation], [Affectation], [Série], [Concéssion], [Garanti], [Plaque oval], [Date renouvellement], [Photos], [Prix d'achat]) " _
    & " SELECT [Table].Codgarage, [Table].[Carte Grise] ,......, [Table].[Prix d'achat] FROM [Table] Where [Table].Codgarage = " & me.codgarage & ";"
    CurrentDb.Execute SQL
    CurrentDb.Execute "Delete from Table where Where [Table].Codgarage = " & me.codgarage & ";"
    Me.Requery

    A+

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    merci Muhad'hib pour ces infos j'essai de les mettre en place !

    J'etais entrain justement de revoir mon code par cet approche

    bonne journée !

  14. #14
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    bonjour,

    j'ai modifié le code pour que ca marche (enfin je pensais...mais non) il m'indique erreur type 3061 trop peu de parametre 2 attendu !
    j'ai relu mon code mais je crois pa avoir d'erreur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    Dim Sql As String
    
    Sql = "INSERT INTO [Sorti Matériel] ([Codgarage], [Carte Grise], [Site], [Date d'achat], [Date de mise en service], [Marque], [Catégorie], [Modèle], [Immatriculation], [Affectation], [Série], [Concéssion], [Garanti], [Plaque oval], [Date renouvellement], [Photos], [Prix d'achat]) " _
    & " SELECT [Table].[Codgarage], [Table].[Carte Grise], [Table].[Site], [Table].[Date d'achat], [Table].[Date de mise en service], [Table].[Marque], [Table].[Catégorie], [Table].[Modèle], [Table].[Immatriculation], [Table].[Affectation], [Table].[Série], [Table].[Concéssion], [Table].[Garanti], [Table].[Plaque ova], [Table].[Date renouvellement], [Table].[Photos], [Table].[Prix d'achat] FROM [Table] Where [Table].[Codgarage] = " & Me.Codgarage & ";"
    
    CurrentDb.Execute Sql
    
    CurrentDb.Execute "Delete from [Table] Where [Table].[Codgarage] = " & Me.Codgarage & ";"
    Me.Requery
    help ! je suis perdue !! snif

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Re,

    Ajoute un
    juste avant l'erreur et dis nous le résultat.

    Pour plus d'info sur le débugage d'un sql voir ici.

    A+

  16. #16
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    merci Muhad'hib ! pour tes conseils !

    en version debug j'ai une erreur de type 3061 trop peu de parametres.1 attendu !!! je remets mon code pour info

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Sql As String
     
    Sql = "INSERT INTO [Sorti Matériel] ([Codgarage], [Carte Grise], [Site], [Date d'achat], [Date de mise en service], [Marque], [Catégorie], [Modèle], [Immatriculation], [Affectation], [Série], [Concéssion], [Garanti], [Plaque oval], [Date renouvellement], [Photos], [Prix d'achat]) " _
    & " SELECT [Table].[Codgarage], [Table].[Carte Grise], [Table].[Site], [Table].[Date d'achat], [Table].[Date de mise en service], [Table].[Marque], [Table].[Catégorie], [Table].[Modèle], [Table].[Immatriculation], [Table].[Affectation], [Table].[Série], [Table].[Concéssion], [Table].[Garanti], [Table].[Plaque ova], [Table].[Date renouvellement], [Table].[Photos], [Table].[Prix d'achat] FROM [Table] Where [Table].[Codgarage] = " & Me.Codgarage & ";"
     
    Debug.Print SQl
    CurrentDb.Execute Sql
     
    CurrentDb.Execute "Delete from [Table] Where [Table].[Codgarage] = " & Me.Codgarage & ";"
    Me.Requery
    je précise aussi que la cles "Codgarage" est sous format text et pas numérique ...

    Merci pour votre aide !

  17. #17
    Membre éclairé Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Points : 812
    Points
    812
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Transfert_Click()
    DoCmd.SetWarnings False
    DoCmd.RunSQL ("INSERT INTO [Sorti Matériel] ( Codgarage, [Carte Grise], Site, [Date d'achat], [Date de mise en service], Marque, Catégorie, Modèle, Immatriculation, Affectation, Série, Concéssion, Garanti, [Plaque oval], [Date renouvellement], Photos, [Prix d'achat] )" _
    & " SELECT Table.Codgarage, Table.[Carte Grise], Table.Site, Table.[Date d'achat], Table.[Date de mise en service], Table.Marque, Table.Catégorie, Table.Modèle, Table.Immatriculation, Table.Affectation, Table.Série, Table.Concéssion, Table.Garanti, Table.[Plaque oval], Table.[Date renouvellement], Table.Photos, Table.[Prix d'achat] " _
    & " FROM [Table] " _
    & " WHERE (((Table.Codgarage)=[Forms]![TonFormulaire]![Codgarage]))")
    MsgBox "Enregistrement transféré avec succès"
    DoCmd.RunSQL ("DELETE Table.Codgarage, Table.[Carte Grise] " _
    & " FROM [Table] " _
    & " WHERE (((Table.Codgarage)=[Forms]![TonFormulaire]![Codgarage]))")
    DoCmd.SetWarnings True
    Me.Requery
    End Sub

  18. #18
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    merci bcp a vous tous !! ca marche avec succées je vais le détailler pour mieux le comprendre !!
    merci ft035580 !

    je me lance maintenant dans une recherche multi critère !! grace au tuto de cafeine !!

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

Discussions similaires

  1. [AC-2003] Problème lors d'un transfert d'enregistrement entre deux tables
    Par rberniga dans le forum VBA Access
    Réponses: 26
    Dernier message: 14/08/2009, 12h07
  2. contrôle sur données enregistrées entre 2 tables
    Par dodie84 dans le forum VBA Access
    Réponses: 14
    Dernier message: 22/05/2008, 17h39
  3. Transferer des données entre 2 tables
    Par Nakata|CH| dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 28/01/2008, 11h12
  4. [Débutant] select avec jointure entre 4 tables
    Par ulyssemac dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/11/2007, 19h39
  5. Réponses: 9
    Dernier message: 18/01/2007, 14h11

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