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 :

Syntaxe SQL avec méthode ADO


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Par défaut Syntaxe SQL avec méthode ADO
    Bonjour le forum,


    Petite question rapide mais je n'arrive pas à voir comment faire

    Je lis des données dans un classeur fermé, mais la syntaxe de ma requête n'est pas bonne. Un SELECT * FROM [" & NomFeuille & "$] marche très bien, mais je dois rajouter un WHERE, avec la valeur d'une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte_SQL = "SELECT * FROM [" & NomFeuille & "$] WHERE" & Range("B4:B100").Text = "& D"
    Je pense que le problème vient de la variable D que j'ai mal intégré à la requête.

    Merci d'avance !

  2. #2
    Membre chevronné
    Inscrit en
    Janvier 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 483
    Par défaut
    Bonjour
    si la variable D est string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sql = "SELECT * FROM [" & NomFeuille & "$] WHERE Range("B4:B100").Text = '"& D & "'"
    Abed_H

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Par défaut
    Merci de ta réponse ! J'ai mis ta requête à la place de la mienne, mais il me marque erreur de syntaxe

    il faut que je mette automatiquement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE" & Range("B4:B100").Text
    Les dquote et le et commercial sont obligatoires. j'ai laissé la suite, mais ça me met la même erreur à l'exécution, à ce niveau là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rst = Cn.Execute(texte_SQL)
    --> Instruction SQL Non Valide...

    Vive les requêtes

  4. #4
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,

    mais que renvoie : Range("B4:B100").Text ?

  5. #5
    Membre chevronné
    Inscrit en
    Janvier 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 483
    Par défaut
    si le champ B4:B100 a un nom exemple Code tu indique ce nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sql = "SELECT * FROM [" & NomFeuille & "$] WHERE Code = '"& D & "'"
    voici un exemple
    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
    Sub SelectionDonnées()	
      Dim Cn As ADODB.Connection	
      Dim Rst As ADODB.Recordset	
            Dim Feuille As String, strSQL As String	
            Dim Code As String	
            Feuille = "Feuil3"	
     
        Code = "D1403"	
        fichDest = ThisWorkbook.FullName	
     
        Set Cn = New ADODB.Connection	
        Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _	
                   "Data Source=" & fichDest & ";" & _	
                   "Extended Properties=""Excel 8.0;HDR=YES;IMEX=2;"""	
     
     strSQL = "Select * from [" & Feuille & "$] WHERE Codec = '" & Code & "' "	
     
            Set Rst = New ADODB.Recordset	
            Set Rst = Cn.Execute(strSQL)	
     
     Range("A15").CopyFromRecordset Rst	
     Cn.Close	
     Set Cn = Nothing	
    End Sub
    Bonne journée

    Abed_H

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Par défaut
    Alors Range("B4:B100") contient donc des cellules contenant des chaînes.
    Par exemple les jours de la semaine. Dans ma variable D je mets "Mardi".
    En clair ma requête serait de prendre tout ce qui figure sur la feuille, uniquement pour ce qui concerne le Mardi ^^

    La variable "Code" est donc ma variable "D".

  7. #7
    Membre Expert Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Par défaut
    bonjour

    il me semble Que Where ne compare que deux valeurs uniques
    La tu teste x valeurs à une autre unique

    il faudrait à mon sens faire une sous requête ou boucler sur ta plage
    avec un test sur ta valeur recherchée
    et effectuer ta requête a chaque fois que le test est vrai



    Jean-Pierre

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Par défaut
    Bien sûr je suis bête !

    Merci Jean Pierre

    Je vous tiens au courant dans la journée.

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Quel que soit le résultat de tes recherches, je vois, malgré tout, des fautes de syntaxe dans la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... NomFeuille & "$] WHERE" & Range("B4:B100").Text ...
    Il manque un espace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... NomFeuille & "$] WHERE " & Range("B4:B100").Text ...
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... "$] WHERE" & Range("B4:B100").Text = "& D"
    Les guillemets et le & sont mal placés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... "$] WHERE" & Range("B4:B100").Text & " = " & D
    Eventuellement ajouter les single quotes comme conseillé plus haut.

    Pour voir la "tête" que peut avoir une requête avec paramètres calculés, il est toujours bon d'en faire un debug.print.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

Discussions similaires

  1. [XL-2003] Copie d'une feuille avec méthode ADO
    Par Monfy29 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/01/2011, 17h26
  2. [AC-2003] Requête sql avec méthode DoCmd.Runsql bloqué dans une transaction
    Par rana dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/03/2010, 13h20
  3. Réponses: 6
    Dernier message: 27/07/2009, 05h14
  4. [MySQL] syntaxe SQL avec un update
    Par Miaou le chat thon dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/08/2008, 21h48
  5. [SQL] probleme de syntaxe sql avec php
    Par kaygee dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/06/2006, 14h32

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