Requète pour importer un fichier .ini
Hello !
J'essaie actuellement d'importer un fichier ini via vba.
Je me suis inspiré de l'assistant macro, mais manifestement je me suis loupé
L'idée est d'importer des fichiers .ini pour pouvoir les modifier via Excel avant de les ré-enregistrer. Le nom du fichier et son chemin se trouvent dans deux cellules respectives (B1 et B2) à remplir par l'opérateur.
Sub lecture()
'Charger la librairie Microsoft DAO 3.6 Object Library pour QueryDef
Call Nettoyage_requetes
Dim chemin$, nom$, CONFIG_FILE$, nompur$
Dim qry As DAO.QueryDef
ThisWorkbook.Sheets("Edition").Select
With ThisWorkbook.Sheets("Configuration")
chemin = .Range("B1").Value
If Var = Right(chemin, 1) <> "\" Then
chemin = chemin & "\"
End If
nom = .Range("B2").Value
If Var = Right(nom, 4) <> ".ini" Then
nom = nom & ".ini"
End If
nompur = Left(nom, Len(nom) - 4)
End With
CONFIG_FILE = chemin & nom
ActiveWorkbook.Queries.Add Name:=nompur, Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Csv.Document(File.Contents(CONFIG_FILE),[Delimiter=""="", Columns=2, Encoding=1252])," & Chr(13) & "" & Chr(10) & " #""Type modifié"" = Table.TransformColumnTypes(Source,{{""Column1"", type text}, {""Column2"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Type modifié"""
With ThisWorkbook.Sheets("Edition").ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=nompur" _
, Destination:=ThisWorkbook.Sheets("Edition").Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [nompur]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "larequete"
.Refresh BackgroundQuery:=False
End With
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=FalseL'erreur est sur les 2 dernière ligne (.Refresh).
Le Call Nettoyage appelle un sub chargé de dégager les précédentes requêtes (et fonctionne bien).
Ci-joint un fichier .ini pour exemple.