Bonjour à tous,
J'ai étudier toutes vos propositions et j'ai fait un mixte de certaines. Pour le moment j'ai fait le code suivant:
Sub Requête()
' Requête Macro
Dim Fichier As String
Dim FeuilleExistante As Worksheet
Dim NomFeuille As String
Dim QueryFormula As String
' Lire le chemin du fichier depuis la cellule B2
Fichier = Range("B2").Value
' Nom de la feuille existante dans laquelle vous souhaitez écrire les données
NomFeuille = "Feuil1" ' Remplacez par le nom réel de votre feuille
' Vérifier si la feuille existe
On Error Resume Next
Set FeuilleExistante = Worksheets(NomFeuille)
On Error GoTo 0
If FeuilleExistante Is Nothing Then
MsgBox "La feuille '" & NomFeuille & "' n'existe pas.", vbExclamation
Exit Sub
End If
' Création de la requête Power Query avec un chemin dynamique
QueryFormula = _
"let" & vbCrLf & _
" Source = Excel.Workbook(File.Contents(""" & Fichier & """))," & vbCrLf & _
" Résumé_Sheet = Source{[Item=""Résumé"",Kind=""Sheet""]}[Data]," & vbCrLf & _
" #""Type modifié"" = Table.TransformColumnTypes(Résumé_Sheet,{{""Column1"", type logical}, {""Column2"", type any}, {""Column3"", type text}, {""Column4"", type any}, {""Column5"", type any}, {""Column6"", type any}, {""Column7"", type any}, {""Column8"", type text}, {""Column9"", type any}, {""Column10"", type any}})" & vbCrLf & _
"in" & vbCrLf & _
" #""Type modifié"""
' Supprimer la requête précédente si elle existe
On Error Resume Next
ActiveWorkbook.Queries("Résumé").Delete
On Error GoTo 0
' Ajouter une nouvelle requête Power Query
ActiveWorkbook.Queries.Add Name:="Résumé", Formula:=QueryFormula
' Ajouter ou actualiser la Table dans la feuille existante
With FeuilleExistante.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Résumé;Extended Properties=""""" _
, Destination:=FeuilleExistante.Range("$D$7")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Résumé]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = False
.ListObject.DisplayName = "Résumé"
.Refresh BackgroundQuery:=False
End With
End Sub
Or je voudrait savoir si je pouvais grâce à la même base du code récupérer uniquement un tableau qui est présent sur la base de données. Juste histoire que cela soit un peut plus présentable.
Belle journée à vous
PS: Mon code n'est sûrement pas optimisé et peu être améliorer mais compte tenu de son bon fonctionnement je ne souhaite pas avec des modifications dans ce sens.