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

Macros et VBA Excel Discussion :

Inner Join 2 fichiers EXCEL [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Inner Join 2 fichiers EXCEL
    Bonjour,

    Je souhaite réaliser une jointure sur le champ ID entre 2 fichiers xls distincts, en utilisant en vba une connexion Microsoft.ACE.OLEDB.

    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
     
        Dim strConnection As String
        Dim strQuery As String
        Dim objConnection As Object
        Dim objRecordSet As Object
     
        strConnection = _
            "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "User ID=Admin;" & _
            "Data Source='" & ThisWorkbook.FullName & "';" & _
            "Mode=Read;" & _
            "Extended Properties=""Excel 12.0 Macro;"";"
     
    Fichier1 = "c:\1.xls"
    Fichier2 = "c:\2.xls"
     
        strQuery = "SELECT [Fichier1].[Utilisateur$].[id], [Fichier1].[Utilisateur$].[Nom], [Fichier2].[commande$].[Quantité]" & _
    "FROM [Utilisateur$] INNER JOIN [commande$] ON [Utilisateur$].[id] = [commande$].[id] "
     
     
     
        Set objConnection = CreateObject("ADODB.Connection")
        objConnection.Open strConnection
        Set objRecordSet = objConnection.Execute(strQuery)
     
     
        Dim i As Long
     
        With objSheet
            Sheets("Test").Cells.Delete
            For i = 1 To objRecordSet.Fields.Count
                Sheets("Test").Cells(1, i).Value = objRecordSet.Fields(i - 1).Name
            Next
            Sheets("Test").Cells(2, 1).CopyFromRecordset objRecordSet
            Sheets("Test").Cells.Columns.AutoFit
        End With
     
        objConnection.Close
    Je n'arrive pas à écrire la requête en intégrant l'adresse des fichiers c:\1.xls c:\2.xls dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strQuery = "SELECT [Fichier1].[Utilisateur$].[id], [Fichier1].[Utilisateur$].[Nom], [Fichier2].[commande$].[Quantité] FROM [Utilisateur$] INNER JOIN [commande$] ON [Utilisateur$].[id] = [commande$].[id] "
    Pouvez-vous m'aider. Merci
    Cdlt

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, de la lecture : Comprendre les Recordset ADO

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Cet exemple est dans Access mais avec Excel c'est pareil!

    https://www.developpez.net/forums/d1...t/#post9666110

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci de vos retours.
    J'ai déjà parcouru le net et utilisé des exemples et autres informations, mais mon point de blocage concerne l'ecriture du "sql" pour la jointure de 2 fichiers indépendants.

    Je m'explique :

    l'exemple de dysorthographie indique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from  (Select * from [Feuil1$] in 'C:\rep\Classeur1.xls' 'Excel 12.0;HDR=Yes')
    J'ai essayé ça fonctionne, mais si j'ai 2 sources de données (2 fichiers excel) et que je souhaite faire unn Inner JOIn, je n'arrive par à écrire un code "Select ...." qui fonctionne.

    j'ai essayé de transcrire, mais je ne vois pas la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strQuery = "SELECT [Utilisateur$].[id] in 'C:\1.xls' 'Excel 12.0;HDR=Yes', [Utilisateur$].[Nom] in 'C:\1.xls' 'Excel 12.0;HDR=Yes', [commande$].[Quantité] in 'C:\2.xls' 'Excel 12.0;HDR=Yes'" & _
    "FROM [Utilisateur$] in 'C:\2.xls' 'Excel 12.0;HDR=Yes'"  INNER JOIN [commande$] ON [Utilisateur$].[id] = [commande$].[id] "

    Cdlt

  5. #5
    Invité
    Invité(e)
    Par défaut
    XLS1 est lié à ta connexion donc pas besoin de in!

    XLS2 c'est un sous requête!
    bref requête inner join Sous requête!
    Code Sous requête : Sélectionner tout - Visualiser dans une fenêtre à part
     (select * from [commande$]  as XLS2 in 'C:\2.xls' 'Excel 12.0;HDR=Yes' )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    With CreateObject("ADODB.Connection")
       .Open = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        trQuery = "SELECT [Xls1].[id],[Xls1].[Nom],[Xls2].[Quantité] " & _
        "FROM [Utilisateur$] as Xls1 INNER JOIN (select * from [commande$]  as XLS2 in 'C:\2.xls' 'Excel 12.0;HDR=Yes' ) ON [Xls1].[id] = [Xls2].[id] "
     Set Rs = .Execute(trQuery)
     .Close
     End With
    End Sub
    select [chapms] from (Sous Requête1) inner join (Sous reqête2) on etc...
    Code avec 2 jointures externe 1.xls 2.xls : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rQuery = "SELECT [Xls1].[id],[Xls1].[Nom],[Xls2].[Quantité] " & _
        "FROM (select * from  [Utilisateur$] as  Xls1 in 'C:\1.xls' 'Excel 12.0;HDR=Yes' ) INNER JOIN (select * from [commande$]  as XLS2 in 'C:\2.xls' 'Excel 12.0;HDR=Yes' )ON [Xls1].[id] = [Xls2].[id] "
    Dernière modification par Invité ; 14/11/2017 à 12h22.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci beaucoup pour ce retour ;-)

    Lors de l'utilisation de ton code avec 2 jointures, il m'indique "Erreur de syntaxe dans l'opération JOIN"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rQuery = "SELECT [Xls1].[id],[Xls1].[Nom],[Xls2].[Quantité] " & _
        "FROM (select * from  [Utilisateur$] as  Xls1 in 'C:\1.xls' 'Excel 12.0;HDR=Yes' ) INNER JOIN (select * from [commande$]  as Xls2 in 'C:\2.xls' 'Excel 12.0;HDR=Yes' )ON [Xls1].[id] = [Xls2].[id] "
    J'ai rebalayé le code (verif : espace, ', " ) je ne vois pas d’erreur de syntaxe ??

    Cdlt

  7. #7
    Invité
    Invité(e)
    Par défaut
    voila la requête que j'ai testé chez moi et qui fonctionne!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Sub TEST()
    Sql = "select * from  (Select * from [Feuil2$]   in 'C:\MyRepertoire2\Classeur1.xlsm' 'Excel 12.0;HDR=Yes') as xls1 inner join  (Select * from [Feuil3$]  in 'C:\MyRepertoire2\Classeur1.xlsm' 'Excel 12.0;HDR=Yes') as xls2 on xls2.A=xls1.A"
    With CreateObject("ADODB.Connection")
       .Open = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
     Set Rs = .Execute(Sql)
     .Close
     End With
     
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rQuery = "SELECT [Xls1].[id],[Xls1].[Nom],[Xls2].[Quantité] " & _
    "FROM (select * from  [Utilisateur$]  in 'C:\1.xls' 'Excel 12.0;HDR=Yes' ) as Xls1 INNER JOIN (select * from [commande$]  in 'C:\2.xls' 'Excel 12.0;HDR=Yes' ) as Xls2 ON [Xls1].[id] = [Xls2].[id] "

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Ton dernier code fonctionne. Merci dysorthographie

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par Invité Voir le message
    voila la requête que j'ai testé chez moi et qui fonctionne!
    Merci pour le code
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

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

Discussions similaires

  1. Mysql Inner join
    Par ..:: Atchoum ::.. dans le forum Requêtes
    Réponses: 3
    Dernier message: 25/10/2007, 12h21
  2. Enregistrement d'un fichier Excel par automation
    Par tiopan dans le forum Access
    Réponses: 2
    Dernier message: 04/12/2003, 19h57
  3. Sauvegarde fichier excel
    Par tiopan dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/10/2003, 13h36
  4. [Turbo Pascal] Utiliser un fichier Excel
    Par Lady dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 09/03/2003, 20h34
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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