Bonjour,
J'ai un ensemble de fichiers .csv dans un dossier (300 fichiers). Ils ont tous la même structure. Je cherche à récupérer les 2 premières lignes de chaque fichier. Etant donné que ces fichiers ont été enregistrés en .csv, le nom de la feuille a pris le nom du fichier....
J'ai donc d'abord fait une boucle pour lister les fichiers en faisant (merci JB pour tes très bons tutos...)
je cherche maintenant à lister en B, le nom des feuilles. cela me permettra ensuite d'adapter le code de Silkyroad, en mettant le "bon" nom de fichier et le "bon" nom de la feuille:
Mais j'ai un problème pour récupérer le nom de la feuille, j'ai essayé le code de JB (au passage, j'ai modifié "x.xls" par "x.csv":
Mais le code bloque en disant "MAJ impossible, la base de données ou l'objet est en lecture seule"...alors que tout est fermé.....
Donc, je ne comprends pas....
merci pour votre aide,
J'ai un ensemble de fichiers .csv dans un dossier (300 fichiers). Ils ont tous la même structure. Je cherche à récupérer les 2 premières lignes de chaque fichier. Etant donné que ces fichiers ont été enregistrés en .csv, le nom de la feuille a pris le nom du fichier....
J'ai donc d'abord fait une boucle pour lister les fichiers en faisant (merci JB pour tes très bons tutos...)
Code:
Sub ListeFichiers()
Application.ScreenUpdating = False
Range("A2:D65000").ClearContents
repertoire = ThisWorkbook.Path & "\" ' adapter
[H2] = repertoire
ligne = 2
nf = Dir(repertoire & "*.*") 'premier fichier xls
Do While nf <> ""
Cells(ligne, 1) = nf
Cells(ligne + 1, 1) = nf
ligne = ligne + 2
nf = Dir ' suivant
Loop
End Sub
Code:
Sub extractionValeurCelluleClasseurFerme()
Dim Source As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim ADOCommand As ADODB.Command
Dim Fichier As String, Cellule As String, Feuille As String
'Adresse de la cellule contenant la donnée à récupérer
Cellule = "B4:B4"
'Pour une plage de cellules, utilisez:
'Cellule = "A4:C10"
Feuille = "Feuil1$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
'Chemin complet du classeur fermé
Fichier = "C:\Base.xls"
Set Source = New ADODB.Connection
Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
Set ADOCommand = New ADODB.Command
With ADOCommand
.ActiveConnection = Source
.CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
End With
Set Rst = New ADODB.Recordset
Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
Range("A2").CopyFromRecordset Rst
Rst.Close
Source.Close
Set Source = Nothing
Set Rst = Nothing
Set ADOCommand = Nothing
End Sub
Mais j'ai un problème pour récupérer le nom de la feuille, j'ai essayé le code de JB (au passage, j'ai modifié "x.xls" par "x.csv":
Code:
Sub ListeFeuilles()
'Microsoft ActiveX DataObject doit être coché
répertoire = ThisWorkbook.Path & "\" ' adapter
Fichier = "x.csv"
Set cnn = CreateObject("ADODB.Connection")
Set cata = CreateObject("ADOX.Catalog")
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & répertoire & Fichier & ";Extended Properties=Excel 8.0;"
Set cata.ActiveConnection = cnn
i = 2
For Each t In cata.Tables
If Right(t.Name, 1) = "$" Then
Sheets(1).Cells(i, 1) = Replace(Replace(t.Name, "$", ""), "'", "")
i = i + 1
End If
Next t
cnn.Close
Set cata = Nothing
Set cnn = Nothing
End Sub
Donc, je ne comprends pas....
merci pour votre aide,