Requête qui fonctionne sous Office 2000 et pas Office 2007 ! [Résolu]

Signaler
Messages postés
7
Date d'inscription
mardi 4 mai 2010
Statut
Membre
Dernière intervention
11 mai 2010
-
Messages postés
7
Date d'inscription
mardi 4 mai 2010
Statut
Membre
Dernière intervention
11 mai 2010
-
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

Messages postés
7
Date d'inscription
mardi 4 mai 2010
Statut
Membre
Dernière intervention
11 mai 2010

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
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

salut peux tu noter le chemin utilisé pour accèder à la table "Table.csv"
Messages postés
7
Date d'inscription
mardi 4 mai 2010
Statut
Membre
Dernière intervention
11 mai 2010

Bonjour Houtas,
bien sur, le chemin utilisé est le suivant:
Public Const PathCSV As String = "\\Smb2\homes\Trainer"
Christophe
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
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
Messages postés
7
Date d'inscription
mardi 4 mai 2010
Statut
Membre
Dernière intervention
11 mai 2010

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
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

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
Messages postés
7
Date d'inscription
mardi 4 mai 2010
Statut
Membre
Dernière intervention
11 mai 2010

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
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

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
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

Modifier dans la déclaration de variable Dim Fichier As String
par Dim Dossier As String
Messages postés
7
Date d'inscription
mardi 4 mai 2010
Statut
Membre
Dernière intervention
11 mai 2010

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
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

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
Messages postés
7
Date d'inscription
mardi 4 mai 2010
Statut
Membre
Dernière intervention
11 mai 2010

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
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

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