Importer le fichier .csv le plus recent d'un dossier
Bien le bonjour à tous,
Je me lance enfin dans les macros sur excel (depuis 2 jours, donc vraiment tout nouveau) et je tâtonne. Mon projet du moment est de créer un fichier qui suit mes compte. J'aurais besoin de récupérer les données d'une feuille csv (séparées par des ';'). J'ai pour cela récupéré des bouts de codes à droite a gauche, que je ne comprends pas entièrement. Mais qui individuellement fonctionne pour :
1) trouver dans mon dossier le fichier le plus récent (cela fonctionne car la msgbox m'affiche le bon)
2) avec un enregistrement de macro j'ai réussi à importer un fichier donné (mais j'aimerais que le nom du fichier soit une variable, celui issu de la partie précédente, en l’occurrence le fichier .csv le plus récent du dossier) et à le mettre à l'endroit que je veux (dans la bonne feuille, sur la bonne cellule
3) supprimer les requêtes pour éviter que ca plante durant mes test et supprimer les lignes qui ne m’intéressent pas dans les données récupérées.
Cependant impossible pour mon mini niveau de faire tout tenir ensemble : c'est à dire que le fichier récupéré soit le fichier le plus récent. Les endroits avec les ??????? sont les endroits ou je sens qu'il faut que je change des trucs puis que ce sont les endroits ou le nom de mon fichier importé lors de l'enregistrement de la macro etait présent. Et vu que je veux que le fichier change, je pense que ce sont les endroits ou je dois changer les choses
Sub macro_test_import_récent()
'nettoyer_feuille_import Macro
Sheets("Import banque").Select
Cells.Select
Selection.ClearContents
Range("A1").Select
'identifier le fichier le plus recent
Dim monrep As String, monfic As String, derdate As Date, ledernier As String
monrep = "C:\Users\kkkkk\Desktop\Gestion comptes\Fichier banque\"
monfic = Dir(monrep & "*.csv")
derdate = DateSerial(1, 1, 1)
Do While monfic <> ""
If FileDateTime(monrep & monfic) > derdate Then
ledernier = monrep & monfic
derdate = FileDateTime(monrep & monfic)
End If
monfic = Dir
Loop
'importer
Range("A1").Select
ActiveWorkbook.Queries.Add Name:="??????????????", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Csv.Document(File.Contents(""???????????????""),[Delimiter="";"", Columns=3, Encoding=1252, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & " #""Type modifié"" = Table.TransformColumnTypes(Source,{{""Column1"", type text}, {""Column2"", type text}, {""Column3"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Type modifié"""
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=????????????????????;Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [?????????????????]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "??????????????????"
.Refresh BackgroundQuery:=False
End With
'delete les requetes existantes
Dim cn As WorkbookConnection, qry As WorkbookQuery
On Error Resume Next
For Each cn In ActiveWorkbook.Connections
cn.Delete
Next cn
For Each qry In ActiveWorkbook.Queries
qry.Delete
Next qry
End SubMerci beaucoup de m'avoir lu.
Bonjour
Ecrire une requête POwerQuery depuis VBA est une absurdité nécessitant une bonne dose de masochisme...
Powerquery est capable seul de trouver le dernier fichier d'un dossier, de le traiter et restituer...
6 clics suffisent...