Access MAJ table par une autre

Bonjour,

J'ai une Table A avec 25 Champs. Il existe un Champs Clé Primaire numérique non numéro automatique.
Cette clé primaire est un numéro de demande.
L'objectif est de mettre a jour cette table A (outil interne de service) via un fichier txt qui sera chargé dans un table TEMPO issu de l'extraction hebdomadaire d'un outil WEB mondial.
La table A contient un Champ de plus que l'extraction txt. Ce champs est le numero de projet auquel est rattaché le numero de la demande.

L'objectif de la requete est donc double :
1. Mise a jour : Ecraser Tous les champs existant en fonction de la cle primaire sauf le champs numero de projet.
2 Charger les nouvelles demandes qui seront ensuite affecté par les utilisateurs.

Je fais des essais avec du VBA et SQL.

je peux charger les donner manquante.
MAis je n(arrive pas a écraser les colonnes existantes.
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. LES Données sont identiques critères par critères, Même champs, Même nom...
    Ce qui me manque c'est le code VBA ou la requete sql pour écraser. les colonnes existantes en fonction de la cle primaire. et en gardant les données de la colonne supplémentaire.
    1. une requete update comprenant tes 2 tables et seulement les champs que tu veux écraser.
      je ne vois pas en quoi cela te pose un probleme ?
      1. Merci, Sir,
        Je ne suis pas expert access, moi je suis expert excel, et je ne connaissais pas cette fonctionalité. voici le code pour ceux qui auront besoin.

        Sub reporting_Click()

        Dim NomTable1 As String, NomTable2 As String
        Dim oRst1 As DAO.Recordset, orst2 As DAO.Recordset
        Dim odb As DAO.Database
        Dim Message As String
        Set odb = CurrentDb
        NomTable1 = "TB_DEI"
        NomTable2 = "TB_Tempo"
        Set oRst1 = odb.OpenRecordset(NomTable1)
        Set orst2 = odb.OpenRecordset(NomTable2)
        While Not orst2.EOF
        Insertion orst2, oRst1
        orst2.MoveNext
        Wend
        If Not oRst1.EOF Then oRst1.MoveLast
        Message = "Opération terminée" & vbCrLf & vbCrLf & _
        "La table source comportait : " & oRst1.RecordCount & " enregistrement(s)," & vbCrLf & _
        "la table de destination en comporte " & orst2.RecordCount
        MsgBox Message, vbInformation, "MAJ terminée"

        Dim db As DAO.Database
        Set db = CurrentDb()

        ' Exécution de la requête
        db.Execute "UPDATE TB_TEMPO INNER JOIN TB_DEI ON TB_TEMPO.NumDEI = TB_DEI.NumDEI SET TB_DEI.ObjetDEI = TB_TEMPO.ObjetDEI, TB_DEI.DateCreation = TB_TEMPO.DateCreation, TB_DEI.DemandeurDEI = TB_TEMPO.DemandeurDEI, TB_DEI.DirectionDEI = TB_TEMPO.DirectionDEI, TB_DEI.CodeAnalytiqueDEI = TB_TEMPO.CodeAnalytiqueDEI, TB_DEI.ValideurDEI = TB_TEMPO.ValideurDEI, TB_DEI.CamLeader = TB_TEMPO.CamLeader, TB_DEI.NatureDEI = TB_TEMPO.NatureDEI, TB_DEI.ThemeDEI = TB_TEMPO.ThemeDEI, TB_DEI.SousThemeDEI = TB_TEMPO.SousThemeDEI, TB_DEI.EtatDEI = TB_TEMPO.EtatDEI, TB_DEI.PrioriteDEI = TB_TEMPO.PrioriteDEI, TB_DEI.DateMOA = TB_TEMPO.DateMOA, TB_DEI.DetailDEI = TB_TEMPO.DetailDEI, TB_DEI.ChargesGlobalesDEI = TB_TEMPO.ChargesGlobalesDEI, TB_DEI.JoursRealisesDEI = TB_TEMPO.JoursRealisesDEI, TB_DEI.RafDEI = TB_TEMPO.RafDEI, TB_DEI.AuteurCreation = TB_TEMPO.AuteurCreation, TB_DEI.DateAcceptation = TB_TEMPO.DateAcceptation, TB_DEI.AuteurAcceptation = TB_TEMPO.AuteurAcceptation, TB_DEI.DateValidation = TB_TEMPO.DateValidation;"
        Debug.Print "Enregistrement affectés = " & db.RecordsAffected
        MsgBox (" Mise à Jour Terminée")
        db.Close
        End Sub

        Sub Insertion(oRst1 As DAO.Recordset, orst2 As DAO.Recordset)
        On Error GoTo err
        Dim Fld As DAO.Field
        orst2.AddNew
        For Each Fld In oRst1.Fields
        If (Fld.Attributes And dbAutoIncrField) = 0 Then
        orst2.Fields(Fld.Name).Value = Fld.Value
        End If
        Next Fld
        orst2.Update
        err:
        End Sub
        1. là tu utilises du code mais tu pouvais aussi passer par une requete, avec l'assistant ça aurait été encore plus rapide.
          mais tant que ça fonctionne...
          1. Oui tu as raison mais comme c'est pour un service il ne faut que des boutons et des actions qu'ils ne puissent pas toucher ensuite. j'ai préféré sécuriser.

            Merci beaucoup de ton aide en tout cas.
            1. juste pour info, il est possible d'associer une requete à un bouton.
              bonne journée.