Bonjour,
Je dispose d'un fichier Excel un peu particulier à importer de façon automatique dans une table, j'ai donc pour cela réalisé une fonction VBA.
Je ne peux pas (et ne veut pas) importer le fichier via l'import d'access, car j'effectue quelques tests pour importer les bonnes lignes, et le format du fichier ne permet pas de toute manière une importation via "Fichier -> Importer".
Le coeur de ma fonction ressemble grosso modo à ça :
Or ce code est un peu long car j'importe au final 3500 enregistrements environ. C'est pas mal, mais franchement pas énorme, et j'aimerais optimiser le temps d'execution (~20sec) (sans la requête, ma fonction met au total 2sec pour tout parcourir). Je veux surtout l'optimiser car ma base est destinée à être utilisée sur un réseau, où les temps d'execution sont exponentiellement plus longs.
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 Dim derLigne As Long derLigne = oWSht.Range("A65536").End(xlUp).Row 'On importe jusqu'à la dernière ligne While i <= derLigne '(où i représente la ligne) 'On ne veut pas importer les lignes qui commencent par "Besoin", celles où Ai=Bi et celles qui sont égales à "Total" If (Left(oWSht.Range("A" & i).Value, 7) <> "Besoins" And oWSht.Range("B" & i).Value <> "" And oWSht.Range("A" & i).Value <> "Total") Then 'Pour chaque lignes on effectue 3 importations dans la table temporaire: col(J) stock la position des trois colonnes à importer. For j = 0 To 2 DoCmd.RunSQL "INSERT INTO [Importation_Alloc_Temp] ( [Modèle], [Pays], [Volume], [Mois] ) VALUES ('" _ & oWSht.Cells(i, 1) & "', '" _ & oWSht.Cells(i, 2) & "', '" _ & Val(oWSht.Cells(i, col(j))) & "', '" _ & Mois(j) & "');" count = count + 1 Next j End If 'on incrémente la variable i pour passer à la ligne suivante i = i + 1 Wend
Pour cela, je pense qu'il serait beaucoup plus efficient d'importer tous les enregistrements d'un seul coup, plutot qu'un à un ... Quel est selon vous le meilleur moyen de les stocker (4 champs) avant de les importer en une fois ... Est il possible de les ajouter dans un recordset que l'on déverse ensuite dans une table ?
Merci d'avance pour votre aide,
Thomas
Partager