GetRows : Récupérer le contenu d'un RecordSet ADO dans un tableau
Bonjour,
j'ai un problème avec l'utilisation de la méthode GetRows des RecordSet ADO (et non DAO, j'ai pas bien compris pourquoi il y a deux types de RecordSet et les différences d'ailleurs...).
Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| Option Explicit
Option Base 1
Sub toto()
'Déclaration des variables
Dim connexion As ADODB.Connection
Dim monRecordSet As ADODB.Recordset
Dim Base As String
'Instanciation des variables
Set connexion = New ADODB.Connection
Set monRecordSet = New ADODB.Recordset
Base = "Base.xlsm"
'Paramètres de l'objet connexion
connexion.Provider = "Microsoft.Jet.OLEDB.4.0"
connexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Base + ";Extended Properties=""Excel 12.0;HDR=YES;"""
connexion.Open
'Paramètres de l'objet RecordSet
monRecordSet.CursorLocation = adUseServer
monRecordSet.ActiveConnection = connexion
'Requête
monRecordSet.Open "SELECT * FROM [PX_LAST] WHERE NOT(Date=0)", , adOpenStatic, adLockOptimistic
Debug.Print monRecordSet.EOF
monRecordSet.MoveLast 'Les méthodes MoveLast et MoveFirst servent juste à pouvoir utiliser
monRecordSet.MoveFirst 'RecordCount ensuite (sinon, les deux commandes s'annulent)
Debug.Print monRecordSet.RecordCount
Range("A1").CopyFromRecordset monRecordSet
'Tableau
Dim monTableau As Variant
' monTableau = Range(Range("A1"), Range("A1").End(xlDown).Offset(0, 1)).Value
monTableau = monRecordSet.GetRows(20)
Debug.Print monTableau(1, 2)
connexion.Close
Set connexion = Nothing
End Sub |
Voici ce qu'est supposé faire mon code : j'ai une base de données sous forme de fichier Excel ("Base.xlsm"). Dans ce fichier, j'ai une plage nommée (PX_LAST) qui contient les données que je souhaite extraire. Je fais ma requête SQL et tout fonctionne bien. Mon RecordSet contient les données voulues, je peux même les copier dans un Range grâce à la méthode CopyFromRecordSet(). Seulement, je souhaite stocker mes données dans un tableau. J'utilise donc la méthode GetRows, mais mon code bloque sur la ligne en gras. J'obtiens l'erreur :
Erreur d'exécution '3021': Erreur définie par l'application ou par l'objet
A noter que j'arrive à faire ce que je souhaite faire via la ligne en italique (mise en commentaire) :
monTableau = Range(Range("A1"), Range("A1").End(xlDown).Offset(0, 1)).Value
Mais c'est de la bricole et j'aimerais éviter de passer par une copie dans les cellules.
Est-ce que quelqu'un a une piste ?
Je vous remercie