get des données d'Access en utilisant vba en utilisant des données d'excel

J'essaie d'extraire des données d'Access en utilisant une colonne d'excel.

J'ai essayé le code suivant, mais il ne prend pas trop de time lorsque le nombre de lignes dans excel dépasse les lignes 5k. Est-ce que quelqu'un connaît une meilleure façon de faire reference aux données Excel pour get les résultats:

Sub ddd() Const dbloc As Ssortingng = "C:\Users\mysystem\Downloads\Database11.accdb" Dim db As DAO.Database Dim rs As DAO.Recordset Dim xlbook As Workbook Dim xlsheet As Worksheet Dim a As Long Dim SQL As Ssortingng Set xlbook = ActiveWorkbook Set xlsheet = xlbook.Worksheets(1) xlsheet.Range("B2:Z100000").ClearContents Set db = OpenDatabase(dbloc) SQL = "SELECT Material, MPN " SQL = SQL & "FROM Sheet2 " SQL = SQL & "WHERE Material IN (" Dim r As Range For Each r In Range("A2:A19098") SQL = SQL & r.Text & "," Next r SQL = Left(SQL, Len(SQL) - 1) 'Drop last comma SQL = SQL & ")" ' i want to change this for loop because my range might vary from 80-100k rows and this method is not working. i got a suggestion here that i can use a table for this. But i am new to macros and access and not sure of the syntax. Can anyone please help with the syntax. Assuming tablename for the excel data is column1 and ranges from a2:a100000 Set rs = db.OpenRecordset(SQL) ', dbOpenSnapshot) If rs.RecordCount = 0 Then MsgBox "No data resortingeved from database", vbInformation + vbOKOnly, "No Data" GoTo SubExit Else rs.MoveLast recCount = rs.RecordCount rs.MoveFirst End If xlsheet.Range("C2").CopyFromRecordset rs End Sub 

Toute aide me sera très appréciée. Merci!!

Si vous searchz une autre façon de faire reference à une colonne Excel, vous pouvez utiliser ce qui suit:

 SQL = "SELECT Material, MPN " SQL = SQL & "FROM Sheet2 " SQL = SQL & "WHERE Material IN (" SQL = SQL & "SELECT * FROM [A1:A19098] IN '" SQL = SQL & ActiveWorkbook.FullName & "'" SQL = SQL & " 'Excel 12.0 Macro;')" 

Cela permet au moteur de database DAO de consulter directement votre file Excel via OleDb, au lieu de transmettre chaque ligne en tant que text, ce qui devrait être plus efficace.

Le file Excel doit être enregistré avant de le faire (et il est préférable de le triggersr à partir d'un file différent, mais fonctionne pour le triggersment du même file).

Notez que je incline intentionnellement 1 ligne de plus, car la première ligne contient des noms de colonne lors de l'utilisation de cette.

Je suppose que vous utilisez un file .xlsm .