BOGUE : Le pilote Microsoft.Jet.OLEDB ignore les paramètres FirstRowHasNames et Header
9 réponses
isabelle
bonjour à tous,
voici le problème:
sur un fichier (fermé) http://cjoint.com/?DErjlx8nmev
il y a 2 plages de cellules nommées
la première est située en cellule A1:D6 - A1:D1 ont les titres de colonnes
la deuxième est située en cellule H5:J8 - H5:J5 ont les titres de colonnes
à l'aide de la macro suivante je récupère les données des 2 plages nommées
le problème se produit sur la plage1, les titres ne sont pas récupérés, seule
les titres de la plage2 sont récupérées.
2ème constatation si un champ de colonne est vide sur la plage1 (sans valeur) le
titre est récupéré
Sub copy_cells_of_named_range_from_closed_workbook()
'Need to activate the reference Microsoft ADO ext x.x for DLL and Security
'Need to activate the reference Microsoft ActiveX Data Objects x.x Library
Dim cn As ADODB.Connection
Dim oCat As ADOX.Catalog
Dim oFile As String, Resultat As String
Dim oSheet As ADOX.Table
Dim named_range()
Dim i As Integer, n As Integer, rw As Long
oFile = "C:\MyFile.xlsm" 'adapt path
Set cn = New ADODB.Connection
Set oCat = New ADOX.Catalog
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& oFile & ";Extended Properties=""Excel 12.0;HDR=NO;"""
.Open
End With
Set oCat.ActiveConnection = cn
For Each oSheet In oCat.Tables
If Not Right(oSheet.Name, 1) = "$" Then
ReDim Preserve named_range(n)
named_range(n) = oSheet.Name
n = n + 1
End If
Next
For i = LBound(named_range) To UBound(named_range)
rw = Cells(65000, 1).End(xlUp).Row + 1
Set rs = cn.Execute("SELECT * FROM " & named_range(i))
Cells(rw + 1, 1) = named_range(i) ' modify destination cell
Cells(rw + 2, 1).CopyFromRecordset rs ' modify destination cell
Next
Set oSheet = Nothing
Set oCat = Nothing
cn.Close
Set cn = Nothing
End Sub
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
DanielCo
Bonjour, La première ligne d'un tableau est considérée comme des entêtes. Ce n'est apparemment pas le cas si le tableau ne commence pas en ligne 1. Pour ne pas récupérer les entêtes, spécifie HDR=YES :
sur un fichier (fermé) http://cjoint.com/?DErjlx8nmev il y a 2 plages de cellules nommées la première est située en cellule A1:D6 - A1:D1 ont les titres de colonnes la deuxième est située en cellule H5:J8 - H5:J5 ont les titres de colonnes
à l'aide de la macro suivante je récupère les données des 2 plages nommées le problème se produit sur la plage1, les titres ne sont pas récupérés, seule les titres de la plage2 sont récupérées. 2ème constatation si un champ de colonne est vide sur la plage1 (sans valeur) le titre est récupéré
Sub copy_cells_of_named_range_from_closed_workbook() 'Need to activate the reference Microsoft ADO ext x.x for DLL and Security 'Need to activate the reference Microsoft ActiveX Data Objects x.x Library Dim cn As ADODB.Connection Dim oCat As ADOX.Catalog Dim oFile As String, Resultat As String Dim oSheet As ADOX.Table Dim named_range() Dim i As Integer, n As Integer, rw As Long
oFile = "C:MyFile.xlsm" 'adapt path
Set cn = New ADODB.Connection Set oCat = New ADOX.Catalog
With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & oFile & ";Extended Properties=""Excel 12.0;HDR=NO;""" .Open End With
Set oCat.ActiveConnection = cn
For Each oSheet In oCat.Tables If Not Right(oSheet.Name, 1) = "$" Then ReDim Preserve named_range(n) named_range(n) = oSheet.Name n = n + 1 End If Next
For i = LBound(named_range) To UBound(named_range) rw = Cells(65000, 1).End(xlUp).Row + 1 Set rs = cn.Execute("SELECT * FROM " & named_range(i)) Cells(rw + 1, 1) = named_range(i) ' modify destination cell Cells(rw + 2, 1).CopyFromRecordset rs ' modify destination cell Next
Set oSheet = Nothing Set oCat = Nothing cn.Close Set cn = Nothing End Sub
Bonjour,
La première ligne d'un tableau est considérée comme des entêtes. Ce
n'est apparemment pas le cas si le tableau ne commence pas en ligne 1.
Pour ne pas récupérer les entêtes, spécifie HDR=YES :
sur un fichier (fermé) http://cjoint.com/?DErjlx8nmev
il y a 2 plages de cellules nommées
la première est située en cellule A1:D6 - A1:D1 ont les titres de colonnes
la deuxième est située en cellule H5:J8 - H5:J5 ont les titres de colonnes
à l'aide de la macro suivante je récupère les données des 2 plages nommées
le problème se produit sur la plage1, les titres ne sont pas récupérés, seule
les titres de la plage2 sont récupérées.
2ème constatation si un champ de colonne est vide sur la plage1 (sans valeur)
le titre est récupéré
Sub copy_cells_of_named_range_from_closed_workbook()
'Need to activate the reference Microsoft ADO ext x.x for DLL and
Security
'Need to activate the reference Microsoft ActiveX Data Objects x.x
Library
Dim cn As ADODB.Connection
Dim oCat As ADOX.Catalog
Dim oFile As String, Resultat As String
Dim oSheet As ADOX.Table
Dim named_range()
Dim i As Integer, n As Integer, rw As Long
oFile = "C:MyFile.xlsm" 'adapt path
Set cn = New ADODB.Connection
Set oCat = New ADOX.Catalog
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
_
& oFile & ";Extended Properties=""Excel 12.0;HDR=NO;"""
.Open
End With
Set oCat.ActiveConnection = cn
For Each oSheet In oCat.Tables
If Not Right(oSheet.Name, 1) = "$" Then
ReDim Preserve named_range(n)
named_range(n) = oSheet.Name
n = n + 1
End If
Next
For i = LBound(named_range) To UBound(named_range)
rw = Cells(65000, 1).End(xlUp).Row + 1
Set rs = cn.Execute("SELECT * FROM " & named_range(i))
Cells(rw + 1, 1) = named_range(i) ' modify destination cell
Cells(rw + 2, 1).CopyFromRecordset rs ' modify destination cell
Next
Set oSheet = Nothing
Set oCat = Nothing
cn.Close
Set cn = Nothing
End Sub
Bonjour, La première ligne d'un tableau est considérée comme des entêtes. Ce n'est apparemment pas le cas si le tableau ne commence pas en ligne 1. Pour ne pas récupérer les entêtes, spécifie HDR=YES :
sur un fichier (fermé) http://cjoint.com/?DErjlx8nmev il y a 2 plages de cellules nommées la première est située en cellule A1:D6 - A1:D1 ont les titres de colonnes la deuxième est située en cellule H5:J8 - H5:J5 ont les titres de colonnes
à l'aide de la macro suivante je récupère les données des 2 plages nommées le problème se produit sur la plage1, les titres ne sont pas récupérés, seule les titres de la plage2 sont récupérées. 2ème constatation si un champ de colonne est vide sur la plage1 (sans valeur) le titre est récupéré
Sub copy_cells_of_named_range_from_closed_workbook() 'Need to activate the reference Microsoft ADO ext x.x for DLL and Security 'Need to activate the reference Microsoft ActiveX Data Objects x.x Library Dim cn As ADODB.Connection Dim oCat As ADOX.Catalog Dim oFile As String, Resultat As String Dim oSheet As ADOX.Table Dim named_range() Dim i As Integer, n As Integer, rw As Long
oFile = "C:MyFile.xlsm" 'adapt path
Set cn = New ADODB.Connection Set oCat = New ADOX.Catalog
With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & oFile & ";Extended Properties=""Excel 12.0;HDR=NO;""" .Open End With
Set oCat.ActiveConnection = cn
For Each oSheet In oCat.Tables If Not Right(oSheet.Name, 1) = "$" Then ReDim Preserve named_range(n) named_range(n) = oSheet.Name n = n + 1 End If Next
For i = LBound(named_range) To UBound(named_range) rw = Cells(65000, 1).End(xlUp).Row + 1 Set rs = cn.Execute("SELECT * FROM " & named_range(i)) Cells(rw + 1, 1) = named_range(i) ' modify destination cell Cells(rw + 2, 1).CopyFromRecordset rs ' modify destination cell Next
Set oSheet = Nothing Set oCat = Nothing cn.Close Set cn = Nothing End Sub
Un fichier exemple + explication à l'intérieur : http://cjoint.com/?DErpxhVODo7
isabelle
bonjour Daniel,
merci pour ta réponse, mais bon but est surtout de montrer que le supposer "Résolution" mentionné à cette adresse : http://support.microsoft.com/kb/288343/fr ne fonctionne pas. ______________________________________________________________________________________________________________ Le HDR = paramètre est fonctionnel et disponible lorsque vous utilisez le fournisseur Microsoft Jet OLE DB et le pilote ISAM Excel. Par conséquent, la meilleure solution est d'utiliser le fournisseur Jet plutôt que le pilote ODBC Excel.
Microsoft a confirmé qu'il s'agit d'un bogue dans les produits Microsoft répertoriés au début de cet article. ______________________________________________________________________________________________________________
isabelle
Le 2014-05-17 05:41, DanielCo a écrit :
Bonjour, La première ligne d'un tableau est considérée comme des entêtes. Ce n'est apparemment pas le cas si le tableau ne commence pas en ligne 1. Pour ne pas récupérer les entêtes, spécifie HDR=YES :
sur un fichier (fermé) http://cjoint.com/?DErjlx8nmev il y a 2 plages de cellules nommées la première est située en cellule A1:D6 - A1:D1 ont les titres de colonnes la deuxième est située en cellule H5:J8 - H5:J5 ont les titres de colonnes
à l'aide de la macro suivante je récupère les données des 2 plages nommées le problème se produit sur la plage1, les titres ne sont pas récupérés, seule les titres de la plage2 sont récupérées. 2ème constatation si un champ de colonne est vide sur la plage1 (sans valeur) le titre est récupéré
Sub copy_cells_of_named_range_from_closed_workbook() 'Need to activate the reference Microsoft ADO ext x.x for DLL and Security 'Need to activate the reference Microsoft ActiveX Data Objects x.x Library Dim cn As ADODB.Connection Dim oCat As ADOX.Catalog Dim oFile As String, Resultat As String Dim oSheet As ADOX.Table Dim named_range() Dim i As Integer, n As Integer, rw As Long
oFile = "C:MyFile.xlsm" 'adapt path
Set cn = New ADODB.Connection Set oCat = New ADOX.Catalog
With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & oFile & ";Extended Properties=""Excel 12.0;HDR=NO;""" .Open End With
Set oCat.ActiveConnection = cn
For Each oSheet In oCat.Tables If Not Right(oSheet.Name, 1) = "$" Then ReDim Preserve named_range(n) named_range(n) = oSheet.Name n = n + 1 End If Next
For i = LBound(named_range) To UBound(named_range) rw = Cells(65000, 1).End(xlUp).Row + 1 Set rs = cn.Execute("SELECT * FROM " & named_range(i)) Cells(rw + 1, 1) = named_range(i) ' modify destination cell Cells(rw + 2, 1).CopyFromRecordset rs ' modify destination cell Next
Set oSheet = Nothing Set oCat = Nothing cn.Close Set cn = Nothing End Sub
merci pour ta réponse, mais bon but est surtout de montrer que le supposer
"Résolution" mentionné à cette adresse :
http://support.microsoft.com/kb/288343/fr ne fonctionne pas.
______________________________________________________________________________________________________________
Le HDR = paramètre est fonctionnel et disponible lorsque vous utilisez le
fournisseur Microsoft Jet OLE DB et le pilote ISAM Excel.
Par conséquent, la meilleure solution est d'utiliser le fournisseur Jet plutôt
que le pilote ODBC Excel.
Microsoft a confirmé qu'il s'agit d'un bogue dans les produits Microsoft
répertoriés au début de cet article.
______________________________________________________________________________________________________________
isabelle
Le 2014-05-17 05:41, DanielCo a écrit :
Bonjour,
La première ligne d'un tableau est considérée comme des entêtes. Ce n'est
apparemment pas le cas si le tableau ne commence pas en ligne 1. Pour ne pas
récupérer les entêtes, spécifie HDR=YES :
sur un fichier (fermé) http://cjoint.com/?DErjlx8nmev
il y a 2 plages de cellules nommées
la première est située en cellule A1:D6 - A1:D1 ont les titres de colonnes
la deuxième est située en cellule H5:J8 - H5:J5 ont les titres de colonnes
à l'aide de la macro suivante je récupère les données des 2 plages nommées
le problème se produit sur la plage1, les titres ne sont pas récupérés, seule
les titres de la plage2 sont récupérées.
2ème constatation si un champ de colonne est vide sur la plage1 (sans valeur)
le titre est récupéré
Sub copy_cells_of_named_range_from_closed_workbook()
'Need to activate the reference Microsoft ADO ext x.x for DLL and Security
'Need to activate the reference Microsoft ActiveX Data Objects x.x Library
Dim cn As ADODB.Connection
Dim oCat As ADOX.Catalog
Dim oFile As String, Resultat As String
Dim oSheet As ADOX.Table
Dim named_range()
Dim i As Integer, n As Integer, rw As Long
oFile = "C:MyFile.xlsm" 'adapt path
Set cn = New ADODB.Connection
Set oCat = New ADOX.Catalog
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& oFile & ";Extended Properties=""Excel 12.0;HDR=NO;"""
.Open
End With
Set oCat.ActiveConnection = cn
For Each oSheet In oCat.Tables
If Not Right(oSheet.Name, 1) = "$" Then
ReDim Preserve named_range(n)
named_range(n) = oSheet.Name
n = n + 1
End If
Next
For i = LBound(named_range) To UBound(named_range)
rw = Cells(65000, 1).End(xlUp).Row + 1
Set rs = cn.Execute("SELECT * FROM " & named_range(i))
Cells(rw + 1, 1) = named_range(i) ' modify destination cell
Cells(rw + 2, 1).CopyFromRecordset rs ' modify destination cell
Next
Set oSheet = Nothing
Set oCat = Nothing
cn.Close
Set cn = Nothing
End Sub
merci pour ta réponse, mais bon but est surtout de montrer que le supposer "Résolution" mentionné à cette adresse : http://support.microsoft.com/kb/288343/fr ne fonctionne pas. ______________________________________________________________________________________________________________ Le HDR = paramètre est fonctionnel et disponible lorsque vous utilisez le fournisseur Microsoft Jet OLE DB et le pilote ISAM Excel. Par conséquent, la meilleure solution est d'utiliser le fournisseur Jet plutôt que le pilote ODBC Excel.
Microsoft a confirmé qu'il s'agit d'un bogue dans les produits Microsoft répertoriés au début de cet article. ______________________________________________________________________________________________________________
isabelle
Le 2014-05-17 05:41, DanielCo a écrit :
Bonjour, La première ligne d'un tableau est considérée comme des entêtes. Ce n'est apparemment pas le cas si le tableau ne commence pas en ligne 1. Pour ne pas récupérer les entêtes, spécifie HDR=YES :
sur un fichier (fermé) http://cjoint.com/?DErjlx8nmev il y a 2 plages de cellules nommées la première est située en cellule A1:D6 - A1:D1 ont les titres de colonnes la deuxième est située en cellule H5:J8 - H5:J5 ont les titres de colonnes
à l'aide de la macro suivante je récupère les données des 2 plages nommées le problème se produit sur la plage1, les titres ne sont pas récupérés, seule les titres de la plage2 sont récupérées. 2ème constatation si un champ de colonne est vide sur la plage1 (sans valeur) le titre est récupéré
Sub copy_cells_of_named_range_from_closed_workbook() 'Need to activate the reference Microsoft ADO ext x.x for DLL and Security 'Need to activate the reference Microsoft ActiveX Data Objects x.x Library Dim cn As ADODB.Connection Dim oCat As ADOX.Catalog Dim oFile As String, Resultat As String Dim oSheet As ADOX.Table Dim named_range() Dim i As Integer, n As Integer, rw As Long
oFile = "C:MyFile.xlsm" 'adapt path
Set cn = New ADODB.Connection Set oCat = New ADOX.Catalog
With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & oFile & ";Extended Properties=""Excel 12.0;HDR=NO;""" .Open End With
Set oCat.ActiveConnection = cn
For Each oSheet In oCat.Tables If Not Right(oSheet.Name, 1) = "$" Then ReDim Preserve named_range(n) named_range(n) = oSheet.Name n = n + 1 End If Next
For i = LBound(named_range) To UBound(named_range) rw = Cells(65000, 1).End(xlUp).Row + 1 Set rs = cn.Execute("SELECT * FROM " & named_range(i)) Cells(rw + 1, 1) = named_range(i) ' modify destination cell Cells(rw + 2, 1).CopyFromRecordset rs ' modify destination cell Next
Set oSheet = Nothing Set oCat = Nothing cn.Close Set cn = Nothing End Sub
merci pour ta réponse, mais bon but est surtout de montrer que le supposer "Résolution" mentionné à cette adresse : http://support.microsoft.com/kb/288343/fr ne fonctionne pas. ______________________________________________________________________________________________________________ Le HDR = paramètre est fonctionnel et disponible lorsque vous utilisez le fournisseur Microsoft Jet OLE DB et le pilote ISAM Excel. Par conséquent, la meilleure solution est d'utiliser le fournisseur Jet plutôt que le pilote ODBC Excel.
Microsoft a confirmé qu'il s'agit d'un bogue dans les produits Microsoft répertoriés au début de cet article. ______________________________________________________________________________________________________________
isabelle
Le 2014-05-17 09:23, MichD a écrit :
Bonjour,
Un fichier exemple + explication à l'intérieur : http://cjoint.com/?DErpxhVODo7
bonjour Denis,
merci pour ta réponse, mais bon but est surtout de montrer que le supposer
"Résolution" mentionné à cette adresse :
http://support.microsoft.com/kb/288343/fr ne fonctionne pas.
______________________________________________________________________________________________________________
Le HDR = paramètre est fonctionnel et disponible lorsque vous utilisez le
fournisseur Microsoft Jet OLE DB et le pilote ISAM Excel.
Par conséquent, la meilleure solution est d'utiliser le fournisseur Jet plutôt
que le pilote ODBC Excel.
Microsoft a confirmé qu'il s'agit d'un bogue dans les produits Microsoft
répertoriés au début de cet article.
______________________________________________________________________________________________________________
isabelle
Le 2014-05-17 09:23, MichD a écrit :
Bonjour,
Un fichier exemple + explication à l'intérieur : http://cjoint.com/?DErpxhVODo7
merci pour ta réponse, mais bon but est surtout de montrer que le supposer "Résolution" mentionné à cette adresse : http://support.microsoft.com/kb/288343/fr ne fonctionne pas. ______________________________________________________________________________________________________________ Le HDR = paramètre est fonctionnel et disponible lorsque vous utilisez le fournisseur Microsoft Jet OLE DB et le pilote ISAM Excel. Par conséquent, la meilleure solution est d'utiliser le fournisseur Jet plutôt que le pilote ODBC Excel.
Microsoft a confirmé qu'il s'agit d'un bogue dans les produits Microsoft répertoriés au début de cet article. ______________________________________________________________________________________________________________
isabelle
Le 2014-05-17 09:23, MichD a écrit :
Bonjour,
Un fichier exemple + explication à l'intérieur : http://cjoint.com/?DErpxhVODo7
MichD
Bonjour Isabelle,
Je n'ai rien vu dans la question qui laissait sous-entendre que tu faisais référence à un pilote ODBC Excel. Je n'ai pas ouvert ton fichier s'il contenait l'information, je ne l'ai pas vu!
Bonjour Isabelle,
Je n'ai rien vu dans la question qui laissait sous-entendre que tu faisais
référence à un pilote ODBC Excel. Je n'ai pas ouvert ton fichier s'il
contenait
l'information, je ne l'ai pas vu!
Je n'ai rien vu dans la question qui laissait sous-entendre que tu faisais référence à un pilote ODBC Excel. Je n'ai pas ouvert ton fichier s'il contenait l'information, je ne l'ai pas vu!
Michel__D
Bonjour,
Le 20/05/2014 19:26, isabelle a écrit :
bonjour Denis,
merci pour ta réponse, mais bon but est surtout de montrer que le supposer "Résolution" mentionné à cette adresse : http://support.microsoft.com/kb/288343/fr ne fonctionne pas. Le HDR = paramètre est fonctionnel et disponible lorsque vous utilisez le fournisseur Microsoft Jet OLE DB et le pilote ISAM Excel. Par conséquent, la meilleure solution est d'utiliser le fournisseur Jet plutôt que le pilote ODBC Excel.
Microsoft a confirmé qu'il s'agit d'un bogue dans les produits Microsoft répertoriés au début de cet article.
isabelle
Hum, je crois plutôt que c'est la méthode .CopyFromRecordset qui en s'appuyant sur un objet Range (donc orienté excel) provoque ce dysfonctionnement.
En parcourant le recorset j'ai bien le résultat énoncé à savoir avec HDR=NO j'ai la 1ère ligne et avec HDR=YES je n'ai plus la 1ère ligne.
... Dim rs As ADODB.Recordset Dim oFld As ADODB.Field
For i = LBound(named_range) To UBound(named_range) ' rw = Cells(65000, 1).End(xlUp).Row + 1 Set rs = cn.Execute("SELECT * FROM " & named_range(i))
txt = "" rs.MoveFirst Do Until rs.Eof For Each oFld In rs.Fields txt = txt & oFld.Value & ";" Next rs.MoveNext Loop Debug.print txt
merci pour ta réponse, mais bon but est surtout de montrer que le supposer "Résolution"
mentionné à cette adresse : http://support.microsoft.com/kb/288343/fr ne fonctionne pas.
Le HDR = paramètre est fonctionnel et disponible lorsque vous utilisez le fournisseur Microsoft Jet OLE DB et le pilote ISAM Excel.
Par conséquent, la meilleure solution est d'utiliser le fournisseur Jet plutôt que le pilote ODBC Excel.
Microsoft a confirmé qu'il s'agit d'un bogue dans les produits Microsoft répertoriés au début de cet article.
isabelle
Hum, je crois plutôt que c'est la méthode .CopyFromRecordset qui en s'appuyant sur un objet Range (donc orienté excel)
provoque ce dysfonctionnement.
En parcourant le recorset j'ai bien le résultat énoncé à savoir avec HDR=NO j'ai la 1ère ligne et
avec HDR=YES je n'ai plus la 1ère ligne.
...
Dim rs As ADODB.Recordset
Dim oFld As ADODB.Field
For i = LBound(named_range) To UBound(named_range)
' rw = Cells(65000, 1).End(xlUp).Row + 1
Set rs = cn.Execute("SELECT * FROM " & named_range(i))
txt = ""
rs.MoveFirst
Do Until rs.Eof
For Each oFld In rs.Fields
txt = txt & oFld.Value & ";"
Next
rs.MoveNext
Loop
Debug.print txt
merci pour ta réponse, mais bon but est surtout de montrer que le supposer "Résolution" mentionné à cette adresse : http://support.microsoft.com/kb/288343/fr ne fonctionne pas. Le HDR = paramètre est fonctionnel et disponible lorsque vous utilisez le fournisseur Microsoft Jet OLE DB et le pilote ISAM Excel. Par conséquent, la meilleure solution est d'utiliser le fournisseur Jet plutôt que le pilote ODBC Excel.
Microsoft a confirmé qu'il s'agit d'un bogue dans les produits Microsoft répertoriés au début de cet article.
isabelle
Hum, je crois plutôt que c'est la méthode .CopyFromRecordset qui en s'appuyant sur un objet Range (donc orienté excel) provoque ce dysfonctionnement.
En parcourant le recorset j'ai bien le résultat énoncé à savoir avec HDR=NO j'ai la 1ère ligne et avec HDR=YES je n'ai plus la 1ère ligne.
... Dim rs As ADODB.Recordset Dim oFld As ADODB.Field
For i = LBound(named_range) To UBound(named_range) ' rw = Cells(65000, 1).End(xlUp).Row + 1 Set rs = cn.Execute("SELECT * FROM " & named_range(i))
txt = "" rs.MoveFirst Do Until rs.Eof For Each oFld In rs.Fields txt = txt & oFld.Value & ";" Next rs.MoveNext Loop Debug.print txt