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 :

Mise à jour d'une table avec le contenu d'une autre par recordset [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut Mise à jour d'une table avec le contenu d'une autre par recordset
    Bonjour à tous

    Je voudrai mettre à jour la table 1 avec les données de la table 2 aprés le choix d'un enregistrement dans une liste déroulante. Seuls les noms de champs identiques entre les 2 tables doivent être mis à jour. Comme des champs peuvent s'ajouter je préfèrerai passer par les recordset plutôt que par une requête mise à jour.

    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
     
            Dim dbs As Database
            Dim rsProtExamens, rsExamens As Recordset
            Dim IDProtocole, IDExamens As Integer
            Dim fld As DAO.Field
     
     
            IDProtocole = Nz(Me.Lst_Examens.Column(0), 0)
            IDExamens = Me.ID_Examen
     
            Set dbs = CurrentDb
            Set rsProtExamens = dbs.OpenRecordset("SELECT * FROM T_ProtocoleExamens WHERE ID_Protocole=" & IDProtocole)
            Set rsExamens = dbs.OpenRecordset("SELECT * FROM T_Examens WHERE ID_Examen=" & IDExamens)
                With rsExamens
                    rsExamens.Edit
                    For Each fld In rsProtExamens.Fields
                        If fld.Name = rsProtExamens.Field.Name Then
                              .........
    J'ai une vague idée mais je ne vois pas la suite. J'a essayé beaucoup de code mais sans succès.
    Je vous remercie d'avance pour vos suggestions et conseils.

  2. #2
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Bonjour,
    Si j'ai bien compris tes explications et le début de ton code, tu entres un identifiant et tu cherches à mettre à jour dans les deux tables les données entrées contenant cet identifiant, non ?

    Ton code commençait pas trop mal je pense. Voici ce que je ferais en recordset :

    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
     
            Dim rsProtExamens As Dao.recordset
            Dim rsExamens As DaoRecordset
            Dim IDProtocole As integer,
            Dim IDExamens As Integer
            Dim fld As DAO.Field
            Dim fld2 As DAO.Field
     
            IDProtocole = Nz(Me.Lst_Examens.Column(0), 0)
            IDExamens = Me.ID_Examen
     
            Set rsProtExamens = CurrentDb.OpenRecordset("SELECT * FROM T_ProtocoleExamens WHERE ID_Protocole=" & IDProtocole)
            Set rsExamens = CurrentDb.OpenRecordset("SELECT * FROM T_Examens WHERE ID_Examen=" & IDExamens)
     
            For Each fld In rsProtExamens.Fields
                 For Each fld2 in rsExamens.Fields
                      If fld.Name = fld2.name then
                            rsExamens.Edit
                            ' Je suppose que ta mise à sur la première est déjà faite
                            fld2.value = fld.value
                            rsExamens.Update
                      end if
                 next fld2
            next fld
    Je n'ai pas testé mais je pense que dans ce sens là, cela devrait fonctionner.
    Bon courage

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    C'est bien l’enchaînement des "For each" que je n'arrivais par à trouver.
    Merci beaucoup pour l'aide précieuse.

  4. #4
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Pas de soucis.
    Ce code est optimisable je pense pour qu'il soit plus rapide à appliquer. Mais je ne sais pas vraiment comment.

    Bonne continuation dans votre projet.

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Le plus performant serait de manipuler les tables (tableDef) et plus particulièrement la liste des champs pour construire un objet QueryDef (requête UPDATE ici) temporaire et de l'exécuter.

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

Discussions similaires

  1. Mise à jour d'une table avec les données d'une autre
    Par Equinoxe5 dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/09/2011, 08h00
  2. Réponses: 7
    Dernier message: 11/05/2010, 16h37
  3. [MySQL] Comparer le contenu d'une variable aux valeurs contenues dans une table
    Par mmlio dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/10/2009, 17h20
  4. [VB6]Mettre à jour une table avec les valeurs d'une DATAGrid
    Par mbzhackers dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 26/05/2006, 20h56
  5. modifier le contenu d'une table avec innerHTML
    Par francon81 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/05/2005, 09h02

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