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 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
Sub RecupValeurs()
Dim ConnectCL As Object
Dim Rs As Object
Dim TblFichiers() As String
Dim Tableau
Dim TblSplit
Dim Chemin As String
Dim I As Integer
Dim J As Integer
Dim K As Integer
Dim L As Integer
'ADAPTER le chemin du dossier...
Chemin = "E:\"
'appel de la fonction pour récupérer les noms des fichiers .csv
TblFichiers = EnumFichiers(Chemin, ".csv")
'si initialisé (au moins 1 classeur)
If Not (Not TblFichiers) Then
'boucle sur le tableau
For L = 1 To UBound(TblFichiers)
'se connecte au classeur
ConnectCLasseur ConnectCL, Chemin, Rs, False
With Rs
'récupère les valeurs...
.CursorType = 1
.LockType = 3
.Open "SELECT * FROM " & TblFichiers(L), ConnectCL
.MoveFirst
'redimensionne le tableau aux nombre d'enregistrements et aux nombre de champs, adapter le séparateur (ici, le point virgule)
ReDim Tableau(1 To .RecordCount, 1 To UBound(Split(.Fields(0).Value, ";")) + 1)
Do While Not .EOF
'splite l'enregistrement, adapter le séparateur (ici, le point virgule)
TblSplit = Split(.Fields(0).Value, ";")
I = I + 1
'tranfère chaque valeur dans le tableau
For K = 0 To UBound(TblSplit): J = J + 1: Tableau(I, J) = TblSplit(K): Next K
J = 0
.MoveNext
Loop
I = 0
End With
With ThisWorkbook
'si pas assez de feuilles, ajoute à fur et à mesure
If .Worksheets.Count < L Then .Worksheets.Add , .Worksheets(.Worksheets.Count)
'colle les valeurs dans la feuille en cours à partir de A1
With .Worksheets(L)
.Range(.Cells(1, 1), .Cells(UBound(Tableau, 1) - 1 + DerCel, UBound(Tableau, 2))).Value = Tableau
End With
End With
'ferme la connexion
ConnectCL.Close
Next L
End If
End Sub
Private Sub ConnectCLasseur(ConnectCL As Object, _
Fichier As String, _
Optional Rs, _
Optional Entetes As Boolean = False)
Dim HDR As String
Set ConnectCL = CreateObject("ADODB.Connection")
If Not IsMissing(Rs) Then Set Rs = CreateObject("ADODB.Recordset")
If Entetes = False Then HDR = "NO" Else HDR = "YES"
ConnectCL.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";" & _
"Extended Properties=""text; HDR=" & HDR & "; FMT=Delimited; IMEX=1;""")
End Sub
Function EnumFichiers(Chemin As String, Extension As String) As String()
Dim TableauFichiers() As String
Dim Fichier As String
Dim I As Integer
'complète le chemin le cas échéant
If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
'récupère seulement les fichiers Excel
Fichier = Dir(Chemin & "*" & Extension & "*")
'boucle sur les fichiers du dossier
Do While (Len(Fichier) > 0)
I = I + 1
ReDim Preserve TableauFichiers(1 To I)
TableauFichiers(I) = Fichier
Fichier = Dir()
Loop
'retourne le tableau des noms de fichiers
EnumFichiers = TableauFichiers()
End Function |
Partager