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 sinon comment voulez-vous

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

JExceL2fr,

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 Function

A+

bonjour le fil,

et si vous utilisez "Getopenfilename" pour choisir le fichier, si le choix automatique est impossible ?

https://www.xelplus.com/excel-vba-getopenfilename/

Re,

image

Cela permet de récupérer tous les fichiers contenus dans le dossier choisi.

Je ne sais pas si cela correspond à ton besoin.

Cordialement

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 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.

Rechercher des sujets similaires à "recherche emplacement fichier"