Bonjour,
Nous utilisons SAP B1 HANA.
Après avoir défini une connexion ADODB avec Recordset
j'établis la connexion (les XXX sont remplacés par mes valeurs)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dim cNBusinessPartner As ADODB.Connection Dim rsUserFacture As ADODB.Recordset Dim rsBusinessParner As Recordset
je créé une requête SQL qui va me chercher les données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 cNBusinessPartner.ConnectionString = "Driver={HDBODBC};ServerNode=XXX:XXX;Database=" & MyBaseSap & "; Uid=XXX;Password=XXX;" cNBusinessPartner.Open Set rsUserFacture = New ADODB.Recordset
etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 requete = "SELECT * FROM " & vbNewLine requete = requete & " ( " & vbNewLine requete = requete & " SELECT T0.""DocNum"" AS ""DocNum"" " & vbNewLine
Par ailleurs, j'ai défini un tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 With rsUserFacture .CursorLocation = adUseClient .ActiveConnection = cNBusinessPartner .Open requete, cNBusinessPartner End With
dans lequel je verse les données reçues :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Dim MyRange() As Variant
Quand je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 MyRange = rsUserFacture.GetRows NbrCol = UBound(MyRange, 1) NbrRow = UBound(MyRange, 2)
C'est la cata, le positionnement des cellules n'est pas respecté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Worksheets("Activité").Range(Cells(4, 4), Cells(NbrRow, NbrCol)) = MyRange
Quand je fais :
Nickel, cela fonctionne parfaitement ... avec quelques lignes (exemple ici 100 lignes pour le 1ier For mis en commentaire) !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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 ?
Partager