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 :

SQL jointure sur 2 onglets dont le nom est avec des espaces [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut SQL jointure sur 2 onglets dont le nom est avec des espaces
    Bonjour à tous,

    Pour réaliser une requête SQL avec une jointure sur 2 onglets dont le nom est avec des espaces, je partage ma solution

    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
    Dim oCnx As New ADODB.Connection
        Dim oRSet As ADODB.Recordset
        Dim sSql As String
     
        '---  Range for SQL Tables ---
     
        ThisWorkbook.Names.Add Name:="EnCours", RefersTo:=worksheets("Données en cours").Range("h8:i65000") '-> Solution propre, calculer la dernière ligne non vide
        ThisWorkbook.Names.Add Name:="Mailing", RefersTo:=Worksheets("Mailing List").Range("a1:d65000") ' -> Cf. commentaire ci-dessus
     
          '---Connecting to the Data Source---
        With oCnx
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=Yes"";"
            .Open
        End With
     
        '---Run the SQL SELECT Query---
     
        sSql = "SELECT DISTINCT [Responsable], Prenom, Name, Email FROM EnCours AS R  " & _
                " INNER JOIN Mailing AS M ON [R].[Responsable]= [M].[Name] " & _
                " WHERE [Responsable] <>'' " & _
                " ORDER BY [Responsable] ASC "
     
        Set oRSet = oCnx.Execute(sSql)
     
        ThisWorkbook.Names.Item("EnCours").Delete
        ThisWorkbook.Names.Item("Mailing").Delete
     
     
        Do While Not oRSet.EOF
           Debug.Print oRSet![Prenom] & " - " & oRSet![Name] & " - " & oRSet![Email]
            oRSet.Movenext
        Loop
     
        '---Clean up---
        oRSet.Close
        oCnx.Close
        Set oCnx = Nothing
        Set oRSet = Nothing

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox ThisWorkbook.FullName

  3. #3
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 592
    Par défaut
    Bonjour,
    tu t'éviteras toujours des désagrément si tu encadre systématiquement le [nom de tes tables] et [tes champs] par des crochets []

  4. #4
    Membre éprouvé

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Bonjour à jour


    Si j'écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sSql = "SELECT DISTINCT [Responsable], Prenom, Name, Email FROM [Données en cours$h8:i65000] AS R  " & _
                " INNER JOIN [Mailing List$a1:d65000] AS M ON [R].[Responsable]= [M].[Name] " & _
                " WHERE [Responsable] <>'' " & _
                " ORDER BY [Responsable] ASC "
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Données en cours$]h8:i65000
    J'ai l'erreur
    -2147217900 - Erreur de syntaxe dans la clause FROM
    Si j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[Données en cours$h8:i65000]]
    J'ai l'erreur
    -2147217900 - Mise en crochets non valide du nom [Données en cours$h8:i65000]

    Merci de me donner la bonne écriture

  5. #5
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 592
    Par défaut
    Bonjour
    Et comme ceci [Données en cours$h8:i65000] AS R

  6. #6
    Membre éprouvé

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    En erreur Thumb down

  7. #7
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 592
    Par défaut
    tu peux poster un fichier en bidonnant les données!

  8. #8
    Membre éprouvé

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Désolé mais il faut transformer le fichier en xlsm puis ajouter un bouton dans un des 2 onglets.
    Sur le onclick du bouton ajouter le code de mon post#1 et modifier le code SQL avec la référence à l’onglet et sa plage
    Fichiers attachés Fichiers attachés

  9. #9
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 592
    Par défaut
    regardes ça!
    Fichiers attachés Fichiers attachés

  10. #10
    Membre éprouvé

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Merci pour ton aide Thumb down, actuellement sur iPad donc pas accès au VBA. Pourrais-tu coller ton code dans ton dernier post.
    Encore merci

  11. #11
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 592
    Par défaut
    voila

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
     sSql = "SELECT DISTINCT [Responsable], Prenom, Name, Email FROM [Données en cours$a1:a65000] AS R  " & _
                " INNER JOIN [Mailing List$a1:d65000] AS M ON [R].[Responsable]= [M].[Name] " & _
                " WHERE [Responsable] <>'' " & _
                " ORDER BY [Responsable] ASC "
     
    With CreateObject("AdoDb.Connection")
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=Yes"";"
        .Open
       MsgBox sSql & vbCrLf & vbCrLf & .Execute(sSql).GetString
        .Close
    End With
    End Sub

  12. #12
    Membre éprouvé

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Merci Thumb down,

    Ta solution fonctionne parfaitement et tu nous gratifies en plus d'un bonus avec le rappel de l'utilisation de
    Execute(sSql).GetString
    Pour en savoir plus sur RecordSet.GetString, voir Ici l’excellent tuto de bidou


    Le code peut donc ainsi s'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        sTableResp = "[En cours$h8:h5000]"
        sTableMailing = "[Mailing List$a1:d1000]"
     
       sSql = "SELECT DISTINCT [Resp Action] AS Resp, Prenom, Name, extension, Email " & _
                " FROM " & sTableResp & " AS R  " & _
                " INNER JOIN " & sTableMailing & " AS M " & _
                " ON [R].[Resp Action] = [M].[Name] " & _
                " WHERE [Resp Action] <>'' " & _
                " ORDER BY [Resp Action] ASC "

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

Discussions similaires

  1. ouvrir onglets dont le nom est variable
    Par vbapasmapau dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/06/2017, 22h20
  2. [Toutes versions] Mettre le focus sur un champ dont le nom est contenu dans une variable
    Par possible924 dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/04/2015, 22h32
  3. Requete SQL sur une table dont le nom est dans une autre table
    Par orangepresse dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/09/2007, 14h32
  4. Réponses: 6
    Dernier message: 08/02/2007, 15h41
  5. Réponses: 4
    Dernier message: 27/12/2006, 22h53

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