Bonjour à tous !
J'ai un petit problème avec le temps de traitement de mon code. Pour vous expliquer simplement, je cherche à remplir telle quelle une feuille Excel via le code mon application Access. Je récupère les enregistrement selon une requête. Le nombre des enregistrements vont de 5 000 lignes à 30 000.
- Méthode ADO
J'ai essayer de le faire avec un recordset ADO. La méthode marche mais est relativement longue. Voici le code :
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
31
32
33
34
35
36
37
38 With rst .ActiveConnection = cnx .LockType = adLockPessimistic .CursorType = adOpenForwardOnly .Source = "SELECT Mesure.* " _ & "FROM Mesure " _ & "WHERE Mesure.Mesure_SecSoud Like '" & nomSecteur & "';" .Open While (Not .EOF And Not .BOF) DoEvents 'N° Secteur wksheet.Cells(intLig, 1).Value = .Fields("Mesure_SecSoud") 'Position angulaire wksheet.Cells(intLig, 2).Value = .Fields("Mesure_Position") 'Temps wksheet.Cells(intLig, 3).Value = .Fields("Mesure_Temps") 'Période wksheet.Cells(intLig, 4).Value = .Fields("Mesure_Période") 'Champs wksheet.Cells(intLig, 5).Value = .Fields("Mesure_Champs") 'Consigne wksheet.Cells(intLig, 6).Value = .Fields("Mesure_consigne") 'Réel wksheet.Cells(intLig, 7).Value = .Fields("Mesure_Valeur") .MoveNext intLig = intLig + 1 'Wend .Close End With- Etat
Ensuite je suis passé par un Etat que j'exporte sur Excel, effectivement c'est beaucoup plus rapide, moins maniable car ça écrase le workbook en cours. Le problème c'est que passé 20 000, l'exportation plante littéralement. Voici le code :
Creer_requete est une fonction qui écrase la requete ayant le même nom si elle existe et la recrée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Creer_Requete "Liste_Mesure", "SELECT Mesure.* FROM Mesure WHERE Mesure.Mesure_SecSoud LIKE '" & nomSecteur & "' ORDER BY Mesure.Mesure_Temps;" DoCmd.OutputTo acOutputQuery, "Liste_Mesure", acFormatXLS, RESUME_PATH & "\" & "tampon.xls", True
- Enregistrement dans un tableau tampon tous les enregistrement d'un recordset puis coller le tableau dans Excel
J'ai pas tester cette méthode j'ai un peu de mal avec le code. Cela dit je pense pas qu'elle soit plus avantageuse que ce soit en mémoire ou en temps.
Donc mes questions sont :
- Quelle est la méthode qui correspond le plus à mon cas ?
- Comment l'optimiser d'un point de vue du temps de traitement ?
Merci de m'avoir lu et un second merci à ceux qui voudront bien répondre !
Partager