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 :

Comparer 2 tables a 200 champs sous access


Sujet :

Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Points : 5
    Points
    5
    Par défaut Comparer 2 tables a 200 champs sous access
    Bonjour a tous,

    J'aimerais savoir comment comparer les champs de ma table A avec ceux de la table B ? Comparaison 1 a 1 sauf sur l'id des mes 2 tables, table de meme structure avec 200 champs dans chaque table

    J'ai construit une requête sql dynamique or mon problème c'est qu-il y a plus de champs que prévu du coup cela me génère une erreur la 3190


    Comment puis-je faire pour comparer mes données sans cette erreur ?

    Je souhaites savoir si un écart est constaté entre le champs A et le champs B ?

    Cordialement les developpiens

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Solution 1)
    dans ton code existant rajoute un DoEvents, ça m'est arrivé de résoudre des problèmes un peu similaires comme ça

    Solution 2)
    si tu maîtrise VBA, tu peux essayer de faire tout en code avec recordset DAO

    tu crées une table de metadata comprenant le nom des champs de ta table à contrôler
    tu crées une table de résultat: ID, Champ, ValeurSource, ValeurCible

    tu travailles avec 4 recordset: rstSource, rstCible, rstChamp, rstResultat et l'algo aura cette tête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while not rstSource.eof
            rstCible.findfirst "ID=" & rstSource("ID")
            rstChamp.movefirst
            while not rstChamp.eof
               if rstSource(rstChamp("Champ")) <>rstCible(rstChamp("Champ")) then rstResultat.add..... 
               rstChamp.movenext
            Wend       
            rstSource.movenext
    Wend

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Pour comparer 200 champs 1 à 1, je recommande le code suivant (basé sur l'exemple de accessisgood).

    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
    dim f as dao.fields:for each field in rstSource.fields
     
       select case f.name
          case "ID"
             'Ne pas comparer
     
          case else
     
             if rstCible.fields(f.name) <> f then
                'Enregistre le résultat
             end if
     
        end select
     
    next f
    Cela évite d'avoir à définir une table avec les 200 noms de champ.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Points : 5
    Points
    5
    Par défaut
    Bonjour Marot et accessisgood,

    Veuillez excuser ma réponse tardive j'étais en formation ces 2 dernières semaines donc sur d'autres projets

    Si je comprend bien marot, je fais ma table réference et ma table résultat :
    Je place les résultat dans une table erreur

    Ma table ref a 180 colonne idem pour resultat et je cherche a lister les differences via une requete sql construire au fur et a mesure : petit soucis je me heurte à la limite Excel de pas plus de 250 colonne dans une table car beaucoup d'enregistrements

    Si je comprend bien votre solution vous comparer les champs table a table sans sql or c'est les valeurs que je souhaites comparer

    Merci de votre aide

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rstCible.fields(f.name) <> f
    est la version condensée de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rstCible.fields(f.name).value <> f.value
    .value est la propriété par défaut et n'a pas besoin d'être indiquée explicitement.

    La limite de 255 est dans Access (pas plus de 255 champs dans une table ou une requête) et les versions de Excel avant 2007.
    Depuis 2007, en format xlsx, Excel accepte 16 384 colonnes et 1 048 576 lignes.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Points : 5
    Points
    5
    Par défaut
    D'accord MArot

    Je travaille sous acces pas Excel et par requete sql apres je connais la propriété value (j'avais compris votre code )

    Par contre est-il possible sans sql de verifier et comparer 2 table access : chaque champs d'une ligne (table reference) a chaque champs d'une ligne (table resultat) via un id commun pour chaque ligne ?
    Et stocker le resultat de la comparaison si erreur dans une tableerreur ?

    Cordialement

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Ici un exemple à adpter à ta réalité. Là j'ai supposé que tu avais un champ Clef numérique qui était commun à tes 2 tables.

    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
    private sub ComparerT1_T1()
     
    dim db as dao.database: set db=currentdb
    dim r1 as dao.recordset: set r1=db.openrecordset("TaTable1", dbOpenDynsaset)
    dim r2 as dao.recordset: set r2=db.openrecordset("TaTable2", dbOpenDynsaset)
     
    call db.execute("delete * from [TaTableErreur]", dbFailOnError) 'Vide la table de résultat
    dim r as dao.recordset: set r=db.openrecordset("TaTableErreur", dbOpenDynsaset)
     
    dim f as dao.fields:
     
    do while not r1.eof()
     
       call r2.findfirst("[Clef]=" & r1![Clef]) 'Trouve l'enr correspondant à R1 dans R2
     
       for each field in r1.fields
     
          select case f.name
             case "ID"
             'Ne pas comparer
     
             case else
     
                if r2.fields(f.name) <> f then
                   'Energistre le résultat
                   r.addnew
                   r![Clef]=r1![Clef]
                   r![NomChamp]=f.name
                   r![ValeurR1]=f.value
                   r![ValeurR2]=r2.fields(f.name).value
                   r.update
                end if
     
           end select
     
       next f
     
       call r1.movenext
    loop
     
    r1.close:set r1=nothing
    r2.close:set r2=nothing
    r.close:set r=nothing
    db.close:set db=nothing
     
    end sub
    Si tu as seulement des "lignes" en parallèle alors il faut faire un parcours du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    do while not r1.eof()
       if r2.eof() then
         exit do
       end if
     
       'ici le code de comparaison
     
       r1.movenext
       r2.movenext
    loop
    Et il faut gérer les cas où tu as plus d'enregistrements dans R1 que dans R2 et vice-versa.
    Logiquement les enregsitrements sur numéraires devraient être tous dans les erreurs.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Points : 5
    Points
    5
    Par défaut
    Merci de votre aide MAROT

    Cela est-il genant si l'id n'est pas un auto increment ?

    J'ai un id commun au 2 tables pour chaque ligne et apres je veux contoler la valeur des 179 colonnes restantes entre la table ref et la table resultat si difference alors sortir l'ecart et insérer dans la table erreur

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Non ce n'est pas important du moment que c'est un nombre.

    Ici un exemple qui enregistre la diffrence :

    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
    private sub ComparerT1_T1()
     
    dim db as dao.database: set db=currentdb
    dim r1 as dao.recordset: set r1=db.openrecordset("TaTable1", dbOpenDynsaset)
    dim r2 as dao.recordset: set r2=db.openrecordset("TaTable2", dbOpenDynsaset)
     
    call db.execute("delete * from [TaTableErreur]", dbFailOnError) 'Vide la table de résultat
    dim r as dao.recordset: set r=db.openrecordset("TaTableErreur", dbOpenDynsaset)
     
    dim f as dao.fields:
     
    do while not r1.eof()
     
       call r2.findfirst("[ID]=" & r1![ID]) 'Trouve l'enr correspondant à R1 dans R2
     
       for each field in r1.fields
     
          select case f.name
             case "ID"
             'Ne pas comparer
     
             case else
     
                if r2.fields(f.name) <> f then
                   'Energistre le résultat
                   r.addnew
                   r![ID]=r1![ID]
                   r![NomChamp]=f.name
                   r![IndexChamp]=f.ordinalpositon
                   r![ValeurR1]=f.value
                   r![ValeurR2]=r2.fields(f.name).value
                   r[Delta]=r![ValeurR1]-r![ValeuR2]
                   r.update
                end if
     
           end select
     
       next f
     
       call r1.movenext
    loop
     
    r1.close:set r1=nothing
    r2.close:set r2=nothing
    r.close:set r=nothing
    db.close:set db=nothing
     
    end sub
    Ta table de résultat pourait être :

    • ID
    • IndexChamp (entier long, conserve l'ordre des colonnes)
    • NomChamp (texte : le nom du champ comparé)
    • ValeurR1 (La valeur dans la 1ère table)
    • ValeurR2 (La valeur dans la 2ième table)
    • Delta (la différence entre R1 er R2)


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Points : 5
    Points
    5
    Par défaut
    Merci pour votre aide


    "[ID]=" ---> affectation pour le case

    r1![nom de mon champs id] ---> c'est a cet endroit dans le code que je remplace id par le nom du champs qui sera l'id pour moi


    Ai-je bien compris ton code ?

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Oui, j'ai mis les noms qui me paraissaient les meilleurs mais tu dois l'adapter à ta réalité.

    L'important c'est l'idée génrale.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Technicien de recherche
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Erreur de compilation : Membre de méthode ou données introuvable (.Name)
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Ici un exemple à adpter à ta réalité. Là j'ai supposé que tu avais un champ Clef numérique qui était commun à tes 2 tables.

    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
    private sub ComparerT1_T1()
     
    dim db as dao.database: set db=currentdb
    dim r1 as dao.recordset: set r1=db.openrecordset("TaTable1", dbOpenDynsaset)
    dim r2 as dao.recordset: set r2=db.openrecordset("TaTable2", dbOpenDynsaset)
     
    call db.execute("delete * from [TaTableErreur]", dbFailOnError) 'Vide la table de résultat
    dim r as dao.recordset: set r=db.openrecordset("TaTableErreur", dbOpenDynsaset)
     
    dim f as dao.fields:
     
    do while not r1.eof()
     
       call r2.findfirst("[Clef]=" & r1![Clef]) 'Trouve l'enr correspondant à R1 dans R2
     
       for each field in r1.fields
     
          select case f.name
             case "ID"
             'Ne pas comparer
     
             case else
     
                if r2.fields(f.name) <> f then
                   'Energistre le résultat
                   r.addnew
                   r![Clef]=r1![Clef]
                   r![NomChamp]=f.name
                   r![ValeurR1]=f.value
                   r![ValeurR2]=r2.fields(f.name).value
                   r.update
                end if
     
           end select
     
       next f
     
       call r1.movenext
    loop
     
    r1.close:set r1=nothing
    r2.close:set r2=nothing
    r.close:set r=nothing
    db.close:set db=nothing
     
    end sub
    Si tu as seulement des "lignes" en parallèle alors il faut faire un parcours du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    do while not r1.eof()
       if r2.eof() then
         exit do
       end if
     
       'ici le code de comparaison
     
       r1.movenext
       r2.movenext
    loop
    Et il faut gérer les cas où tu as plus d'enregistrements dans R1 que dans R2 et vice-versa.
    Logiquement les enregsitrements sur numéraires devraient être tous dans les erreurs.

    A+
    Bonjour marot_r

    Je suis désolé de ressortir cette discussion datée (qui est peut-être la cause de mon problème). J'utilise MS Access 2016
    J'ai essayé d'inclure votre code (adapté à ma situation) mais j'ai malheureusement une erreur de compilation à la ligne 18 (.Name)
    Mon but étant de comparer l'ensemble des données des 2 tables, l'une d'entre-elles correspond à une importation d'un fichier Excel, l'autre à une table test identique à celle de l'enregistrement final
    Ce afin de vérifier que les données importées correspondent bien aux critères de la table (exemple suppression lors de l'importation d'une valeur ne correspondant pas au format date)

    Ci-dessous 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Sub comparaison_tables()
     
    Dim db As DAO.Database: Set db = CurrentDb
    Dim r1 As DAO.Recordset: Set r1 = db.OpenRecordset("T_IMPORT_TUBES_TEST", dbOpenDynsaset)
    Dim r2 As DAO.Recordset: Set r2 = db.OpenRecordset("IMPORT_EXCEL_TUBES", dbOpenDynsaset)
     
    Call db.Execute("delete * from [T_ERR_IMPORT_TUBES]", dbFailOnError) 'Vide la table de résultat
    Dim r As DAO.Recordset: Set r = db.OpenRecordset("T_ERR_IMPORT_TUBES", dbOpenDynsaset)
     
    Dim f As DAO.Fields:
     
    Do While Not r1.EOF()
     
       Call r2.FindFirst("[N°]=" & r1![]) 'Trouve l'enr correspondant à R1 dans R2
     
       For Each Field In r1.Fields
     
          Select Case f.Name
             Case "N°"
             'Ne pas comparer
     
             Case Else
     
                If r2.Fields(f.Name) <> f Then
                   'Energistre le résultat
                   r.AddNew
                   r![Clef] = r1![]
                   r![NomChamp] = f.Name
                   r![ValeurR1] = f.Value
                   r![ValeurR2] = r2.Fields(f.Name).Value
                   r.Update
                End If
     
           End Select
     
       Next f
     
       Call r1.MoveNext
    Loop
     
    r1.Close: Set r1 = Nothing
    r2.Close: Set r2 = Nothing
    r.Close: Set r = Nothing
    db.Close: Set db = Nothing
     
    End Sub
    Structure de ma table Erreur (pour ne pas avoir a faire de modification) :
    • Clef
    • NomChamp
    • ValeurR1
    • ValeurR2



    Bon ceci étant dit, les tables que je souhaite comparer n'ont que 8 champs, je peux peut-être les saisir manuellement en vba plutôt que d'utiliser ce code un peu plus générique.

    Par avance, merci de votre aide ,

    Cordialement,

    Dod_lt-111

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Field In r1.Fields
    devrait être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each f In r1.Fields
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Technicien de recherche
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Ci-dessous les modifications apportées pour la résolution de mon problème :
    • Modification de "For Each Field In r1.Fields" par "For Each f In r1.Fields" suite au commentaire de marot_r
    • Modification de "Dim f As DAO.Fields:" par "Dim f As DAO.Field:"
    • Utilisation de Seek plutôt que FindFirst
    • Suppression de "dbOpenDynaset" lorsque j'ouvre mes tables


    Ce qui donne :

    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
    Sub comparaison_tables()
     
    Dim db As DAO.Database: Set db = CurrentDb
    Dim r1 As DAO.Recordset: Set r1 = db.OpenRecordset("T_IMPORT_TUBES_TEST")
    Dim r2 As DAO.Recordset: Set r2 = db.OpenRecordset("IMPORT_EXCEL_TUBES")
     
    Call db.Execute("delete * from [T_ERR_IMPORT_TUBES]") 'Vide la table de résultat
    Dim r As DAO.Recordset: Set r = db.OpenRecordset("T_ERR_IMPORT_TUBES")
     
    Dim f As DAO.Field:
     
    Do While Not r1.EOF()
     
    r2.Index = "N°"
    r2.Seek "=", r1![]
     
       For Each f In r1.Fields
     
          Select Case f.Name
            Case "N°"
                'Ne pas comparer
     
            Case Else
     
                'Ici le code de comparaison
     
                End If
           End Select
       Next f
     
       r1.MoveNext
    Loop
     
    r1.Close: Set r1 = Nothing
    r2.Close: Set r2 = Nothing
    r.Close: Set r = Nothing
    db.Close: Set db = Nothing
     
    End Sub
    Bon le soucis maintenant c'est que mes champs n'ont pas le même format donc il sont considérés différents, mais cela est un autre sujet,

    Merci pour votre aide,

    Dod_lt-111

  15. #15
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Je relance ce sujet !

    J'ai repris ce code dans mon contexte mais j'ai un message d'erreur 3800 que je ne sais pas résoudre : "Matricule" n'est pas un index de cette table
    J'ai cette erreur sur la ligne suivante : r2.Index = "Matricule"

    J'ai donc défini ce champ comme clé de la table mais l'erreur persiste.

    Savez-vous d'où vient le problème svp ? Merci pour votre aide.

  16. #16
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Avez-vous vérifié en cliquant sur l'icône Index ?
    Probablement avez-vous par défaut PrimaryKey. Remplacez-le par Matricule.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  17. #17
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Bonjour et merci ! Le script fonctionne parfaitement !

    Question subsidiaire : comment logguer le cas d'un enregistrement qui aurait disparu càd si la clé n'est pas trouvé ?
    Peut-on simplement positionner un flag booléen dans la boucle "for each" ?

  18. #18
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Tu peux utiliser r2.NoMatch après le seek.

    quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    r2.Seek "=", r1![]
     
    if not r2.nomatch() then
        'Ici le code de comparaison champ par champ
    end if
    Une note à propos de Seek, cette instruction ne fonctionne pas sur les tables liées c'est pour cela que je préfère utiliser FindFirst plus lent mais qui fonctionne tout le temps.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  19. #19
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Bonjour, merci je vais tester ça et je vous tiens au courant.

  20. #20
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Le NoMatch fonctionne très bien !
    Dans une même table en sortie, j'enregistre soit les différences de valeurs entre les deux tables soit l'absence d'une valeur dans la table la plus récente.

    Merci !

Discussions similaires

  1. [ASE 21.5.4] mappage des tables sybase 12.5 sous access 2003 via odbc
    Par dngaya dans le forum Adaptive Server Enterprise
    Réponses: 5
    Dernier message: 27/02/2008, 15h50
  2. [Table]Ajout de champ dans ACCESS
    Par Eric Harvey dans le forum Modélisation
    Réponses: 7
    Dernier message: 15/04/2007, 17h17
  3. Réponses: 1
    Dernier message: 15/06/2006, 16h39
  4. changer les noms de champs sous access
    Par Flo42 dans le forum Access
    Réponses: 4
    Dernier message: 11/04/2006, 11h29
  5. tester si une table existe ou non sous access
    Par Lady_jade dans le forum Access
    Réponses: 4
    Dernier message: 17/02/2006, 19h44

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