ADO - Simplification code

bloublou

XLDnaute Occasionnel
Bonjour à tous,

J'utilise ADO connection pour importer des données à partir de classeurs fermés.
Je réalise juste un copier coller de lignes.

Je voudrais savoir si on pouvait simplifier le code qui est devenu très lourd.
Pour chaque fichier source j'utilise ce code, sachant que j'en ai une vingtaine. Cela me fait répéter 20 blocs comme celui - ci :

Sub TEST()
Dim Source As Object, Requete As Object
Dim Onglet As String, Plage As String, fichier As String
Dim Texte_SQL As String

'***********************************************************************************
'******************** IMPORT ****************************************************
'***********************************************************************************

'détermination de la plage à extraire
fichier = "chemin + nom du fichier"
Onglet = "TOTO" '
Plage = "A1:F250"

'connexion ADO
Set Source = CreateObject("ADODB.Connection")
Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"data source=" & fichier & ";Extended Properties=""Excel 12.0;HDR=No;"";"

'exerce la requete ADO sur les donnée à recopier
Texte_SQL = "SELECT * FROM [" & Onglet & "$" & Plage & "]"
Set Requete = CreateObject("ADODB.Recordset")
Set Requete = Source.Execute(Texte_SQL)

'restitue sur ton classeur
Cells(Rows.Count, 1).End(xlUp)(2).CopyFromRecordset Requete '(merci à Hasco)


'libère les pointeurs
Set Requete = Nothing
Set Source = Nothing


End Sub

J'aimerai savoir si on pouvait simplifier ce code en mettant le nom des fichiers les uns à la suite des autres
ou le simplifier d'une autre manière que je n'ai pas à copier coller ce bloc d'instructions 20 fois ? :eek:

Merci beaucoup de votre aide,

BlouBlou
 
G

Guest

Guest
Re : ADO - Simplification code

Bonjour,

une possibilité:
Code:
Sub Traitement()
   'Appel de la macro TEST avec ses paramètres
   TEST "fichier1", "onglet1", "A1:H54"
   TEST "fichier2", "onglet2", "G34:AB1025"
End Sub

Sub TEST(Fichier As String, Onglet As String, Plage As String)
Dim Source As Object, Requete As Object
Dim Onglet As String, Plage As String, Fichier As String
Dim Texte_SQL As String
'************************************************* **********************************
'******************** IMPORT ************************************************** **
'************************************************* **********************************
'Vérification de l'existence du fichier
If Dir(Fichier) = "" Then
    MsgBox "Fichier introuvable!" & vbCrLf & Fichier, vbExclamation, "Test"
    Exit Sub
End If
'connexion ADO
Set Source = CreateObject("ADODB.Connection")
Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"data source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=No;"";"
'exerce la requete ADO sur les donnée à recopier
Texte_SQL = "SELECT * FROM [" & Onglet & "$" & Plage & "]"
Set Requete = CreateObject("ADODB.Recordset")
Set Requete = Source.Execute(Texte_SQL)
'restitue sur ton classeur
Cells(Rows.Count, 1).End(xlUp)(2).CopyFromRecordset Requete '(merci à Hasco)

'libère les pointeurs
Set Requete = Nothing
Set Source = Nothing

End Sub

P.S. on peut aussi mettre les paramètres dans une feuille de calcul et les récupérer à cette endroit. Par contre il serait préférable d'indiquer également le nom de la feuille de destination.

A+
 

Statistiques des forums

Discussions
314 450
Messages
2 109 721
Membres
110 551
dernier inscrit
Khyolyanna