Erreur requête SQL en VBA dans Excel

Signaler
Messages postés
3
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
3 août 2009
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Bonjour    
 
j'ai beau regarder tous les sujets du net à propos de cette erreur : "Aucune valeur donnée pour un ou plusieurs des parametres requis"
 
je n'arrive pas à la résoudre.

 
je tente une connexion à un classeur fermé excel qui contient deux feuilles : Temp et Tempsecteur

 
chacune des deux feuilles contient des données avec les colonnes suivantes  
 
Temp :            | Num commune| Num client | Code rue |

Tempsecteur : |test red | code entier | Code_commune | Code_rue |

 
Mon code :
 
Set cn = New ADODB.Connection

                               

With cn

                              .Provider = "Microsoft.Jet.OLEDB.4.0"

                              .ConnectionString = "Data Source=" & emplacement & _

                                              ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""

                              .Open

End With

                             
texte_SQL = "SELECT * FROM
[Temp$],[Tempsecteur$] Where  [Temp$].[Num commune] =
[Tempsecteur$].[Code_commune] " and [Temp$].[Code rue] =
[Tempsecteur$].[Code_rue] "

 
Set Rst = New ADODB.Recordset

Set Rst = cn.Execute(texte_SQL) 'Ligne ou l'erreur apparaît
 
Je ne sait pas d'où vient le problème... Certaines colonnes possède des espaces  
 (je précise que ce n'est pas moi qui ai créé la base de donnée d'où
proviennent ces tables), c'est pour cela que j'ai tout mis entre
crochet. Mais même si je tente de renommer les colonnes avant ma
requête afin qu'il n'y ai plus d'espace, la même erreur arrive    
 
si quelqu'un à une idée... 

11 réponses

Messages postés
267
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
1
Bonjour,
texte_SQL "SELECT * FROM [Temp$],[Tempsecteur$] Where  [Temp$].[Num commune] [Tempsecteur$].[Code_commune] " and [Temp$].[Code rue] = [Tempsecteur$].[Code_rue] "

Alors si tu as bien fait ton copier coller, qu'est ce que ce guillemet fait la???

J'ai pas regardé le reste.... J'ai juste regardé ta requete.

HellAngel777
<hr />
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
Messages postés
3
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
3 août 2009

Salut, ouai effectivement mon copié collé est raté, j'avais mis cette guillemet pour couper en deux ma requete (je voulais tester pas à pas ce qui pouvait planter...

comme tu t'en doute ma requête ressemble plus à cela :

texte_SQL = "SELECT * FROM [Temp$],[Tempsecteur$] Where  [Temp$].[Num
commune] [Tempsecteur$].[Code_commune]  and [Temp$].[Code rue]
[Tempsecteur$].[Code_rue] "
Messages postés
267
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
1
Re :
Essaye ce code... Je n'ai pas testé !
Par contre je suis pas spécialiste en sql mais quel est l'interet des dollars dans tes noms?
   Dim dbs As Database, 
   Dim rst As Recordset

   Set rst = dbs.OpenRecordset("SELECT * FROM [Temp$] " _
       ",[Tempsecteur$] Where  [Temp$].[Num commune] = [Tempsecteur$].[Code_commune] " _

       "and [Temp$].[Code rue] = [Tempsecteur$].[Code_rue];")



HellAngel777<hr />Les machines ne font pas d'erreurs
Heureusement nous sommes humains
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut,



[../auteur/SERGEITH/1703606.aspx sergeith]

-> en faisant juste
texte_SQL = "SELECT [Code_commune] FROM [Tempsecteur$]"
tu aurais vu que le problème ici est le nom des colonnes qui n'est apparemment pas récupérable

voici une manière pour une lecture facile, qui fonctionne






    'Table TEMP

    Const aNumCommune   As String = "F1"
    Const aNumClient    As String = "F2"
    Const aCodeRue      As String = "F3"
   
    'Table
TEMPSECTEUR
    Const bTestRed      As String = "F1"
    Const bCodeEntier   As String = "F2"
    Const bCodeCommune  As String = "F3"
    Const bCodeRue      As String = "F4"

    Dim sSql As String
    sSql = "SELECT * " & _
           "FROM [Temp$],
[Tempsecteur$] " & _
           "WHERE [Temp$]." & aNumCommune & " =
[Tempsecteur$]." & bCodeCommune & "
" & _
           "AND [Temp$]." & aCodeRue & " =
[Tempsecteur$]." & bCodeRue & ";"





<small>
[../code.aspx?ID=39466 Coloration VB6, VBA,
VBS]
</small>








++


Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut

Es-tu sûr que la connexion à la DB soit réussie ?
Que vaut cn.State après le .Open ?

Des "$" dans le nom des tables : J'aurai jamais osé.

Au lieu d'utiliser 
   Set Rst = cn.Execute
essaye cette syntaxe
   Rst.Open texte_SQL, cn
En général, Execute n'est utilisé que pour les requètes ne devant récupérer aucune données (Delete ou Insert par exemple)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut

[../auteur/HELLANGEL777/1600282.aspx hellangel777]

,

$ dans les noms, spécifique excel. pour signaler que c'est le nom de la feuille
Messages postés
267
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
1
Bonjour PCPT

Merci de l'info...

HellAngel777
<hr />
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
PCPT : perso, je comprends rien à l'utilisation de tes F1, F2 ...
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut

[../auteur/JACK/2204.aspx jack]

,

par ADO on a pas le nom des champs, ils sont en première ligne mais ne représentent pas le header qui est "F+numéro_champ"

les constantes juste pour être plus lisible


Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
Messages postés
3
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
3 août 2009

Merci pour vos réponses

effectivement le $ c'est pour signaler que c'est le nom d'une feuille excel

PCPT: je crois que je ne pouvais pas récupérer les nom des colonnes à cause de ma chaîne de connexion :

.ConnectionString = "Data Source=" & emplacement & _
                                              ";Extended Properties=""Excel 8.0;HDR= No ;IMEX =1;"""

au lieu de

.ConnectionString = "Data Source=" & emplacement & _
                                              ";Extended Properties=""Excel 8.0;HDR= Yes ;IMEX =1;"""

jack: Merci, si j'ai des problèmes avec cn.execute je testerai avec rst.open :)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
en effet, en passant à YES on peut alors nommer par le contenu de la première ligne, et le premier enregistrement est alors la 2e ligne

testé avec ado 2.8

çà m'apprendra aussi à recopier bêtement