{Access} correspondance entre 2 tables champ non i

mathieubec Messages postés 4 Statut Membre -  
 mathieubec -
Bonjour,

Sur une base de données propriété industrielle, j'ai 2 tables dans lesquelles j'ai un champs entreprise (dans chacune des tables). Je souhaite rechercher les entreprises commune à ces 2 tables. Le problème est que, bien que les entreprises soient les mêmes (dans la réalité industrielle), leur nom dans ces 2 champs ne sont pas forcément exactement les mêmes (par exemple : total peut devenir Total SA....) ce qui me pose un grand problème sachant que j'ai plusieurs milliers d'entreprises et que je souhaiterais donc automatiser une correspondance en recherchant les caractères commun entre ces 2 champs qui me permettraient de penser que les entreprises sont bien les mêmes.

Par exemple : Total (dans mon champ entreprise de la 1ère table), une fonction du type "si tu trouves TOTAL dans la chaîne de caractère de mon champ entreprise de la 2ème Table) alors faire la correspondance comme si il s'agissait de la même chaîne.

Et j'aimerais faire cela pour toutes mes entreprises des deux tables sans que j'ai à lui préciser le nom à rechercher mais plutôt "si tu trouves 5 caractères consécutifs dans la premier table et dans la seconde sur le champ entreprise" par exemple.

Est ce clair ? j'en suis pas certain

merci pour tout

9 réponses

  1. blux Messages postés 5044 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    c'est clair, mais c'est complexe et ça peut prendre plusieurs heures de traitement...
    0
  2. mathieubec Messages postés 4 Statut Membre
     
    merci pour votre réponse

    quelle serait alors la démarche à suivre
    0
  3. blux Messages postés 5044 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Idéalement lire une ligne de la table 1, extraire l'info pertinente et lire ensuite toutes les lignes de la table 2, pour voir si on trouve une correspondance.

    Ce qui fait qu'au total on aura fait un produit cartésien : lignes de la table 1 x lignes de la table 2...

    Le principal problème sera de trouver à quel moment on trouve une information pertinente dans la table 1.
    0
  4. mathieubec Messages postés 4 Statut Membre
     
    je vois bien ce que vous voulez dire. Dans ce contexte, quelles seraient les fonctions ou programmation à prévoir pour réaliser cette opération.

    merci pour votre aide
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. blux Messages postés 5044 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Parcours des tables avec un recordset et comparaison en VBA...

    Extraction avec des fonctions de chaine : str, mid,...
    0
  7. mathieubec Messages postés 4 Statut Membre
     
    Pourrais tu être me donner un exemple pour que je puisse mieux comprendre (sur la base de Total , Total SA par exemple). Si je comprends bien il va falloir que je créé une macro en VBA.

    Par contre tu parles d'extraction, mais je ne souhaite pas vraiment extraire une chaîne de caractère semblable aux 2 tables mais plutôt voir si une partie de la chaîne de la table 1 et identique à une partie de la chaîne de la table 2 pour les 2 champs étudiés (en l'occurrence entreprise).

    Merci pour le temps accordé
    0
  8. blux Messages postés 5044 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Je vais me pencher sur le sujet, mais pas pour l'instant...
    0
  9. blux Messages postés 5044 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Un peu de code qui recherche les 5 premiers caractères d'une chaine dans la totalité d'une autre présente dans une autre table.

    Table1 contient le champ 'nom1', Table2 contient le champ 'Nom2' et on recherche si les 5 premiers caractères de Nom1 sont présents dans Nom2 (en les forçant en majuscules pour la comparaison).

    Private Sub Bout_Rech_Click()
    Dim Rs1 As DAO.Recordset
    Dim Rs2 As DAO.Recordset
    Dim Str1 As String
    Dim Trouve As Integer
    Set Rs1 = CurrentDb.OpenRecordset("Table1")
    Set Rs2 = CurrentDb.OpenRecordset("Table2")
    Rs1.MoveFirst
    While Not Rs1.EOF
        Str1 = UCase(Left(Rs1!Nom1, 5))
        Rs2.MoveFirst
        While Not Rs2.EOF
            Trouve = 0
            Trouve = InStr(1, UCase(Rs2!nom2), Str1)
            If Trouve <> 0 Then
                MsgBox "Trouvé " & Rs1!Nom1 & " dans " & Rs2!nom2
            End If
            Rs2.MoveNext
        Wend
        Rs1.MoveNext
    Wend
    Set Rs1 = Nothing
    End Sub

    Ca peut donner un début.
    0
  10. mathieubec
     
    merci, je regarde cela et reprend contact avec toi dès que possible

    merci encore
    0