Recherche emplacement fichier
Bonjour à toutes et tous,
Pour vous mettre dans le cotexte j'utilise deux fichiers Excel. Le fichier 1 me permet de traiter les données du fichier 2, or je réalise des copies du fichier 1 pour traiter chaque projet. Le nom du fichier 2 est variable et n'aura jamais la même tram de nom, il faudrait récupérer l'emplacement du fichier 2 pour permettre d'extraire les données nécessaires dans le fichier 1. Le point bloquant pour moi et le fait que je sais me servir des requêtes mais uniquement avec une base de données fixe tandis que dans ce cas la base de donnée changera en fonction du projet. Pour le moment j'extrait les valeurs nécessaires avec un code VBA mais celui-ci ne fonctionne que si le fichier 2 à le même nom (ce qui ne sera pas le cas).
PS: Par soucis de confidentialité je n'ai pas encore de fichier anonyme.
Je vous remercie d'avoir lu,
Belle journée à vous.
Bonjour Justin19
Est-ce qu'au moins le fichier 2 à un préfixe commun
A+
Bonjour JExceL2fr,
Je n'ai pas la main sur le nom du fichier 2 c'est un fichier que je recevrais de personnes extérieure, mais si je le renommé pour avoir toujours FOE-031 au début cela pourrait fonctionner?
Et dans tout les cas je ne sais pas comment faire pour retrouver un fichier excel avec du code ^^'.
Merci d'avance
Bonjour,
est ce que tu as essayé de le mettre dans un dossier spécifique et d'utiliser A partir d'un dossier ?
Cordialement
Re,
Quand vous parler de retrouver, qu'est-ce que vous entendez par là !?
Si vous ne connaissez pas le nom, vous ne pourrez jamais retrouver quoique ce soit
Si vous mettez "FOE-031" au début du nom, c'est mieux
A+
Comment ça dans un dossier spécifique?
Le fichier 2 qui sert de base de données m'est transmis et cette base est enregistrée dans un sous-dossier du projet.
Le fichier 1 quand à lui j'en fait une copie dans un autre sous-dossier du projet.
Donc le chemin du fichier 1 et fichier 2 sont identique excepté le dernier dossier
Ce que j'entend pas retrouver c'est récupérer le nom du fichier tout en connaissant plus des 3/4 du chemin ou il est enregistrer car comme expliqué précédemment je ne contrôle pas le nom. (En théorie je pourrais mais si je peux éviter de renommer à chaque fois les fichiers c'est mieux).
Re,
Bon alors voilà un exemple (dixit ChatGPT)
Sub RechercherFichier()
Dim dossierDebut As String
dossierDebut = "C:\Chemin\Vers\Dossier" ' Remplacez par le chemin de départ
Dim fichierTrouve As String
fichierTrouve = RechercherFichierDansDossier(dossierDebut, "FOE-031")
If fichierTrouve <> "" Then
MsgBox "Fichier trouvé : " & fichierTrouve
Else
MsgBox "Aucun fichier trouvé commençant par FOE-031."
End If
End Sub
Function RechercherFichierDansDossier(dossier As String, prefixe As String) As String
Dim fso As Object
Dim dossierCourant As Object
Dim sousDossier As Object
Dim fichier As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossierCourant = fso.GetFolder(dossier)
' Parcourir tous les fichiers du dossier courant
For Each fichier In dossierCourant.Files
If fichier.Name Like prefixe & "*" Then
RechercherFichierDansDossier = fichier.Path
Exit Function
End If
Next fichier
' Parcourir tous les sous-dossiers du dossier courant
For Each sousDossier In dossierCourant.Subfolders
RechercherFichierDansDossier = RechercherFichierDansDossier(sousDossier.Path, prefixe)
If RechercherFichierDansDossier <> "" Then Exit Function
Next sousDossier
RechercherFichierDansDossier = ""
End FunctionA+
bonjour le fil,
et si vous utilisez "Getopenfilename" pour choisir le fichier, si le choix automatique est impossible ?
Merci pour toutes vos réponses je vais prendre le temps de toutes les étudiés afin d'avoir ce qui me correspond le mieux.
Et encore merci à vous
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 SubOr 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.
