Problème syntaxe VBA requête SQL

Vorens

XLDnaute Occasionnel
Bonjour,



Je ne parvient pas à écrire correctement la ligne permettant de récupérer par exemple la range A1:A10 d'une feuille située dans un classeur fermé. Voici le code

Code:
Sub tstTab3()


Dim Cn As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, texte_SQL As String
Dim Rst As ADODB.Recordset
'Définit le classeur fermé servant de base de données
Fichier = "C:\Users\Bruno\SkyDrive\Documents\Excel\Solution & Exemple VBA\Requête SQL dans un Workbook\Fichier base de données.xls"
'Nom de la feuille dans le classeur fermé
NomFeuille = "DB1"
Set Cn = New ADODB.Connection
'--- Connexion ---
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With
'-----------------
'
'... la requête ...

Set rs = Cn.Select("[DB1$A1:A10]")

[A1].CopyFromRecordset rs 'Destination ?
'
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing

End Sub

Le problème se situe à la ligne:

Code:
Set rs = Cn.Select("[DB1$A1:A10]")

Le message d'erreur est: Argument de type incorrectes, hors limite ou en conflits les un avec les autres.

La question est: comment écrire cette ligne de code afin de récupérer le contenu du range souhaité.

Par avance merci pour votre aide.

Meilleures salutations

Vorens
 

Dranreb

XLDnaute Barbatruc
Re : Problème syntaxe VBA requête SQL

Bonjour
Bien que je n'ai jamais travaillé avec de telles connections, je dirais qu'il manque un "!":
VB:
Set rs = Cn.Select("[DB1!$A1:A10]")
P.S. Mais vérifiez dans une aide de quel type doit être l'argument de la méthode cn.Select.
Si c'est Range et non String il ny a pas lieu de le spécifier entre guillemets.
Ni si c'est un tableau de Variant devant refléter le contenu de la plage: alors c'est Feuil1.[A1:A10].Value, Feuil1 étant supposé le CodeName de la feuille DB1.
Cordialement.
 
Dernière édition:

Vorens

XLDnaute Occasionnel
Re : Problème syntaxe VBA requête SQL

Re,

Merci pour ton aide mais malheureusement cela n'arrange pas mon problème.

Je met en pièce jointe les deux fichiers tests.

Le premier est celui ou je veux voir s'inscrire les données contenu dans le deuxième.

Le code correspondant a la requête SQL se trouve dans le module 4 (Actuellement non fonctionnel)

Le code se trouvant autre part que dans le module 4 sont des tests divers.

SI quelqu'un sait pourquoi mon code ne fonctionne pas se serais super cool de me guider.

N'oublier pas de corriger le chemin d’accès du fichier dans le code.

Merci d'avance.


Meilleures salutations
 

Pièces jointes

  • Fichier base de données.xlsx
    9.7 KB · Affichages: 78
  • Fichier demande.xlsm
    28.5 KB · Affichages: 68
  • Fichier demande.xlsm
    28.5 KB · Affichages: 82
  • Fichier demande.xlsm
    28.5 KB · Affichages: 75

Dranreb

XLDnaute Barbatruc
Re : Problème syntaxe VBA requête SQL

Pas trouvé de Module4 dans ce que vous avez joint. Et je ne trouve pas la référence correpondant à la bibliothèque ADODB, qui n'est apparemment pas implantée.
Mais encore une fois, qu'est-ce que la méthode Select d'un objet Connexion de cette bibliothèque attend comme paramètre, en type et contenu ?
À +
 
Dernière édition:

Vorens

XLDnaute Occasionnel
Re : Problème syntaxe VBA requête SQL

Re,


Effectivement, je me suis tromper de fichier, la pièce jointe a pris pour source un back up

Voici le bon fichier

Pour utiliser cette connexion il faut cocher le paramètre Microsoft Activix data object dans le menu Outil => référence dans VBA
 

Pièces jointes

  • Fichier demande.xlsm
    33.6 KB · Affichages: 83
  • Fichier demande.xlsm
    33.6 KB · Affichages: 86
  • Fichier demande.xlsm
    33.6 KB · Affichages: 86
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Problème syntaxe VBA requête SQL

En tout cas
.CommandText = "SELECT * FROM [" & Feuille & Arret & "]"
ne peut pas être juste. Comment voudriez vous qu'il distingue la fin du nom de la feuille dernière laquelle commence l'adresse de plage dans celle ci ?
S'il reconnait les adresses Excel ce serait:
VB:
.CommandText = "SELECT * FROM [" & Feuille & "!" & Arret & "]"
Sinon, s'il reconnait un dollar, peut être mettre Arret = "$A1:A10". Mais "DB1A1:A10", comme ce qui résulte de votre concaténation, pourrait tout aussi bien signifier DB1A!1:A10 qui prendrait 10 lignes entières d'une feuille nommée DB1A
 
Dernière édition:

Jam

XLDnaute Accro
Re : Problème syntaxe VBA requête SQL

Heu,

Ma proposition vous tente pas. Y'a le signe $ qui est obligatoire entre nom de la feuille et référence de la plage, et les guillemets étaient avant les crochet ce qui était incorrect.
Pour des renseignements précis, je vous invite à jeter un oeil à cette page fort complète et instructive: Lire et crire dans les classeurs Excel ferms

Cdlt,

heu nan, rien en fait. :p
 
Dernière édition:

Jam

XLDnaute Accro
Re : Problème syntaxe VBA requête SQL

En tout cas
.CommandText = "SELECT * FROM [" & Feuille & Arret & "]"


ne peut pas être juste.

Désolé de te contredire, mais c'est bien la bonne syntaxe à utiliser. Il ne faut pas utiliser de ! mais un $ entre le nom de la feuille et la plage.

Par contre je m'interroge sur le nom DB1 qui ressemble à une référence de cellule et qui est peut-être la cause d'une erreur.

Par contre dans le cadre du code cité au début j'écrirai plutôt:

Code:
Set rs=Cn.Execute "SELECT * FROM [DB1$A1:A10]"

Cdlt,
 

Dranreb

XLDnaute Barbatruc
Re : Problème syntaxe VBA requête SQL

Ça ne me contredit pas: je ne parlais pas de la syntaxe. Ça ne pouvais pas être bon compte tenu des valeurs de Feuille et Arret.
Ta première instruction corrigée: D'accord, là c'est correct.
 

Vorens

XLDnaute Occasionnel
Re : Problème syntaxe VBA requête SQL

Hello,


Merci de vos réponses une fois encore. Je suis désolé du temps de réponse mais une urgence professionnelle m'a éloigné temporairement de mon fichier Excel.


Je n'ai pas encore eu le temps de tester vos solution pour la raison évoquée ci-dessus mais je vous tiens au courant dès que j'aurais testé.

Merci encore et meilleures salutations

Vorens
 

Vorens

XLDnaute Occasionnel
Re : Problème syntaxe VBA requête SQL

Re bonjour,


Alors j'ai pus tester un peux plus amplement ta solution Jam et cela fonction. A un détail près cependant il a fallut que j'écrive la ligne comme ceci pour qu'elle soit acceptée.

Code:
Set rs = Cn.Execute("SELECT * FROM [DB1$A1:A10]")


Il manquais les () mais c'est un détail vite réglé.

Merci très beaucoup pour votre aide et au plaisir de vous recroiser sur le forum.

Meilleures salutation

Vorens
 

Vorens

XLDnaute Occasionnel
Re : Problème syntaxe VBA requête SQL

Re,


Une dernière question car sa aurait été trop facile...

Si on veux passer l'adresse du range dans la requête en paramètre avec des variables comment faut-il l'écrire ?

J'ai tenter la vieille méthode mais c'est pas correct

Code:
Set rs = Cn.Execute("SELECT * FROM [DB1$TargerCol & debut & TargerCol & fin]")

Merci de votre aide


Meilleures salutations

Vorens
 

Vorens

XLDnaute Occasionnel
Re : Problème syntaxe VBA requête SQL

Re,


J'ai trouvé ! Il suffit de l'écrire comme cela

Code:
Set Rst = Cn.Execute("[" & Feuille & Cellule & "]")

Range("A2").CopyFromRecordset Rst

Avec le range dans la variable Cellule


Meilleures salutations

Vorens
 

Discussions similaires

Statistiques des forums

Discussions
312 069
Messages
2 085 037
Membres
102 762
dernier inscrit
Ucef