Copier le contenu d’un objet Recordset directement dans un array
Bonsoir,
Je dois récupérer des données qui se trouvent dans plusieurs fichiers csv. Je souhaiterai pouvoir nettoyer celles-ci dans un tableau avant de les intégrer dans une feuille ou mieux de ne sélectionner que les données pertinentes.
Code:
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
Sub R12()
Dim rep As String
txt = "[F.CSV]" & vbCrLf & "Format=Delimited(;)"
rep = "C:\Users\ericm\Documents\Eric\TRAITE"
If rep = "" Then Exit Sub
Set Cn = CreateObject("ADODB.Connection"): Cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & rep & ";Extended Properties=""Text;HDR=YES;FMT=Delimited;"";")
With Sheets(1)
tbls = TableToutes
If TypeName(tbls) = "Variant()" Then
For i = 0 To UBound(tbls, 2)
Importer rep, .Cells(.Cells.Rows.Count, "A").End(xlUp).Offset(1), CStr(tbls(2, i)), True
Next
End If
End With
End Sub
Sub Importer(Repertoire As String, Destination As Range, Table As String, Entete As Boolean)
With Cn
If Table <> "" Then
NewFichierTxt Repertoire & "\schema.ini", Replace(txt, "F.CSV", Replace(Table, "#", "."))
If TableExiste(Table) Then Destination.CopyFromRecordset .Execute("SELECT * FROM [" & Table & "]")
Kill Repertoire & "\schema.ini"
End If
End With
End Sub
Public Property Get PremiereTableAdo() As String
With Cn.OpenSchema(20)
If Not .EOF Then
PremiereTableAdo = .Fields("TABLE_NAME")
End If
.Close
End With
End Property
Public Property Get TableExiste(TableName As String) As Boolean
With Cn.OpenSchema(20)
If Not .EOF Then
.Filter = "TABLE_NAME ='" & TableName & "'"
TableExiste = Not .EOF
End If
.Close
End With
End Property
Public Property Get TableToutes()
TableToutes = False
With Cn.OpenSchema(20)
If Not .EOF Then
TableToutes = .getrows
End If
.Close
End With
End Property
Private Sub NewFichierTxt(Fichier, txt)
Dim fso, NewFichier
Set fso = CreateObject("Scripting.FileSystemObject")
Set NewFichier = fso.OpenTextFile(Fichier, 2, True)
NewFichier.Write txt
NewFichier.Close
Set NewFichier = Nothing
Set fso = Nothing
End Sub |
Je pense que la solution se trouve au niveau de la ligne 40 du code ci-dessus.
Je voudrais que le recordset s'enregistre dans un tableau plutôt que dans un range.
Merci pour votre aide.
Eric