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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| ' Exemple d'utilisation:
Dim Enr As Variant
Set Enr = Charger_Classeur("P:\MonFichier.xlsx", "SELECT * FROM [Feuil1$A:Z]")
If Not Enr Is Nothing Then
ActiveSheet.Range("A1").CopyFromRecordset Enr
End If
'------------------------------------------------------------------------------------------------
Public Function Charger_Classeur(Fichier As String, StrSQL As String) As Variant ' => ADODB.Recordset
'------------------------------------------------------------------------------------------------
' Charge les données d'un classeur Excel par la méthode ADODB, sans l'ouvrir.
' Nécessite de connaître le nom de la feuille concernée,
' Ne prend pas en charge le nom des tableaux structurés (passer une adresse de type A1:B2 ou rien).
'------------------------------------------------------------------------------------------------
' Fichier : Le classeur Excel.
' StrSQL : La requête qui inclue éventuellement le nom des colonnes, le nom de la feuille (suivi de $)
' et éventuellement la plage désirée.
'------------------------------------------------------------------------------------------------
' La liaison anticipée nécessite d'installer la référence : Microsoft ActiveX Data Objects 6.0 Library
' La liaison tardive permet de ne pas référencer la bibliothèque ADODB.
' Linstanciation dobjets à laide de la liaison tardive est généralement plus lente
' que lutilisation de la liaison anticipée.
' Ici la liaison tardive a été adoptée uniquement pour vous éviter d'installer manuellement une
' référence et donc simplifier la portabilité du code.
' Les remarques ci-dessous indiquent comment adapter le code pour une liaison anticipée.
'------------------------------------------------------------------------------------------------
' Provider et Extended à utiliser:
' Soit Microsoft.Jet.OLEDB.4.0 et Excel 8.0
' Soit Microsoft.ACE.OLEDB.12.0 et Excel 12.0 (voire Excel 14.0)
'------------------------------------------------------------------------------------------------
Dim Cnn As Variant ' Liaison anticipée => As ADODB.Connection
Dim Rs As Variant ' Liaison anticipée => As ADODB.Recordset
' Gestion des erreurs:
On Error GoTo Gest_err
Err.Clear
Set Charger_Classeur = Nothing
' Création d'une connexion:
Set Cnn = CreateObject("ADODB.Connection") ' Liaison anticipée => Set Cnn = New ADODB.Connection
Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Fichier & ";" & _
"Extended Properties=""Excel 12.0;HDR=Yes"";"
' Exécute une requête SQL sur un jeu d'enregistrements:
Set Rs = CreateObject("ADODB.Recordset") ' Liaison anticipée => Set Rs = New ADODB.Recordset
Rs.Open StrSQL, Cnn, 1, 2, 1 ' Liaisons anticipée => adOpenKeyset, adLockPessimistic, adCmdText
' S'il y a des enregistrements concernés:
If Rs.EOF = False Then
Rs.MoveFirst ' Replace le pointeur au début du jeu d'enregistrements (facultatif).
Set Charger_Classeur = Rs ' Renvoie les enregistrements.
End If
' Fin du traitement, libération des mémoires:
Gest_err:
Set Rs = Nothing
Set Cnn = Nothing
If Err.Number <> 0 Then Set Charger_Classeur = Nothing
Err.Clear
End Function
'---------------------------------------------------------------------------------------- |
Partager