Bonjour,

J'ai un petit soucis pour exploiter un recordset, qui se passe de la façon suivante :


J'ai une connexion Jet 4.0 pour lire des fichiers Excel qui me servent de source, je crée un Recordset "Rst" à partir de cela.
Je voudrais, sans passer par une feuille Excel de transition, envoyer directement ce Recordset dans ma base de données MySQL.

La connexion à la base marche, et j'arrive à insérer une ligne. Mais c'est tout... donc je pense être proche du but, mais ma boucle doit être mauvaise.
De plus, j'aimerais ne lire les informations dans mon Recordset qu'à partir de la 3ème ou 4ème entrée, est ce possible avec un Move... ? Ou Dois je supprimer les lignes du Recordset que je ne veux pas ?

Voilà ce que j'ai en gros :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
Sub testrecordset()
    Dim Cn As ADODB.Connection
    Dim cnbis As ADODB.Connection
    Dim Fichier As String
    Dim NomFeuille As String, texte_SQL As String
    Dim Import_sql As String
    Dim Rst As ADODB.Recordset
    Dim rst2 As ADODB.Recordset
 
    'Définit le classeur fermé servant de base de données
    Fichier = "Y:\Chemin\Fichier.xls"
    'Nom de la feuille dans le classeur fermé
    NomFeuille = "saisie"
 
    Set Cn = New ADODB.Connection
 
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Fichier & ";Extended Properties=Excel 8.0;"
.Open
End With
 
 
    'Définit la requête
    '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
    texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
 
    Set Rst = New ADODB.Recordset
    Set Rst = Cn.Execute(texte_SQL)

Cette partie marche bien, ensuite j'ai fait 2 essais :

Set rst2 = New ADODB.Recordset
Set cnbis = New ADODB.Connection
cnbis.Open "dsn=testvba"


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
While Not Rst.EOF
    cnbis.Execute (Import_sql)
    ligne = ligne + 1
    Rst.MoveNext
    Wend
Et

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Rst.MoveFirst
Do Until Rst.EOF = True
Set rst2 = cnbis.Execute(Import_sql), True
Rst.MoveNext
Loop
Dans les deux cas, seule la première ligne semble copiée (j'ai sans arrêt la même date : "2009-01-02" qui est copiée dans la base.

D'ailleurs je me demande bien pourquoi ce n'est pas "2009-01-01".

Je ne pense pas que le problème vienne des propriétés des Recordset (j'ai lu des limitations par rapport à ceux créés via Microsoft Jet), mais plutôt un problème pour passer à la ligne suivante dans recordset. Je pensais que celui ci pouvait être traité comme un ensemble d'ailleurs, suis je donc obligé de faire ligne par ligne ?

Merci bien pour votre aide.