VBA : Sélectionner un fichier et mettre le chemin dans une cellule

Bon­jour à tous,

Voici un petit code sym­pa­thique pour sélec­tion­ner un fichi­er et met­tre le chemin d’ac­cès dans une cel­lule.

Et ici, le lien vers le fichi­er

Avant d’a­jouter le code, il faut nom­mer la cel­lule stock­ant le nom du fichi­er.

choix-du-fichier

Ca ressem­ble à ceci :


Sub choix_fichiers()
'cette macro permet de reprendre le nom du fichier et de le mettre dans la plage nommée
Dim fichier As String
With Application.FileDialog(msoFileDialogFilePicker)
.Show
On Error Resume Next
fichier = .SelectedItems.Item(1)
On Error GoTo 0
End With
If fichier > "" Then Range("Nom_du_fichier").Value = fichier
End Sub

J’u­tilise ce petit code pour importer des fichiers pour traite­ment, com­para­i­son, etc.

A bien­tôt.

Gae­tan

En cadeau de bien­v­enue : les 7 com­bi­naisons de touch­es indis­pens­ables sur Excel
Pour marque-pages : permalien.

8 réactions à VBA : Sélectionner un fichier et mettre le chemin dans une cellule

  1. olivier a écrit:

    super ca marche tres bien sur excell mais pas sur vision

    visio ne con­nait pas .file­di­a­log

    est ce que tu sais ce que je dois activé?

    Mer­ci de ton aide

  2. Gaetan a écrit:

    Bon­jour,
    Je n’u­tilise pas Visio, mais peut être ceci :
    http://visguy.com/vgforum/index.php?topic=738.0

    ‘// Mod­ule: OpenEx­celFile
    ‘//
    ‘// This is code that uses the Win­dows API to invoke the Open File
    ‘// com­mon dia­log. It is used by users to choose an Excel file that
    ‘// con­tains orga­ni­za­tion­al data.

    Pri­vate Declare Ptr­Safe Func­tion GetOpen­File­Name Lib “comdlg32.dll” _
    Alias “GetOpen­File­NameA” (OFN As OPENFILENAME) As Boolean

    Pri­vate Type OPENFILENAME
    lStruct­Size As Long
    hwn­dOwn­er As Long­P­tr
    hIn­stance As Long­P­tr
    lpstr­Fil­ter As String
    lpstr­Cus­tom­Fil­ter As String
    nMax­Cust­Fil­ter As Long
    nFil­terIndex As Long
    lpstr­File As String
    nMax­File As Long
    lpstr­FileTi­tle As String
    nMax­FileTi­tle As Long
    lpstrIni­tialDir As String
    lpstr­Ti­tle As String
    flags As Long
    nFile­Off­set As Inte­ger
    nFile­Ex­ten­sion As Inte­ger
    lpstrDe­fExt As String
    lCust­Da­ta As Long
    lpfn­Hook As Long­P­tr
    lpTem­plate­Name As String
    End Type

    Pub­lic Sub FindExcelFile(ByRef filePath As String, _
    ByRef can­celled As Boolean)

    Dim Open­File As OPENFILENAME
    Dim lRe­turn As Long
    Dim sFil­ter As String

    ’ On Error GoTo errTrap

    OpenFile.lStructSize = LenB(OpenFile)

    ‘// Sam­ple fil­ter:
    ‘// “Text Files (*.txt)” & Chr$(0) & “*.sky” & Chr$(0) & “All Files (*.*)” & Chr$(0) & “*.*”
    sFil­ter = “Excel Files (*.xl*)” & Chr(0) & “*.xl*”

    OpenFile.lpstrFilter = sFil­ter
    OpenFile.nFilterIndex = 1
    OpenFile.lpstrFile = String(257, 0)
    OpenFile.nMaxFile = Len(OpenFile.lpstrFile) — 1
    OpenFile.lpstrFileTitle = OpenFile.lpstrFile
    OpenFile.nMaxFileTitle = OpenFile.nMaxFile
    OpenFile.lpstrInitialDir = ThisDocument.Path

    OpenFile.lpstrTitle = “Find Excel Data Source”
    OpenFile.flags = 0
    lRe­turn = GetOpenFileName(OpenFile)

    If lRe­turn = 0 Then
    can­celled = True
    filePath = vbNull­String
    Else
    can­celled = False
    filePath = Trim(OpenFile.lpstrFile)
    filePath = Replace(filePath, Chr(0), vbNull­String)
    End If

    Exit Sub

    errTrap:
    Exit Sub
    Resume

    End Sub

  3. GilH94 a écrit:

    Parfait.Merci

  4. Aurore a écrit:

    Bon­jour,
    Mer­ci pour l’as­tuce !
    C’est pos­si­ble de sélec­tion­ner un fichi­er dans un for­mu­laire, en dou­ble cli­quant sur le champ par exem­ple et d’y faire appa­raître le chemin dans le champ où on a dou­ble cliq ?

  5. Gaetan Mourmant a écrit:

    Bon­jour Aurore,
    il faudrait pré­cis­er la ques­tion, mais ca doit être pos­si­ble.
    Vous pou­vez m’en­voy­er le fichi­er par email et je peux y jeter un oeil si ca n’est pas con­fi­den­tiel.
    Cor­diale­ment

  6. Aurore a écrit:

    Bon­jour Gaë­tan,

    J’ai réus­si ! J’ai util­isé votre procé­dure en rem­plaçant range par le nom du for­mu­laire. Mer­ci beau­coup !!

    Par con­tre, j’ai une autre ques­tion. Au lieu de récupér­er le chemin, est-ce pos­si­ble de récupér­er unique­ment le nom du fichi­er ?

    Mon doc­u­ment n’est pas con­fi­den­tiel.

  7. Pingback:Excel VBA – Rapatrier les informations d’un fichier (chemin/emplacement et nom) - XLérateur

  8. Gaetan Mourmant a écrit:

    Bon­jour,
    Voici la réponse courte :
    Right(fichier , Len(fichier ) — InStrRev(fichier , “\”))
    Et la réponse “longue” :
    http://www.xlerateur.com/vba-excel/2018/07/24/excel-vba-rapatrier-les-informations-dun-fichier-chemin-emplacement-et-nom-7225/
    Mer­ci pour votre ques­tion.
    Gae­tan

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.