Nombre maximum d'enregistrements dépassé dans un RECORDSET

Nicoxxx

XLDnaute Nouveau
Bonjour,

Je cherche à analyser par une requête SQL une liste d'enregistrements contenus dans un onglet (données sources) et d'obtenir le résultat de cette analyse dans un autre onglet (données cibles). l'analyse se déroule correctement lorsque le nombre d'enregistrements à analyser se situe entre 1 et 60 000. Mais lorsque ce nombre est supérieur, une erreur d'execution apparait : '-2147217865 (80040e37)'.

Suivant les cas que j'ai à traiter, il peut arriver que ce nombre d'enregistrement à traiter soit de 500 000.

J'ai déjà essayé de définir, sans succès, des propriétés telles que :Rst.PageSize, Rst.MaxRecords, Rst.MaxRecords

Savez-vous s'il existe une limite par défaut au nombre d'enregistrements dans un RecordSet ?
Si oui, cette limite peut-elle être augmenter et comment ?
Si non, auriez-vous une idée pour exécuter une requête SQL sur des enregistrements contenus dans une feuille Excel en utilisant une autre méthode ou un autre type de code ?

Vous remerciant par avance de votre aide.

Cordialement


Voici le code que j'ai simplifié pour en faciliter la compréhension:


Sub creertableau()
Dim Cnn As Object, Rst As Object
Dim Requete As String, Nb As Long
Dim SourceSheet As String, SourceRange, Plage_source As String
Dim StConnect As String, SourceFile As String
Dim Derniere_ligne_données As Long

'
' identification de la plage des enregistrement à analyser qui se trouvent dans l'onglet "Données", qui se situent
' dans les colonne de C à N mais dont, a priori, je ne connait pas le nombre (à partir de la ligne 6)
'

Worksheets("Données").Select
Range("C6:N6").Select
Range(Selection, Selection.End(xlDown)).Select
Derniere_ligne_données = Selection.Rows.Count + 5

Plage_source = "C6:N" & Derniere_ligne_données


' Exécution d'un Recorset pour en extraire les enregistrements dont le champ "CLE" commence pas "AT"
' (NDLR : j'ai choisi cet exemple de requête simpliste uniquement pour exposer mon problème et non pour trouver des solutions alternatives du type filtres, TCD, etc...), dans mon besoin réel, la requête SQL est beaucoup plus complexe

SourceSheet = "Données$"
'adresse RELATIVE de la plage
SourceRange = Plage_source
'Chemin & nom du fichier
SourceFile = ThisWorkbook.Path & "\" & ActiveWorkbook.Name

StConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 12.0;HDR=Yes"";"

Requete = "SELECT * FROM [" & SourceSheet & SourceRange & "] WHERE CLE Like ""AT%"";"

Set Cnn = CreateObject("ADODB.Connection")
Set Rst = CreateObject("ADODB.Recordset")

Cnn.Open StConnect

Rst.Open Requete, Cnn, 1, 1, 1

' c'est sur cette ligne ci-dessus que le message d'erreur apparait lorsque le nombre d'enregistrements est trop important.

Rst.Close: Set Rst = Nothing
Cnn.Close: Set Cnn = Nothing

End Sub
 

Nicoxxx

XLDnaute Nouveau
Re : Nombre maximum d'enregistrements dépassé dans un RECORDSET

Bonjour tototiti2008,

Tout d'abord, merci d'avoir réfléchi à une solution.

Mais malheureusement, même en ajoutant cette ligne, le message d'erreur reste toujours le même (dès que le nombre d'enregistrements à analyser dépasse 65 530 ) :

***************************************************************************************
Erreur d'execution '-2147217865 (80040e37)

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

***************************************************************************

Je trouve ce nombre limite (65 530) bizarre car il correspond à peu près aux anciennes limites des versions précédentes d'Excel.
De plus, je trouve étrange que le message mentionne MS Access.

Bref, je suis preneur d'une éventuelle idée de génie ....

Cdt
 

tototiti2008

XLDnaute Barbatruc
Re : Nombre maximum d'enregistrements dépassé dans un RECORDSET

Bonjour npaturange,

Après de nombreuses recherches (tu n'es pas le seul confronté au problème) il semblerait qu'il manque simplement des crochets (comme quoi, parfois, on rame pour pas grand chose ;))

Requete = "SELECT * FROM [" & SourceSheet & "][" & SourceRange & "] WHERE CLE Like ""AT%"";"
 

Nicoxxx

XLDnaute Nouveau
Re : Nombre maximum d'enregistrements dépassé dans un RECORDSET

Bonjour tototiti2008,

Super, ça marche, un grand merci à toi car je n'aurai vraiment pas trouvé un truc pareil tout seul.

Seul petit bémol: en ajoutant ces deux crochets, comme cela :
Code:
Requete = "SELECT * FROM [" & SourceSheet & "][" & SourceRange & "] WHERE CLE Like ""AT%"";"
la requête s’exécute sur l'ensemble des données contenus dans la feuille "Données$" (SourceSheet) sans tenir compte de la plage "Plage_source" (SourceRange).

J'obtiens les mêmes résultats (de façon identique aux collègues du forum que tu m'as indiqué) lorsque j'utilise, la syntaxe suivante :
Code:
 Requete = "SELECT * FROM [" & SourceSheet & "] WHERE CLE Like ""AT%"";"

J'ai bien essayé de nommer préalablement la zone (et en retirant le "$" à la suite du nom) mais si le nombre d'enregistrement de cette zone dépasse les 65530, à nouveau, le même message d'erreur réapparait.


En résumé, dans l'état actuel de mes connaissances :
- soit le nombre d'enregistrements à analyser est inférieur à 65530 et on peut spécifier (directement ou avec une zone nommée) la plage à analyser.
- soit le nombre d'enregistrements à analyser est supérieur à 65530 et dans ce cas, la requête s’exécutera sur toutes les données contenues dans la feuille (a condition des respecter les syntaxes ci-dessus)

Aurais-tu une autre idée ?
Aurais-tu d'autres liens à me communiquer pour que je continue mes recherches sur le sujet ?

d'avance merci

Cdt
 

tototiti2008

XLDnaute Barbatruc
Re : Nombre maximum d'enregistrements dépassé dans un RECORDSET

Re,

Non, pas d'idée, mais si tu trouves tiens-nous au courant
Maintenant, si on a des données de plus de 65536 lignes, on devrait pouvoir s'arranger pour que celles-ci soient seules dans la feuille, peut-être ? Mais si ta configuration t'oblige à faire autrement...
 

Nicoxxx

XLDnaute Nouveau
Re : Nombre maximum d'enregistrements dépassé dans un RECORDSET

Hello,

Oui, effectivement, je vais m'en sortir par cette "pirouette" en attendant de trouver mieux.

Si je trouve une meilleur solution, je la posterais.

En tout cas, encore merci pour cette aide précieuse et à bientôt

Cdt
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette