Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Un petit test sur ADO ....

18 réponses
Avatar
MichDenis
Bonjour à tous,

http://cjoint.com/?diohTknHuP

Ceci s'adresse principalement à ceux qui ont la version Excel 2007.

Je vous propose un fichier qui contient quelques données en colonne A et B.
La colonne A possède 65536 lignes, et la colonne B 65537 lignes.

ADO semble limiter à 65536 lignes et c'est inexact. Est-ce que quelqu'un
sait ce qu'il faut modifier à cette procédure pour la faire fonctionner même
pour un recordset d'au delà de 65536 lignes.

Si quelqu'un a une version excel 2007 de langue anglaise, pourrait-il copier
les données dans un nouveau classeur "anglais" ainsi que le module
associé pour effectuer un test.

En fait toute la problématique provient du fait que je voudrais faire fonctionner
cette ligne de code de la procédure :
szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"

Je l'ai vu en action et ce dans un classeur 2007 et le résultat attendu était au
rendez-vous.
La seule différence, c'était un excel parlant anglais ! Serions-nous victime de
discrimination ?

Bonne chance à tous et à toutes et merci de votre participation.

8 réponses

1 2
Avatar
MichDenis
| Feuille active par défaut ?

Si tu veux... mais ajoute une feuille vide au classeur
met la feuille qui a des données comme feuille active
et fait le test avec cette syntaxe :
szSQL = "SELECT * FROM B1:90000;"

Et tu obtiens toujours 0 si le classeur a plus d'une feuille.
Tu enlèves la feuille que tu as ajouté et de nouveau cela
fonctionne. Tu disais quoi ? feuille active ?
Avatar
MichDenis
szSQL = "SELECT * FROM B1:90000;"

Je vais module ma dernière affirmation:
Avec cette syntaxe, pour obtenir un résultat, la feuille
des données se doit d'être la première feuille du classeur.
Sinon on obtient des 0 comme réponse.
Avatar
Daniel.C
Bonjour.
En utilisant cette syntaxe, on y arrive aussi :
szSQL = "SELECT * FROM [Sheet1$]Plage;"
Plage étant la plage nommée B1:B90000.
Daniel

szSQL = "SELECT * FROM B1:90000;"

Je vais module ma dernière affirmation:
Avec cette syntaxe, pour obtenir un résultat, la feuille
des données se doit d'être la première feuille du classeur.
Sinon on obtient des 0 comme réponse.


Avatar
Michel Angelosanto
Il y a bien une limitte à 65535 enregistrements.
Dans le test 2, j'ai mis B:B au lieu de B11:B80184 et j'ai rempli la colonne
B jusqu'à 80184
le test n'a pas planté mais m'a affiché 65535 enregistrements.

"MichDenis" a écrit dans le message de
news:
Bonjour à tous,

http://cjoint.com/?diohTknHuP

Ceci s'adresse principalement à ceux qui ont la version Excel 2007.

Je vous propose un fichier qui contient quelques données en colonne A et
B.
La colonne A possède 65536 lignes, et la colonne B 65537 lignes.

ADO semble limiter à 65536 lignes et c'est inexact. Est-ce que quelqu'un
sait ce qu'il faut modifier à cette procédure pour la faire fonctionner
même
pour un recordset d'au delà de 65536 lignes.

Si quelqu'un a une version excel 2007 de langue anglaise, pourrait-il
copier
les données dans un nouveau classeur "anglais" ainsi que le module
associé pour effectuer un test.

En fait toute la problématique provient du fait que je voudrais faire
fonctionner
cette ligne de code de la procédure :
szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"

Je l'ai vu en action et ce dans un classeur 2007 et le résultat attendu
était au
rendez-vous.
La seule différence, c'était un excel parlant anglais ! Serions-nous
victime de
discrimination ?

Bonne chance à tous et à toutes et merci de votre participation.








--
Michel Angelosanto, Bordeaux
Dernières mises à jour du site Voyage au pays Internet
http://angelosa.free.fr/index.php?t=8
Avatar
Michel Angelosanto
un petit truc en attendant de trouver la solution, découper les
enregistrements en colonnes de 655436 enregistrements
Sub Exemple3()
oldlcount = 0
Données2 ThisWorkbook.Path & "Ultime_ADO.xlsm", "Sheet1", "A:A"
If lcount = 65536 Then
oldlcount = 65536
Données2 ThisWorkbook.Path & "Ultime_ADO.xlsm", "Sheet1", "B:B"
End If
lcount = lcount + oldlcount
MsgBox lcount & " enregistrements"
End Sub
on peut faire une boucle si plus de colonnes

"MichDenis" a écrit dans le message de
news:
Bonjour à tous,

http://cjoint.com/?diohTknHuP

Ceci s'adresse principalement à ceux qui ont la version Excel 2007.

Je vous propose un fichier qui contient quelques données en colonne A et
B.
La colonne A possède 65536 lignes, et la colonne B 65537 lignes.

ADO semble limiter à 65536 lignes et c'est inexact. Est-ce que quelqu'un
sait ce qu'il faut modifier à cette procédure pour la faire fonctionner
même
pour un recordset d'au delà de 65536 lignes.

Si quelqu'un a une version excel 2007 de langue anglaise, pourrait-il
copier
les données dans un nouveau classeur "anglais" ainsi que le module
associé pour effectuer un test.

En fait toute la problématique provient du fait que je voudrais faire
fonctionner
cette ligne de code de la procédure :
szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"

Je l'ai vu en action et ce dans un classeur 2007 et le résultat attendu
était au
rendez-vous.
La seule différence, c'était un excel parlant anglais ! Serions-nous
victime de
discrimination ?

Bonne chance à tous et à toutes et merci de votre participation.








--
Michel Angelosanto, Bordeaux
Dernières mises à jour du site Voyage au pays Internet
http://angelosa.free.fr/index.php?t=8
Avatar
MichDenis
Synthèse des discussions sur le sujet :

Une adresse à conserver :
Différentes chaînes de connections utilisant ADO :
http://www.connectionstrings.com/ (Excel 2007)

Particularités propre à Excel 2007 avec ADO

2 situations se présentent :
'------------------------------
A ) Si la requête que vous passez se fait sur une plage de
cellulles de moins ou égale à 65536 lignes

Pas de problème particulier avec le code proposé. La
requête peut s'adresser à classeur lui-même ou sur
tout autre classeur qu'il soit ouvert ou fermé.

B ) Si la requête que vous passez est réalisé sur une plage
de plus de 65536 lignes, vous ne pouvez la faire sur
un classeur ouvert que ce soit le classeur lui-même ou
tout autre classeur. Un vieux "bug" d'ADO semble avoir
refait surface.

La chaine d'une requête de base ressemble à ceci :

Dim Requete As String
Dim SourceSheet As String
Dim Source As String

SourceSheet = "Feuil1" 'nom de l'onglet de la feuille
SourceRange = "B1:B98184" 'Adresse relative de la plage de cellules

Requete = _
"SELECT * FROM [" & SourceSheet & "$" & SourceRange & "];"

Pour désigner la plage de cellules, on peut aussi utiliser une
Plage nommée SEULEMENT SI le "NOM" fut défini au niveau du classeur.

2 Façons de se connecter : liaison tardive et liaison précoce :
Voici un exemple pour chacun :
'---------------------------------------------------
Sub Extraire_Données_Avec_ADO_Liason_Tardive()
'Liaison tardive ne requiert pas de charger la
'la bibliothèque ADO avant l'exécution de la procédure
'Microsoft Activex Data Object 2.x librairy"

Dim Cnn As Object, Rst As Object
Dim Requete As String, Nb As Long
Dim SourceSheet As String, SourceRange As String
Dim StConnect As String, SourceFile As String

'nom onglet où sont les données
SourceSheet = "Feuil1"
'adresse RELATIVE de la plage
SourceRange = "B1:B98184"
'Chemin & nom du fichier
SourceFile = ThisWorkbook.Path & "Ultime2.xlsm"

'Chaine de connection
StConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 12.0;HDR=Yes"";"
'Yes -> en-tête de colonne
'NO -> sans en-tête de colonne

'Texte de la requête
Requete = "SELECT * FROM [" & SourceSheet & "$" & SourceRange & "];"

'On peut aussi utiliser une plage nommée
'définie au niveau du Classeur seulement
'Requete = "SELECT * FROM NomDeLaPlage;"

'Création d'un objet Connection
Set Cnn = CreateObject("ADODB.Connection")
'Création d'un objet RecordSet
Set Rst = CreateObject("ADODB.Recordset")

'Ouverture de la connection à la base de donnée
Cnn.Open StConnect

'Exécution de la requête
Rst.Open Requete, Cnn, 1, 1, 1
'La signification des 1
'Comme la bibliothèque n'est pas chargé, ont doit
'utiliser les références numériques des constantes textes
'Le premier 1 :
' Dim CurseurType As CursorTypeEnum
'CurseurType= adOpenForwardOnly(0),adOpenStatic(3)
' adOpenKeyset(1),adOpenDynamic(2)
'Le deuxième 1 :
'Dim ModeAccess As LockTypeEnum
'ModeAccess ­LockReadOnly(1),adLockPessimistic(2)
' adLockOptimistic(3),adLockBatchOptimistic(4)
'Le troisième 1
'Dim TypeCommand As CommandTypeEnum
'typecommand= adCmdText(1), adCmdFile(256)
' adCmdTable(2), adCmdTableDirec(512)
' adCmdUnknown(8), adCmdStoredProc(4)

'Obtenir le nombre d'enregistrements du recordset
Nb = Rst.RecordCount
MsgBox Nb & " enregistrements"

'Fermeture du recordset et de la connection
'de même que la libération de l'espace mémoire
'occupé par ces objets.
Rst.Close: Set Rst = Nothing
Cnn.Close: Set Cnn = Nothing
End Sub
'---------------------------------------------------

Sub Extraire_Données_Avec_ADO_Liaison_Precoce()
'Liaison précoce requiert la bibliothèque :
'Microsoft Activex Data Object 2.x librairy"

Dim Cnn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Requete As String, Nb As Long
Dim SourceSheet As String, SourceRange As String
Dim SourceFile As String

'nom onglet où sont les données
SourceSheet = "Feuil1"
'adresse RELATIVE de la plage
SourceRange = "B1:B98184"
'Chemin & nom du fichier
SourceFile = ThisWorkbook.Path & "Ultime2.xlsm"

'Ouverture de la connection
Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 12.0;HDR=Yes"";"
'Yes -> en-tête de colonne
'NO -> sans en-tête de colonne

'Texte de la requête
Requete = "SELECT * FROM [" & SourceSheet & "$" & SourceRange & "];"

'On peut aussi utiliser une plage nommée
'définie au niveau du Classeur seulement
'Requete = "SELECT * FROM NomDeLaPlage;"

'Ouverture du recordset :
Rst.Open Requete, Cnn, 1, 1, 1

'Le premier 1 :
' Dim CurseurType As CursorTypeEnum
'CurseurType= adOpenForwardOnly(0),adOpenStatic(3)
' adOpenKeyset(1),adOpenDynamic(2)

'Le deuxième 1 :
'Dim ModeAcces As LockTypeEnum
'ModeAcces ­LockReadOnly(1),adLockPessimistic(2)
' adLockOptimistic(3),adLockBatchOptimistic(4)
'Le troisième 1
'Dim TypeCommand As CommandTypeEnum
'typecommand= adCmdText(1), adCmdFile(256)
' adCmdTable(2), adCmdTableDirec(512)
' adCmdUnknown(8), adCmdStoredProc(4)

'Obtenir le nombre d'enregistrements du recordset
Nb = Rst.RecordCount
MsgBox Nb & " enregistrements"

'Fermeture du recordset et de la connection
'de même que la libération de l'espace mémoire
'occupé par ces objets.
Rst.Close: Set Rst = Nothing
Cnn.Close: Set Cnn = Nothing
End Sub
'---------------------------------------------------
Avatar
Mishell
Bonjour.

Je suis tombé sur cette page sur le site Developpez.com.
Comment importer dans Excel des fichiers txt contenant plus de 65536 lignes
?
où on suggère
une autre solution qui utilise le paramètre MaxRows de la méthode
CopyFromRecordset afin de définir le nombre de lignes par feuille, lors de
l'import.

En espérant que ca règle ton problème?

Mishell


"MichDenis" wrote in message
news:
Bonjour à tous,

http://cjoint.com/?diohTknHuP

Ceci s'adresse principalement à ceux qui ont la version Excel 2007.

Je vous propose un fichier qui contient quelques données en colonne A et
B.
La colonne A possède 65536 lignes, et la colonne B 65537 lignes.

ADO semble limiter à 65536 lignes et c'est inexact. Est-ce que quelqu'un
sait ce qu'il faut modifier à cette procédure pour la faire fonctionner
même
pour un recordset d'au delà de 65536 lignes.

Si quelqu'un a une version excel 2007 de langue anglaise, pourrait-il
copier
les données dans un nouveau classeur "anglais" ainsi que le module
associé pour effectuer un test.

En fait toute la problématique provient du fait que je voudrais faire
fonctionner
cette ligne de code de la procédure :
szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"

Je l'ai vu en action et ce dans un classeur 2007 et le résultat attendu
était au
rendez-vous.
La seule différence, c'était un excel parlant anglais ! Serions-nous
victime de
discrimination ?

Bonne chance à tous et à toutes et merci de votre participation.







Avatar
Mishell
Comment importer dans Excel des fichiers txt contenant plus de 65536 lignes
http://excel.developpez.com/faq/?page=ChapFichiersTxt


"Mishell" wrote in message
news:
Bonjour.

Je suis tombé sur cette page sur le site Developpez.com.
Comment importer dans Excel des fichiers txt contenant plus de 65536
lignes ?
où on suggère
une autre solution qui utilise le paramètre MaxRows de la méthode
CopyFromRecordset afin de définir le nombre de lignes par feuille, lors de
l'import.

En espérant que ca règle ton problème?

Mishell


"MichDenis" wrote in message
news:
Bonjour à tous,

http://cjoint.com/?diohTknHuP

Ceci s'adresse principalement à ceux qui ont la version Excel 2007.

Je vous propose un fichier qui contient quelques données en colonne A et
B.
La colonne A possède 65536 lignes, et la colonne B 65537 lignes.

ADO semble limiter à 65536 lignes et c'est inexact. Est-ce que quelqu'un
sait ce qu'il faut modifier à cette procédure pour la faire fonctionner
même
pour un recordset d'au delà de 65536 lignes.

Si quelqu'un a une version excel 2007 de langue anglaise, pourrait-il
copier
les données dans un nouveau classeur "anglais" ainsi que le module
associé pour effectuer un test.

En fait toute la problématique provient du fait que je voudrais faire
fonctionner
cette ligne de code de la procédure :
szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"

Je l'ai vu en action et ce dans un classeur 2007 et le résultat attendu
était au
rendez-vous.
La seule différence, c'était un excel parlant anglais ! Serions-nous
victime de
discrimination ?

Bonne chance à tous et à toutes et merci de votre participation.











1 2