Requête qui fonctionne sous Office 2000 et pas Office 2007 !

Résolu
Christoph31 Messages postés 7 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 11 mai 2010 - 4 mai 2010 à 10:19
Christoph31 Messages postés 7 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 11 mai 2010 - 11 mai 2010 à 08:20
Bonjour,
Quelqu'un pourrait-il m'expliquer pourquoi ce simple bout de code fonctionne très bien sous office 2000,
et pas sous office 2007 ?
Il s'agit d'une requete SQL réalisée par le bias d'ADO sous VBA Excel.

Recordset.Open _
"SELECT [Champ un], [Champ deux] " & _
"FROM Table.csv " & _
"ORDER BY [Champ un] ASC ", _
Connection

L' erreur renvoyée sous Office 2007 est:
"Erreur d'execution ?-2147217904 (80040e10)?
Aucune valeur donnée pour un ou plusieurs des paramètres requis."

Merci pour vos réponses par avance,

Christophe

13 réponses

Christoph31 Messages postés 7 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 11 mai 2010
11 mai 2010 à 08:20
Voici une alternative pour importer des fichiers excel au format XLSX sous Office 2007.
(J'ai transformé le CSV en XLSX)
Merci Houtas.

Sub GetXLSX()
'________________________________________________________
' Variable declaration
Dim Cnn As ADODB.Connection
Dim Rds As ADODB.Recordset
Dim XLSXfile As String, XLSheet As String, Texte_SQL As String
'________________________________________________________
' Open connection with database source
Set Cnn = New ADODB.Connection
XLSXfile = ActiveWorkbook.Path & "\Source.xlsx"
Cnn.Provider = "Microsoft.ACE.OLEDB.12.0;"
Cnn.Open "Data Source=" & XLSXfile & ";Extended Properties=""Excel 12.0;HDR=YES;"""
'________________________________________________________
' Get data from recordset
Set Rds = New ADODB.Recordset
XLSheetDB = "Extract"
Texte_SQL = "SELECT DISTINCT [ATA Code], [ATA Title] " & _
"FROM [" & XLSheet & "$] & _
"ORDER BY [ATA Code] ASC "

Rds.Open Texte_SQL, Cnn, adOpenStatic
Rds.MoveFirst
Table1.Cells(3, 1).CopyFromRecordset Rds

'________________________________________________________
' Close connection and recordset
Rds.Close
Cnn.Close
Set Cnn = Nothing
End Sub

Christophe
3
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
4 mai 2010 à 11:02
salut peux tu noter le chemin utilisé pour accèder à la table "Table.csv"
0
Christoph31 Messages postés 7 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 11 mai 2010
4 mai 2010 à 11:30
Bonjour Houtas,
bien sur, le chemin utilisé est le suivant:
Public Const PathCSV As String = "\\Smb2\homes\Trainer"
Christophe
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
4 mai 2010 à 11:34
Bonjour,

Evite de nommer tes variables avec des mots réservés (comme Recordset ou Connection). Cela peut des fois causer des problèmes.


Calade
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Christoph31 Messages postés 7 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 11 mai 2010
4 mai 2010 à 12:13
Bonjour Calade,

j'ai aussi essayé avec

Rds.Open _
"SELECT [Champ un], [Champ deux] " & _
"FROM Table.csv " & _
"ORDER BY [Champ un] ASC ", _
Cnn

mais sans succes.

Christophe
0
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
4 mai 2010 à 14:57
Salut essaye de faire tourner avec "SELECT * FROM Table.csv" et regarde si t'a toujours ce bug, si t'a toujours ce bug, alors met le reste du code en ligne pour voir quel driver t'utilise etc
0
Christoph31 Messages postés 7 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 11 mai 2010
4 mai 2010 à 15:48
Salut Houtas,

effectivement ca fonctionne avec SELECT *

Rds.Open _
"SELECT * " & _
"FROM Table.csv " ,
Cnn

Connection utilisée:
Cnn.Provider = "Microsoft.Jet.OLEDB.4.0;"
Cnn.Open "Data Source=" & PathCSV & ";" & "Extended Properties=""text;HDR=YES;FMT=Delimited"""

Christophe
0
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
4 mai 2010 à 17:02
Salut, sur le site de microsoft ils disent qu'il faut changer le provider:Provider=Microsoft.Jet.OLEDB.4.0 vers Provider=Microsoft.ACE.OLEDB.12.0, moi je te conseille de changer de driver et d'utiliser ce code, n'oublie pas d'accepter la réponse si ta requête tourne correctement après
Sub RequeteCSV()
    Dim cn As ADODB.Connection
    Dim Fichier As String
    Dim NomFichier As String, texte_SQL As String
    Dim Rst As ADODB.Recordset
    
    'indique uniquement le chemin du dossier
    Dossier = "C:\Mes documents"
    'Nom du fichier CSV
    NomFichier = "table.csv"
    Set cn = New ADODB.Connection
    '--- Connexion ---
    cn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
        "Dbq=" & Dossier & ";" & _
        "Extensions=asc,csv,tab,txt;"

    '-----------------
    texte_SQL = "SELECT * FROM " & NomFichier
    
    Set Rst = New ADODB.Recordset
    Set Rst = cn.Execute(texte_SQL)
    Range("A1").CopyFromRecordset Rst
    
    '--- Fermeture connexion ---
    cn.Close
    Set cn = Nothing

End Sub
0
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
4 mai 2010 à 17:53
Modifier dans la déclaration de variable Dim Fichier As String
par Dim Dossier As String
0
Christoph31 Messages postés 7 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 11 mai 2010
5 mai 2010 à 10:04
Salut Houtas,
merci pour cette alternative, cependant VBA m'indique un erreur de syntaxe au niveau de la clause FROM.
Voici mon code (basé sur ta nouvelle methode)

Sub TestRequeteCSV()
Dim Cnn As ADODB.Connection
Dim Dossier As String
Dim NomFichier As String, Texte_SQL As String
Dim Rds As ADODB.Recordset

Dossier = "C:\Mes documents\Test nvelle methode"
NomFichier = "Table.csv"

Set Cnn = New ADODB.Connection
Cnn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"Dbq=" & Dossier & ";" & _
"Extensions=asc,csv,tab,txt;"

Texte_SQL = "SELECT * FROM " & NomFichier

Set Rds = New ADODB.Recordset
Set Rds = Cnn.Execute(Texte_SQL)

Qu'en penses-tu?
A+
Christophe
0
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
5 mai 2010 à 10:36
Bonjour,
Pourtant chez moi ca marche parfaitement, peux tu essayer le code sur un autre fichier CSV, peut être que le pb est lié au fichier csv
0
Christoph31 Messages postés 7 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 11 mai 2010
5 mai 2010 à 13:56
Salut Houtas,
l'erreur de syntaxe venait du fait que "NomFichier" doit aussi contenir le chemin qui y mène.

Modif apportée:

Dossier = "C:\Mes documents"
NomFichier = Dossier & "table.csv"
texte_SQL = "SELECT * FROM " & NomFichier

Bilan: les 2 methodes proposées (l'une par moi, l'autre par toi) fonctionnent très bien sous Office 2000, mais aucune d'entre elles ne fonctionne sous Office 2007,
on revient donc au probleme initial.

Christophe
0
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
5 mai 2010 à 15:36
je suis sous office 2007 et ca tourne parfaitement chez moi sans aucune modif avec ce code, j'utilise la référence
Microsoft ActiveX Data Objects 2.8 Library
Je fais des order by sur un champ sans soucis
Sub RequeteCSV()
    Dim cn As ADODB.Connection
    Dim Dossier As String
    Dim NomFichier As String, texte_SQL As String
    Dim Rst As ADODB.Recordset
    
    'indique uniquement le chemin du dossier
    Dossier = "C:\Documents and Settings\Mes documents"
    'Nom du fichier CSV
    NomFichier = "Market.csv"
    Set cn = New ADODB.Connection
    '--- Connexion ---
    cn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
        "Dbq=" & Dossier & ";" & _
        "Extensions=asc,csv,tab,txt;"

    '-----------------
    texte_SQL = "SELECT * FROM " & NomFichier
    
    Set Rst = New ADODB.Recordset
    Set Rst = cn.Execute(texte_SQL)
    Range("A1").CopyFromRecordset Rst
    
    '--- Fermeture connexion ---
    cn.Close
    Set cn = Nothing

End Sub


Si tu veux envoi moi ta boucle initiale et je vais la tester pour voir si elle plante chez moi
0
Rejoignez-nous