'necessite d'activer la reference Microsoft ActiveX Data Objects x.x Library
'tester la version excel avec Int(Val(Application.Version)) si < 12 (2007)
'HDR=No signifie sans entête(header) si HDR=Yes la prem.lig n'est pas chargée !
'Vers.< 12: "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CheminFichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
'Vers.>=12: "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CheminFichier & ";Extended Properties=""Excel 12.0;HDR=No;"";"
'ceci est un code qui me sert d'essai.
'évidemment il faut connaître un peu pour adapter à tes besoins
'j'ai laissé mon fichier d'essai pour toi voir le déroulement
'celui-ci était dans le même répertoire
Public Const FichEssai$ = "ADODB RolDonnees.xls"
Sub ImportUneCellOuUnRangDuClasseurFerme()
Dim ADOConnect As Object, ADORecord As Object, TextSQL As String
Dim FeuilSource$, RangSource$
Dim FeuilDestin$, RangDestin$
'init var destin pour recopie dans ce classeur
FeuilDestin = ActiveSheet.Name: RangDestin = "A2"
'init var source à loader(ici le classeur test fermé est dans le même dossier)
ChemFichSource = ThisWorkbook.Path & "\" & FichEssai$
FeuilSource = "Feuil1$" 'ajouter $ au nom de la feuille
RangSource = "A2:B3" 'exp "A1:A1" ou "A1:C10"
TextSQL = "SELECT * FROM [" & FeuilSource & RangSource & "]"
'ouverture (test version excel)
Set ADOConnect = CreateObject("ADODB.Connection")
If Int(Val(Application.Version)) < 12 Then
ADOConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & ChemFichSource & ";Extended Properties=""Excel 8.0;HDR=No;"";"
Else
ADOConnect.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ChemFichSource & ";Extended Properties=""Excel 12.0;HDR=No;"";"
End If
'load les données
Set ADORecord = CreateObject("ADODB.Recordset")
Set ADORecord = ADOConnect.Execute(TextSQL)
'recopie dans ce classeur
Sheets(FeuilDestin).Range(RangDestin).CopyFromRecordset ADORecord
'fermeture connection
ADOConnect.Close
Set ADORecord = Nothing: Set ADOConnect = Nothing
End Sub
'EXPORTER apparemment on ne peut copier qu'une cellule!?
'=======================================================
Sub ExportUneCellDansClasseurFerme1() ' Set ADOConnect = CreateObject("ADODB.Connection")
Dim ChemFichDestin$, RangDestin$, TextSQL$
Dim FeuilSource$, RangSource$
Dim ADOConnect As Object, ADOCommand As Object, ADORecord As Object
Set ADOConnect = CreateObject("ADODB.Connection")
Set ADOCommand = CreateObject("ADODB.Command")
Set ADORecord = CreateObject("ADODB.Recordset")
'init var source
FeuilSource$ = ActiveSheet.Name
RangSource$ = "H2"
'init var destin (ici le classeur test est dans le même dossier)
ChemFichDestin = ThisWorkbook.Path & "\" & FichEssai$
RangDestin = "Feuil1$H2:H2"
TextSQL = "SELECT * FROM [" & RangDestin & "]"
'ouverture (test version excel)
If Int(Val(Application.Version)) < 12 Then '< 2007
ADOConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ChemFichDestin & ";Extended Properties=""Excel 8.0;HDR=No;"";"
Else '>= 2007
ADOConnect.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ChemFichDestin & ";Extended Properties=""Excel 12.0;HDR=No;"";"
End If
'copi donnée
ADOCommand.ActiveConnection = ADOConnect
ADOCommand.CommandText = TextSQL
ADORecord.Open ADOCommand, , adOpenKeyset, adLockOptimistic
ADORecord(0).Value = Sheets(FeuilSource$).Range(RangSource$)
ADORecord.Update
'fermeture
ADOConnect.Close
Set ADOConnect = Nothing: Set ADOCommand = Nothing: Set ADORecord = Nothing
End Sub
Sub ExportUneCellDansClasseurFerme2() ' Dim ADOConnect As ADODB.Connection
Dim ChemFichDestin$, RangDestin$, TextSQL$
Dim FeuilSource$, RangSource$
Dim ADOConnect As ADODB.Connection
Dim ADOCommand As ADODB.Command
Dim ADORecord As ADODB.Recordset
'init var source
FeuilSource$ = ActiveSheet.Name
RangSource$ = "H2"
'init var destin (ici le classeur test est dans le même dossier)
ChemFichDestin = ThisWorkbook.Path & "\" & FichEssai$
RangDestin = "Feuil1$H2:H2"
TextSQL = "SELECT * FROM [" & RangDestin & "]"
'ouverture (test version excel)
Set ADOConnect = New ADODB.Connection
If Int(Val(Application.Version)) < 12 Then '< 2007
ADOConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ChemFichDestin & ";Extended Properties=""Excel 8.0;HDR=No;"";"
Else '>= 2007
ADOConnect.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ChemFichDestin & ";Extended Properties=""Excel 12.0;HDR=No;"";"
End If
'copi donnée
Set ADOCommand = New ADODB.Command
Set ADORecord = New ADODB.Recordset
ADOCommand.ActiveConnection = ADOConnect
ADOCommand.CommandText = TextSQL
ADORecord.Open ADOCommand, , adOpenKeyset, adLockOptimistic
ADORecord(0).Value = Sheets(FeuilSource$).Range(RangSource$)
ADORecord.Update
'fermeture
ADOConnect.Close
Set ADOConnect = Nothing: Set ADOCommand = Nothing: Set ADORecord = Nothing
End Sub