ADO - Limite de 65536 lignes ! ???

Le
michdenis
Bonjour à toutes et à tous,

A ) Êtes-vous toujours là ? le forum ?
Depuis 4 - 5 jours, le moins que je peux dire est que la communication a été
difficile.
Est-ce que quelqu'un pourrait dire à Garnote de s'enlever le pied sur le cable ?

B ) Petite observation si le message passe
Hier, j'ai utilisé ADO (activex data object 2.8 librairy) pour effectuer une requête
sur une table d'excel 2007 contenant environ 70,000 lignes. Quelle fut ma surprise
de me rendre compte que je n'était pas capable (ado) d'aller au delà de 65536 lignes
limite d'excel 2003!
La question : Est-ce que quelqu'un sait si c'est une limite réelle d'ADO dans Excel ou
s'il y a une manipulation qui nous permet d'aller au-delà de cette limite ?

Merci de votre participation.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #18792721
bonjour Denis,

ma réponse est seulement pour que tu voie ton message, je n'ai pas
xl2007 désole,

isabelle

michdenis a écrit :
Bonjour à toutes et à tous,

A ) Êtes-vous toujours là ? le forum ?
Depuis 4 - 5 jours, le moins que je peux dire est que la communication a été
difficile.
Est-ce que quelqu'un pourrait dire à Garnote de s'enlever le pied sur le cable ?

B ) Petite observation si le message passe...
Hier, j'ai utilisé ADO (activex data object 2.8 librairy) pour effectuer une requête
sur une table d'excel 2007 contenant environ 70,000 lignes. Quelle fut ma surprise
de me rendre compte que je n'était pas capable (ado) d'aller au delà de 65536 lignes
limite d'excel 2003...!
La question : Est-ce que quelqu'un sait si c'est une limite réelle d'ADO dans Excel ou
s'il y a une manipulation qui nous permet d'aller au-delà de cette limite ?

Merci de votre participation.




MichDenis
Le #18793201
Et bien, Merci Isabelle.
Je posais la question pour savoir si d'autres avaient éprouvé cette difficulté.
J'ai trouvé cela surprenant car ADO à l'extérieur de l'environnement d'excel
est plutôt limité par la capacité du système... le plus surprenant c'est que la
requête bloque dès que je lui demande d'aller au delà de 65536 lignes...
ce qui est la limite d'excel 2003... Lorsque le temps s'y prêtera, je ferai
quelques tests supplémentaires et utilisant en outre le pilote ODBC plutôt
que la version "Microsoft.Jet.OLEDB.4.0"

N.B. ça fait plus que 2 jours que le message fut envoyé...nous serons bientôt
obligé d'envoyer nos messages par bateau !!! ;-))

Bonne journée.



"isabelle" a écrit dans le message de groupe de discussion :

bonjour Denis,

ma réponse est seulement pour que tu voie ton message, je n'ai pas
xl2007 désole,

isabelle

michdenis a écrit :
Bonjour à toutes et à tous,

A ) Êtes-vous toujours là ? le forum ?
Depuis 4 - 5 jours, le moins que je peux dire est que la communication a été
difficile.
Est-ce que quelqu'un pourrait dire à Garnote de s'enlever le pied sur le cable ?

B ) Petite observation si le message passe...
Hier, j'ai utilisé ADO (activex data object 2.8 librairy) pour effectuer une requête
sur une table d'excel 2007 contenant environ 70,000 lignes. Quelle fut ma surprise
de me rendre compte que je n'était pas capable (ado) d'aller au delà de 65536 lignes
limite d'excel 2003...!
La question : Est-ce que quelqu'un sait si c'est une limite réelle d'ADO dans Excel
ou
s'il y a une manipulation qui nous permet d'aller au-delà de cette limite ?

Merci de votre participation.




Philippe.R
Le #18794451
Bonjour,
Une série de messages datés, comme le tiens du 27/02 arrivent au compte
goutes ; vas t'en savoir pourquoi ?...
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"MichDenis" news:%
Et bien, Merci Isabelle.
Je posais la question pour savoir si d'autres avaient éprouvé cette
difficulté.
J'ai trouvé cela surprenant car ADO à l'extérieur de l'environnement
d'excel
est plutôt limité par la capacité du système... le plus surprenant c'est
que la
requête bloque dès que je lui demande d'aller au delà de 65536 lignes...
ce qui est la limite d'excel 2003... Lorsque le temps s'y prêtera, je
ferai
quelques tests supplémentaires et utilisant en outre le pilote ODBC plutôt
que la version "Microsoft.Jet.OLEDB.4.0"

N.B. ça fait plus que 2 jours que le message fut envoyé...nous serons
bientôt
obligé d'envoyer nos messages par bateau !!! ;-))

Bonne journée.



"isabelle" a écrit dans le message de groupe de discussion :

bonjour Denis,

ma réponse est seulement pour que tu voie ton message, je n'ai pas
xl2007 désole,

isabelle

michdenis a écrit :
Bonjour à toutes et à tous,

A ) Êtes-vous toujours là ? le forum ?
Depuis 4 - 5 jours, le moins que je peux dire est que la
communication a été
difficile.
Est-ce que quelqu'un pourrait dire à Garnote de s'enlever le pied sur
le cable ?

B ) Petite observation si le message passe...
Hier, j'ai utilisé ADO (activex data object 2.8 librairy) pour
effectuer une requête
sur une table d'excel 2007 contenant environ 70,000 lignes. Quelle
fut ma surprise
de me rendre compte que je n'était pas capable (ado) d'aller au delà
de 65536 lignes
limite d'excel 2003...!
La question : Est-ce que quelqu'un sait si c'est une limite réelle
d'ADO dans Excel
ou
s'il y a une manipulation qui nous permet d'aller au-delà de cette
limite ?

Merci de votre participation.






Daniel.C
Le #18796231
Bonjour.

Je suis tombé sur ce code :
(http://silkyroad.ftp-developpez.com/VBA/ClasseursFermes/ClasseursFermes.pdf)

Sub RequeteClasseurFerme_Excel2007()
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 = "e:donneesdanielmpfevolume.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "Volume"
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
'Requête
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)
'Ecrit le résultat de la requête dans la cellule A2
Range("A2").CopyFromRecordset Rst
'--- Fermeture connexion ---
.Close
End With

Set Cn = Nothing
End Sub

Ca a l'air de faire l'affaire.
Daniel

Et bien, Merci Isabelle.
Je posais la question pour savoir si d'autres avaient éprouvé cette
difficulté. J'ai trouvé cela surprenant car ADO à l'extérieur de
l'environnement d'excel est plutôt limité par la capacité du système... le
plus surprenant c'est que la requête bloque dès que je lui demande d'aller au
delà de 65536 lignes... ce qui est la limite d'excel 2003... Lorsque le temps
s'y prêtera, je ferai quelques tests supplémentaires et utilisant en outre le
pilote ODBC plutôt que la version "Microsoft.Jet.OLEDB.4.0"

N.B. ça fait plus que 2 jours que le message fut envoyé...nous serons bientôt
obligé d'envoyer nos messages par bateau !!! ;-))

Bonne journée.



"isabelle" a écrit dans le message de groupe de discussion :

bonjour Denis,

ma réponse est seulement pour que tu voie ton message, je n'ai pas
xl2007 désole,

isabelle

michdenis a écrit :
Bonjour à toutes et à tous,

A ) Êtes-vous toujours là ? le forum ?
Depuis 4 - 5 jours, le moins que je peux dire est que la communication a
été difficile.
Est-ce que quelqu'un pourrait dire à Garnote de s'enlever le pied sur le
cable ?

B ) Petite observation si le message passe...
Hier, j'ai utilisé ADO (activex data object 2.8 librairy) pour effectuer
une requête sur une table d'excel 2007 contenant environ 70,000 lignes.
Quelle fut ma surprise de me rendre compte que je n'était pas capable
(ado) d'aller au delà de 65536 lignes limite d'excel 2003...!
La question : Est-ce que quelqu'un sait si c'est une limite réelle d'ADO
dans Excel ou
s'il y a une manipulation qui nous permet d'aller au-delà de cette
limite ?

Merci de votre participation.






MichDenis
Le #18798571
J'ai vu l'adresse accompagnant ton message mais je n'ai pas
eu le temps d'en prendre connaissance ! Voici les tests que j'ai fait :

avec : "Microsoft Activex Data 2.8 objects librairy"

J'ai une erreur d'exécution.

Mon code donne ceci comme message si plus de 65536 lignes
Erreur d'exécution : "-2147217865 (80040e37)

Ton code en plus d'avoir le message de mon code ajoute
ceci au message d'erreur :

message : Le moteur de données Microsoft Office Access n'a pas pu
trouver l'objet "Données$B1:B65537". Assurez-vous que l'objet
existe et que vous avez correctement saisi son nom et son chemin
d'accès.

Si j'utilise le pilote ODBC :
le code donne quelque chose comme :

'------------------------------------------
texte_SQL = "SELECT Market FROM MaListe "
Cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & ThisWorkbook.FullName
Rst.Open texte_SQL, Cnn, adOpenStatic, adLockOptimistic
'------------------------------------------

J'ai ceci comme message si je vais au delà de 65536 lignes :

'-----------------------------
Erreur d'exécution : "-2147217887 (80040e21)

Ce pilote ne prend pas en charge les propriétés demandées.
'-----------------------------

J'arrive au même résultat avec les 3 méthodes.

Comme c'étais dans un fichier 2003 que j'avais converti version 2007 peut être n'avait-il
pas aimé la conversion. J'ai copié les données dans un fichier tout neuf
enregistré`directement au format xlsm et j'ai obtenu le même résultat.

Souffrerait-il d'un blocage psychologique ... ? ;-))

Merci pour ta collaboration.



"Daniel.C"
Bonjour.

Je suis tombé sur ce code :
(http://silkyroad.ftp-developpez.com/VBA/ClasseursFermes/ClasseursFermes.pdf)

Sub RequeteClasseurFerme_Excel2007()
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 = "e:donneesdanielmpfevolume.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "Volume"
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
'Requête
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)
'Ecrit le résultat de la requête dans la cellule A2
Range("A2").CopyFromRecordset Rst
'--- Fermeture connexion ---
.Close
End With

Set Cn = Nothing
End Sub

Ca a l'air de faire l'affaire.
Daniel

Et bien, Merci Isabelle.
Je posais la question pour savoir si d'autres avaient éprouvé cette
difficulté. J'ai trouvé cela surprenant car ADO à l'extérieur de
l'environnement d'excel est plutôt limité par la capacité du système... le
plus surprenant c'est que la requête bloque dès que je lui demande d'aller au
delà de 65536 lignes... ce qui est la limite d'excel 2003... Lorsque le temps
s'y prêtera, je ferai quelques tests supplémentaires et utilisant en outre le
pilote ODBC plutôt que la version "Microsoft.Jet.OLEDB.4.0"

N.B. ça fait plus que 2 jours que le message fut envoyé...nous serons bientôt
obligé d'envoyer nos messages par bateau !!! ;-))

Bonne journée.



"isabelle" a écrit dans le message de groupe de discussion :

bonjour Denis,

ma réponse est seulement pour que tu voie ton message, je n'ai pas
xl2007 désole,

isabelle

michdenis a écrit :
Bonjour à toutes et à tous,

A ) Êtes-vous toujours là ? le forum ?
Depuis 4 - 5 jours, le moins que je peux dire est que la communication a
été difficile.
Est-ce que quelqu'un pourrait dire à Garnote de s'enlever le pied sur le
cable ?

B ) Petite observation si le message passe...
Hier, j'ai utilisé ADO (activex data object 2.8 librairy) pour effectuer
une requête sur une table d'excel 2007 contenant environ 70,000 lignes.
Quelle fut ma surprise de me rendre compte que je n'était pas capable
(ado) d'aller au delà de 65536 lignes limite d'excel 2003...!
La question : Est-ce que quelqu'un sait si c'est une limite réelle d'ADO
dans Excel ou
s'il y a une manipulation qui nous permet d'aller au-delà de cette
limite ?

Merci de votre participation.






Daniel.C
Le #18798701
Avec le code tel que je l'ai posté, j'ai récupéré les 300000 lignes du
classeur fermé (volume.xlsx).
Daniel

J'ai vu l'adresse accompagnant ton message mais je n'ai pas
eu le temps d'en prendre connaissance ! Voici les tests que j'ai fait :

avec : "Microsoft Activex Data 2.8 objects librairy"

J'ai une erreur d'exécution.

Mon code donne ceci comme message si plus de 65536 lignes
Erreur d'exécution : "-2147217865 (80040e37)

Ton code en plus d'avoir le message de mon code ajoute
ceci au message d'erreur :

message : Le moteur de données Microsoft Office Access n'a pas pu
trouver l'objet "Données$B1:B65537". Assurez-vous que l'objet
existe et que vous avez correctement saisi son nom et son chemin
d'accès.

Si j'utilise le pilote ODBC :
le code donne quelque chose comme :

'------------------------------------------
texte_SQL = "SELECT Market FROM MaListe "
Cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" &
ThisWorkbook.FullName Rst.Open texte_SQL, Cnn, adOpenStatic, adLockOptimistic
'------------------------------------------

J'ai ceci comme message si je vais au delà de 65536 lignes :

'-----------------------------
Erreur d'exécution : "-2147217887 (80040e21)

Ce pilote ne prend pas en charge les propriétés demandées.
'-----------------------------

J'arrive au même résultat avec les 3 méthodes.

Comme c'étais dans un fichier 2003 que j'avais converti version 2007 peut
être n'avait-il pas aimé la conversion. J'ai copié les données dans un
fichier tout neuf enregistré`directement au format xlsm et j'ai obtenu le
même résultat.

Souffrerait-il d'un blocage psychologique ... ? ;-))

Merci pour ta collaboration.



"Daniel.C" discussion :
Bonjour.

Je suis tombé sur ce code :
(http://silkyroad.ftp-developpez.com/VBA/ClasseursFermes/ClasseursFermes.pdf)

Sub RequeteClasseurFerme_Excel2007()
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 = "e:donneesdanielmpfevolume.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "Volume"
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
'Requête
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)
'Ecrit le résultat de la requête dans la cellule A2
Range("A2").CopyFromRecordset Rst
'--- Fermeture connexion ---
.Close
End With

Set Cn = Nothing
End Sub

Ca a l'air de faire l'affaire.
Daniel

Et bien, Merci Isabelle.
Je posais la question pour savoir si d'autres avaient éprouvé cette
difficulté. J'ai trouvé cela surprenant car ADO à l'extérieur de
l'environnement d'excel est plutôt limité par la capacité du système... le
plus surprenant c'est que la requête bloque dès que je lui demande d'aller
au delà de 65536 lignes... ce qui est la limite d'excel 2003... Lorsque le
temps s'y prêtera, je ferai quelques tests supplémentaires et utilisant en
outre le pilote ODBC plutôt que la version "Microsoft.Jet.OLEDB.4.0"

N.B. ça fait plus que 2 jours que le message fut envoyé...nous serons
bientôt obligé d'envoyer nos messages par bateau !!! ;-))

Bonne journée.



"isabelle" a écrit dans le message de groupe de discussion :

bonjour Denis,

ma réponse est seulement pour que tu voie ton message, je n'ai pas
xl2007 désole,

isabelle

michdenis a écrit :
Bonjour à toutes et à tous,

A ) Êtes-vous toujours là ? le forum ?
Depuis 4 - 5 jours, le moins que je peux dire est que la communication
a été difficile.
Est-ce que quelqu'un pourrait dire à Garnote de s'enlever le pied sur
le cable ?

B ) Petite observation si le message passe...
Hier, j'ai utilisé ADO (activex data object 2.8 librairy) pour
effectuer une requête sur une table d'excel 2007 contenant environ
70,000 lignes. Quelle fut ma surprise de me rendre compte que je
n'était pas capable (ado) d'aller au delà de 65536 lignes limite
d'excel 2003...! La question : Est-ce que quelqu'un sait si c'est une
limite réelle d'ADO dans Excel ou
s'il y a une manipulation qui nous permet d'aller au-delà de cette
limite ?

Merci de votre participation.








MichDenis
Le #18801921
Un fichier exemple de la problématique
http://cjoint.com/?demPlh3C2T

Ton lien pointe sur un fichier PDF. où est ton fichier volume.xlsx



"Daniel.C"
Avec le code tel que je l'ai posté, j'ai récupéré les 300000 lignes du
classeur fermé (volume.xlsx).
Daniel

J'ai vu l'adresse accompagnant ton message mais je n'ai pas
eu le temps d'en prendre connaissance ! Voici les tests que j'ai fait :

avec : "Microsoft Activex Data 2.8 objects librairy"

J'ai une erreur d'exécution.

Mon code donne ceci comme message si plus de 65536 lignes
Erreur d'exécution : "-2147217865 (80040e37)

Ton code en plus d'avoir le message de mon code ajoute
ceci au message d'erreur :

message : Le moteur de données Microsoft Office Access n'a pas pu
trouver l'objet "Données$B1:B65537". Assurez-vous que l'objet
existe et que vous avez correctement saisi son nom et son chemin
d'accès.

Si j'utilise le pilote ODBC :
le code donne quelque chose comme :

'------------------------------------------
texte_SQL = "SELECT Market FROM MaListe "
Cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" &
ThisWorkbook.FullName Rst.Open texte_SQL, Cnn, adOpenStatic, adLockOptimistic
'------------------------------------------

J'ai ceci comme message si je vais au delà de 65536 lignes :

'-----------------------------
Erreur d'exécution : "-2147217887 (80040e21)

Ce pilote ne prend pas en charge les propriétés demandées.
'-----------------------------

J'arrive au même résultat avec les 3 méthodes.

Comme c'étais dans un fichier 2003 que j'avais converti version 2007 peut
être n'avait-il pas aimé la conversion. J'ai copié les données dans un
fichier tout neuf enregistré`directement au format xlsm et j'ai obtenu le
même résultat.

Souffrerait-il d'un blocage psychologique ... ? ;-))

Merci pour ta collaboration.



"Daniel.C" discussion :
Bonjour.

Je suis tombé sur ce code :
(http://silkyroad.ftp-developpez.com/VBA/ClasseursFermes/ClasseursFermes.pdf)

Sub RequeteClasseurFerme_Excel2007()
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 = "e:donneesdanielmpfevolume.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "Volume"
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
'Requête
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)
'Ecrit le résultat de la requête dans la cellule A2
Range("A2").CopyFromRecordset Rst
'--- Fermeture connexion ---
.Close
End With

Set Cn = Nothing
End Sub

Ca a l'air de faire l'affaire.
Daniel

Et bien, Merci Isabelle.
Je posais la question pour savoir si d'autres avaient éprouvé cette
difficulté. J'ai trouvé cela surprenant car ADO à l'extérieur de
l'environnement d'excel est plutôt limité par la capacité du système... le
plus surprenant c'est que la requête bloque dès que je lui demande d'aller
au delà de 65536 lignes... ce qui est la limite d'excel 2003... Lorsque le
temps s'y prêtera, je ferai quelques tests supplémentaires et utilisant en
outre le pilote ODBC plutôt que la version "Microsoft.Jet.OLEDB.4.0"

N.B. ça fait plus que 2 jours que le message fut envoyé...nous serons
bientôt obligé d'envoyer nos messages par bateau !!! ;-))

Bonne journée.



"isabelle" a écrit dans le message de groupe de discussion :

bonjour Denis,

ma réponse est seulement pour que tu voie ton message, je n'ai pas
xl2007 désole,

isabelle

michdenis a écrit :
Bonjour à toutes et à tous,

A ) Êtes-vous toujours là ? le forum ?
Depuis 4 - 5 jours, le moins que je peux dire est que la communication
a été difficile.
Est-ce que quelqu'un pourrait dire à Garnote de s'enlever le pied sur
le cable ?

B ) Petite observation si le message passe...
Hier, j'ai utilisé ADO (activex data object 2.8 librairy) pour
effectuer une requête sur une table d'excel 2007 contenant environ
70,000 lignes. Quelle fut ma surprise de me rendre compte que je
n'était pas capable (ado) d'aller au delà de 65536 lignes limite
d'excel 2003...! La question : Est-ce que quelqu'un sait si c'est une
limite réelle d'ADO dans Excel ou
s'il y a une manipulation qui nous permet d'aller au-delà de cette
limite ?

Merci de votre participation.








Daniel.C
Le #18802221
Avec le code suivant, l'importation se fait, par contre, le recordcount
est à -1 :

Sub Proposition_Daniel_98184_lignes()

Dim Rst As New ADODB.Recordset
Dim Cnn As New ADODB.Connection
Dim Fichier As String
Dim Requete As String
Dim NbRecord As Long

Fichier = ThisWorkbook.FullName

Requete = "SELECT * FROM MaListe "

With Cnn
.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
'Rst.Open Requete, Cnn, adOpenStatic, adLockOptimistic
'NbRecord = Rst.RecordCount
'MsgBox NbRecord & " lignes"
NomFeuille = "Feuil1"
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cnn.Execute(texte_SQL)
NbRecord = Rst.RecordCount
MsgBox NbRecord & " lignes"
Range("A2").CopyFromRecordset Rst
Rst.Close: Cnn.Close
Set Rst = Nothing: Set Cnn = Nothing
End Sub

Daniel

Un fichier exemple de la problématique
http://cjoint.com/?demPlh3C2T

Ton lien pointe sur un fichier PDF. où est ton fichier volume.xlsx



"Daniel.C" discussion :
Avec le code tel que je l'ai posté, j'ai récupéré les 300000 lignes du
classeur fermé (volume.xlsx).
Daniel

J'ai vu l'adresse accompagnant ton message mais je n'ai pas
eu le temps d'en prendre connaissance ! Voici les tests que j'ai fait :

avec : "Microsoft Activex Data 2.8 objects librairy"

J'ai une erreur d'exécution.

Mon code donne ceci comme message si plus de 65536 lignes
Erreur d'exécution : "-2147217865 (80040e37)

Ton code en plus d'avoir le message de mon code ajoute
ceci au message d'erreur :

message : Le moteur de données Microsoft Office Access n'a pas pu
trouver l'objet "Données$B1:B65537". Assurez-vous que l'objet
existe et que vous avez correctement saisi son nom et son chemin
d'accès.

Si j'utilise le pilote ODBC :
le code donne quelque chose comme :

'------------------------------------------
texte_SQL = "SELECT Market FROM MaListe "
Cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" &
ThisWorkbook.FullName Rst.Open texte_SQL, Cnn, adOpenStatic,
adLockOptimistic '------------------------------------------

J'ai ceci comme message si je vais au delà de 65536 lignes :

'-----------------------------
Erreur d'exécution : "-2147217887 (80040e21)

Ce pilote ne prend pas en charge les propriétés demandées.
'-----------------------------

J'arrive au même résultat avec les 3 méthodes.

Comme c'étais dans un fichier 2003 que j'avais converti version 2007 peut
être n'avait-il pas aimé la conversion. J'ai copié les données dans un
fichier tout neuf enregistré`directement au format xlsm et j'ai obtenu le
même résultat.

Souffrerait-il d'un blocage psychologique ... ? ;-))

Merci pour ta collaboration.



"Daniel.C" discussion :
Bonjour.

Je suis tombé sur ce code :
(http://silkyroad.ftp-developpez.com/VBA/ClasseursFermes/ClasseursFermes.pdf)

Sub RequeteClasseurFerme_Excel2007()
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 = "e:donneesdanielmpfevolume.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "Volume"
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
'Requête
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)
'Ecrit le résultat de la requête dans la cellule A2
Range("A2").CopyFromRecordset Rst
'--- Fermeture connexion ---
.Close
End With

Set Cn = Nothing
End Sub

Ca a l'air de faire l'affaire.
Daniel

Et bien, Merci Isabelle.
Je posais la question pour savoir si d'autres avaient éprouvé cette
difficulté. J'ai trouvé cela surprenant car ADO à l'extérieur de
l'environnement d'excel est plutôt limité par la capacité du système... le
plus surprenant c'est que la requête bloque dès que je lui demande d'aller
au delà de 65536 lignes... ce qui est la limite d'excel 2003... Lorsque le
temps s'y prêtera, je ferai quelques tests supplémentaires et utilisant en
outre le pilote ODBC plutôt que la version "Microsoft.Jet.OLEDB.4.0"

N.B. ça fait plus que 2 jours que le message fut envoyé...nous serons
bientôt obligé d'envoyer nos messages par bateau !!! ;-))

Bonne journée.



"isabelle" a écrit dans le message de groupe de discussion :

bonjour Denis,

ma réponse est seulement pour que tu voie ton message, je n'ai pas
xl2007 désole,

isabelle

michdenis a écrit :
Bonjour à toutes et à tous,

A ) Êtes-vous toujours là ? le forum ?
Depuis 4 - 5 jours, le moins que je peux dire est que la communication
a été difficile.
Est-ce que quelqu'un pourrait dire à Garnote de s'enlever le pied sur
le cable ?

B ) Petite observation si le message passe...
Hier, j'ai utilisé ADO (activex data object 2.8 librairy) pour
effectuer une requête sur une table d'excel 2007 contenant environ
70,000 lignes. Quelle fut ma surprise de me rendre compte que je
n'était pas capable (ado) d'aller au delà de 65536 lignes limite
d'excel 2003...! La question : Est-ce que quelqu'un sait si c'est une
limite réelle d'ADO dans Excel ou
s'il y a une manipulation qui nous permet d'aller au-delà de cette
limite ?

Merci de votre participation.










MichDenis
Le #18803621
Ok. L'usage de "Execute permet de récupérer l'ensemble des données
même si le nombre de cellules excède 65536.

Si Set Rst = Cnn.Execute(texte_SQL) fonctionne,

Je ne sais pas pourquoi ceci ne fonctionne pas si la plage
initiale est de plus de 65536 lignes ? Si quelqu'un connaît
la (les) raison... il peut se manifester !
Rst.Open Requete, Cnn, adOpenForwardOnly, adLockReadOnly

Par contre pour obtenir le nombre d'enregistrements, on se doit
d'utiliser un curseur "adOpenStatic" au lieu de adOpenForwardOnly
sinon en utilisant la dernière, le nombre d'enregistrements obtenus
à l'aide de NbRecord = Rst.RecordCount donne toujours -1. En utilisant
"Execute" on ne peut pas définir le curseur qu'il doit utiliser et à voir le
résultat, il emploie certainement "adOpenForwardOnly" par défaut. le
résultat -1 est dû à la manière dont le recordset est lu ... (si intéressé,
je peux publier un truc la dessus). On peut obtenir la même chose de façon
détourner en utilisant ceci NbRecord = UBound(Rst.GetRows(), 2)
évidemment un peu plus lent.

Merci pour ta participation.


"Daniel.C" #s3#
Avec le code suivant, l'importation se fait, par contre, le recordcount
est à -1 :

Sub Proposition_Daniel_98184_lignes()

Dim Rst As New ADODB.Recordset
Dim Cnn As New ADODB.Connection
Dim Fichier As String
Dim Requete As String
Dim NbRecord As Long

Fichier = ThisWorkbook.FullName

Requete = "SELECT * FROM MaListe "

With Cnn
.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
'Rst.Open Requete, Cnn, adOpenStatic, adLockOptimistic
'NbRecord = Rst.RecordCount
'MsgBox NbRecord & " lignes"
NomFeuille = "Feuil1"
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cnn.Execute(texte_SQL)
NbRecord = Rst.RecordCount
MsgBox NbRecord & " lignes"
Range("A2").CopyFromRecordset Rst
Rst.Close: Cnn.Close
Set Rst = Nothing: Set Cnn = Nothing
End Sub

Daniel

Un fichier exemple de la problématique
http://cjoint.com/?demPlh3C2T

Ton lien pointe sur un fichier PDF. où est ton fichier volume.xlsx



"Daniel.C" discussion :
Avec le code tel que je l'ai posté, j'ai récupéré les 300000 lignes du
classeur fermé (volume.xlsx).
Daniel

J'ai vu l'adresse accompagnant ton message mais je n'ai pas
eu le temps d'en prendre connaissance ! Voici les tests que j'ai fait :

avec : "Microsoft Activex Data 2.8 objects librairy"

J'ai une erreur d'exécution.

Mon code donne ceci comme message si plus de 65536 lignes
Erreur d'exécution : "-2147217865 (80040e37)

Ton code en plus d'avoir le message de mon code ajoute
ceci au message d'erreur :

message : Le moteur de données Microsoft Office Access n'a pas pu
trouver l'objet "Données$B1:B65537". Assurez-vous que l'objet
existe et que vous avez correctement saisi son nom et son chemin
d'accès.

Si j'utilise le pilote ODBC :
le code donne quelque chose comme :

'------------------------------------------
texte_SQL = "SELECT Market FROM MaListe "
Cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" &
ThisWorkbook.FullName Rst.Open texte_SQL, Cnn, adOpenStatic,
adLockOptimistic '------------------------------------------

J'ai ceci comme message si je vais au delà de 65536 lignes :

'-----------------------------
Erreur d'exécution : "-2147217887 (80040e21)

Ce pilote ne prend pas en charge les propriétés demandées.
'-----------------------------

J'arrive au même résultat avec les 3 méthodes.

Comme c'étais dans un fichier 2003 que j'avais converti version 2007 peut
être n'avait-il pas aimé la conversion. J'ai copié les données dans un
fichier tout neuf enregistré`directement au format xlsm et j'ai obtenu le
même résultat.

Souffrerait-il d'un blocage psychologique ... ? ;-))

Merci pour ta collaboration.



"Daniel.C" discussion :
Bonjour.

Je suis tombé sur ce code :
(http://silkyroad.ftp-developpez.com/VBA/ClasseursFermes/ClasseursFermes.pdf)

Sub RequeteClasseurFerme_Excel2007()
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 = "e:donneesdanielmpfevolume.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "Volume"
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
'Requête
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)
'Ecrit le résultat de la requête dans la cellule A2
Range("A2").CopyFromRecordset Rst
'--- Fermeture connexion ---
.Close
End With

Set Cn = Nothing
End Sub

Ca a l'air de faire l'affaire.
Daniel

Et bien, Merci Isabelle.
Je posais la question pour savoir si d'autres avaient éprouvé cette
difficulté. J'ai trouvé cela surprenant car ADO à l'extérieur de
l'environnement d'excel est plutôt limité par la capacité du système... le
plus surprenant c'est que la requête bloque dès que je lui demande d'aller
au delà de 65536 lignes... ce qui est la limite d'excel 2003... Lorsque le
temps s'y prêtera, je ferai quelques tests supplémentaires et utilisant en
outre le pilote ODBC plutôt que la version "Microsoft.Jet.OLEDB.4.0"

N.B. ça fait plus que 2 jours que le message fut envoyé...nous serons
bientôt obligé d'envoyer nos messages par bateau !!! ;-))

Bonne journée.



"isabelle" a écrit dans le message de groupe de discussion :

bonjour Denis,

ma réponse est seulement pour que tu voie ton message, je n'ai pas
xl2007 désole,

isabelle

michdenis a écrit :
Bonjour à toutes et à tous,

A ) Êtes-vous toujours là ? le forum ?
Depuis 4 - 5 jours, le moins que je peux dire est que la communication
a été difficile.
Est-ce que quelqu'un pourrait dire à Garnote de s'enlever le pied sur
le cable ?

B ) Petite observation si le message passe...
Hier, j'ai utilisé ADO (activex data object 2.8 librairy) pour
effectuer une requête sur une table d'excel 2007 contenant environ
70,000 lignes. Quelle fut ma surprise de me rendre compte que je
n'était pas capable (ado) d'aller au delà de 65536 lignes limite
d'excel 2003...! La question : Est-ce que quelqu'un sait si c'est une
limite réelle d'ADO dans Excel ou
s'il y a une manipulation qui nous permet d'aller au-delà de cette
limite ?

Merci de votre participation.










Daniel.C
Le #18804271
Oui, ça m'intéresse bougrement (j'ai commencé à mettre mon nez dans ADO
seulement hier).
Le code suivant donne le nombre d'enregistrements :

Sub Proposition_Daniel_98184_lignes()

Dim Rst As New ADODB.Recordset
Dim Cnn As New ADODB.Connection
Dim Fichier As String
Dim Requete As String
Dim NbRecord As Long

Fichier = ThisWorkbook.FullName

Requete = "SELECT * FROM MaListe "

With Cnn
.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
NomFeuille = "Feuil1"
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Rst.Open texte_SQL, Cnn, adOpenStatic

NbRecord = Rst.RecordCount
MsgBox NbRecord & " lignes"
Range("A2").CopyFromRecordset Rst
Rst.Close: Cnn.Close
Set Rst = Nothing: Set Cnn = Nothing
End Sub

Daniel

Ok. L'usage de "Execute permet de récupérer l'ensemble des données
même si le nombre de cellules excède 65536.

Si Set Rst = Cnn.Execute(texte_SQL) fonctionne,

Je ne sais pas pourquoi ceci ne fonctionne pas si la plage
initiale est de plus de 65536 lignes ? Si quelqu'un connaît
la (les) raison... il peut se manifester !
Rst.Open Requete, Cnn, adOpenForwardOnly, adLockReadOnly

Par contre pour obtenir le nombre d'enregistrements, on se doit
d'utiliser un curseur "adOpenStatic" au lieu de adOpenForwardOnly
sinon en utilisant la dernière, le nombre d'enregistrements obtenus
à l'aide de NbRecord = Rst.RecordCount donne toujours -1. En utilisant
"Execute" on ne peut pas définir le curseur qu'il doit utiliser et à voir le
résultat, il emploie certainement "adOpenForwardOnly" par défaut. le
résultat -1 est dû à la manière dont le recordset est lu ... (si intéressé,
je peux publier un truc la dessus). On peut obtenir la même chose de façon
détourner en utilisant ceci NbRecord = UBound(Rst.GetRows(), 2)
évidemment un peu plus lent.

Merci pour ta participation.


"Daniel.C" discussion : #s3#
Avec le code suivant, l'importation se fait, par contre, le recordcount
est à -1 :

Sub Proposition_Daniel_98184_lignes()

Dim Rst As New ADODB.Recordset
Dim Cnn As New ADODB.Connection
Dim Fichier As String
Dim Requete As String
Dim NbRecord As Long

Fichier = ThisWorkbook.FullName

Requete = "SELECT * FROM MaListe "

With Cnn
.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
'Rst.Open Requete, Cnn, adOpenStatic, adLockOptimistic
'NbRecord = Rst.RecordCount
'MsgBox NbRecord & " lignes"
NomFeuille = "Feuil1"
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cnn.Execute(texte_SQL)
NbRecord = Rst.RecordCount
MsgBox NbRecord & " lignes"
Range("A2").CopyFromRecordset Rst
Rst.Close: Cnn.Close
Set Rst = Nothing: Set Cnn = Nothing
End Sub

Daniel

Un fichier exemple de la problématique
http://cjoint.com/?demPlh3C2T

Ton lien pointe sur un fichier PDF. où est ton fichier volume.xlsx



"Daniel.C" discussion :
Avec le code tel que je l'ai posté, j'ai récupéré les 300000 lignes du
classeur fermé (volume.xlsx).
Daniel

J'ai vu l'adresse accompagnant ton message mais je n'ai pas
eu le temps d'en prendre connaissance ! Voici les tests que j'ai fait :

avec : "Microsoft Activex Data 2.8 objects librairy"

J'ai une erreur d'exécution.

Mon code donne ceci comme message si plus de 65536 lignes
Erreur d'exécution : "-2147217865 (80040e37)

Ton code en plus d'avoir le message de mon code ajoute
ceci au message d'erreur :

message : Le moteur de données Microsoft Office Access n'a pas pu
trouver l'objet "Données$B1:B65537". Assurez-vous que l'objet
existe et que vous avez correctement saisi son nom et son chemin
d'accès.

Si j'utilise le pilote ODBC :
le code donne quelque chose comme :

'------------------------------------------
texte_SQL = "SELECT Market FROM MaListe "
Cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" &
ThisWorkbook.FullName Rst.Open texte_SQL, Cnn, adOpenStatic,
adLockOptimistic '------------------------------------------

J'ai ceci comme message si je vais au delà de 65536 lignes :

'-----------------------------
Erreur d'exécution : "-2147217887 (80040e21)

Ce pilote ne prend pas en charge les propriétés demandées.
'-----------------------------

J'arrive au même résultat avec les 3 méthodes.

Comme c'étais dans un fichier 2003 que j'avais converti version 2007 peut
être n'avait-il pas aimé la conversion. J'ai copié les données dans un
fichier tout neuf enregistré`directement au format xlsm et j'ai obtenu le
même résultat.

Souffrerait-il d'un blocage psychologique ... ? ;-))

Merci pour ta collaboration.



"Daniel.C" discussion :
Bonjour.

Je suis tombé sur ce code :
(http://silkyroad.ftp-developpez.com/VBA/ClasseursFermes/ClasseursFermes.pdf)

Sub RequeteClasseurFerme_Excel2007()
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 = "e:donneesdanielmpfevolume.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "Volume"
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
'Requête
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)
'Ecrit le résultat de la requête dans la cellule A2
Range("A2").CopyFromRecordset Rst
'--- Fermeture connexion ---
.Close
End With

Set Cn = Nothing
End Sub

Ca a l'air de faire l'affaire.
Daniel

Et bien, Merci Isabelle.
Je posais la question pour savoir si d'autres avaient éprouvé cette
difficulté. J'ai trouvé cela surprenant car ADO à l'extérieur de
l'environnement d'excel est plutôt limité par la capacité du système... le
plus surprenant c'est que la requête bloque dès que je lui demande d'aller
au delà de 65536 lignes... ce qui est la limite d'excel 2003... Lorsque le
temps s'y prêtera, je ferai quelques tests supplémentaires et utilisant en
outre le pilote ODBC plutôt que la version "Microsoft.Jet.OLEDB.4.0"

N.B. ça fait plus que 2 jours que le message fut envoyé...nous serons
bientôt obligé d'envoyer nos messages par bateau !!! ;-))

Bonne journée.



"isabelle" a écrit dans le message de groupe de discussion :

bonjour Denis,

ma réponse est seulement pour que tu voie ton message, je n'ai pas
xl2007 désole,

isabelle

michdenis a écrit :
Bonjour à toutes et à tous,

A ) Êtes-vous toujours là ? le forum ?
Depuis 4 - 5 jours, le moins que je peux dire est que la
communication a été difficile.
Est-ce que quelqu'un pourrait dire à Garnote de s'enlever le pied sur
le cable ?

B ) Petite observation si le message passe...
Hier, j'ai utilisé ADO (activex data object 2.8 librairy) pour
effectuer une requête sur une table d'excel 2007 contenant environ
70,000 lignes. Quelle fut ma surprise de me rendre compte que je
n'était pas capable (ado) d'aller au delà de 65536 lignes limite
d'excel 2003...! La question : Est-ce que quelqu'un sait si c'est une
limite réelle d'ADO dans Excel ou
s'il y a une manipulation qui nous permet d'aller au-delà de cette
limite ?

Merci de votre participation.












Publicité
Poster une réponse
Anonyme