Copie données issues de ADOdb et SQL dans feuille Excel. Double boucle trop longue
Bonjour,
Nous utilisons SAP B1 HANA.
Après avoir défini une connexion ADODB avec Recordset
Code:
1 2 3
| Dim cNBusinessPartner As ADODB.Connection
Dim rsUserFacture As ADODB.Recordset
Dim rsBusinessParner As Recordset |
j'établis la connexion (les XXX sont remplacés par mes valeurs)
Code:
1 2 3 4
| cNBusinessPartner.ConnectionString = "Driver={HDBODBC};ServerNode=XXX:XXX;Database=" & MyBaseSap & "; Uid=XXX;Password=XXX;"
cNBusinessPartner.Open
Set rsUserFacture = New ADODB.Recordset |
je créé une requête SQL qui va me chercher les données :
Code:
1 2 3
| requete = "SELECT * FROM " & vbNewLine
requete = requete & " ( " & vbNewLine
requete = requete & " SELECT T0.""DocNum"" AS ""DocNum"" " & vbNewLine |
etc...
Code:
1 2 3 4 5
| With rsUserFacture
.CursorLocation = adUseClient
.ActiveConnection = cNBusinessPartner
.Open requete, cNBusinessPartner
End With |
Par ailleurs, j'ai défini un tableau :
Code:
Dim MyRange() As Variant
dans lequel je verse les données reçues :
Code:
1 2 3
| MyRange = rsUserFacture.GetRows
NbrCol = UBound(MyRange, 1)
NbrRow = UBound(MyRange, 2) |
Quand je fais :
Code:
Worksheets("Activité").Range(Cells(4, 4), Cells(NbrRow, NbrCol)) = MyRange
C'est la cata, le positionnement des cellules n'est pas respecté.
Quand je fais :
Code:
1 2 3 4 5 6
| For i = 0 To (NbrRow - 1)
' For i = 0 To 100
For j = 0 To NbrCol
Worksheets("Facture").Cells(MyDebRowFactureData + i, MyDebColumnFacture + j).Value = MyRange(j, i)
Next j
Next i |
Nickel, cela fonctionne parfaitement ... avec quelques lignes (exemple ici 100 lignes pour le 1ier For mis en commentaire) !
Sauf que j'ai 22 colonnes et environ plus de 10 000 lignes.
L'utilisation de la double boucle pour remplir le tableau est beaucoup, beaucoup trop longue.
Comment faire, quelle méthode utiliser pour être plus performant ?