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

Bonjour à tous,

Voici un petit code sympathique pour sélectionner un fichier et mettre le chemin d'accès dans une cellule.

Et ici, le lien vers le fichier

Avant d'ajouter le code, il faut nommer la cellule stockant le nom du fichier.

choix-du-fichier

Ca ressemble à 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'utilise ce petit code pour importer des fichiers pour traitement, comparaison, etc.

A bientôt.

Gaetan

En cadeau de bienvenue : les 7 combinaisons de touches indispensables 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 connait pas .filedialog

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

    Merci de ton aide

  2. Gaetan a écrit:

    Bonjour,
    Je n’utilise pas Visio, mais peut être ceci :
    http://visguy.com/vgforum/index.php?topic=738.0

    ‘// Module: OpenExcelFile
    ‘//
    ‘// This is code that uses the Windows API to invoke the Open File
    ‘// common dialog. It is used by users to choose an Excel file that
    ‘// contains organizational data.

    Private Declare PtrSafe Function GetOpenFileName Lib « comdlg32.dll » _
    Alias « GetOpenFileNameA » (OFN As OPENFILENAME) As Boolean

    Private Type OPENFILENAME
    lStructSize As Long
    hwndOwner As LongPtr
    hInstance As LongPtr
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As LongPtr
    lpTemplateName As String
    End Type

    Public Sub FindExcelFile(ByRef filePath As String, _
    ByRef cancelled As Boolean)

    Dim OpenFile As OPENFILENAME
    Dim lReturn As Long
    Dim sFilter As String

    ‘ On Error GoTo errTrap

    OpenFile.lStructSize = LenB(OpenFile)

    ‘// Sample filter:
    ‘// « Text Files (*.txt) » & Chr$(0) & « *.sky » & Chr$(0) & « All Files (*.*) » & Chr$(0) & « *.* »
    sFilter = « Excel Files (*.xl*) » & Chr(0) & « *.xl* »

    OpenFile.lpstrFilter = sFilter
    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
    lReturn = GetOpenFileName(OpenFile)

    If lReturn = 0 Then
    cancelled = True
    filePath = vbNullString
    Else
    cancelled = False
    filePath = Trim(OpenFile.lpstrFile)
    filePath = Replace(filePath, Chr(0), vbNullString)
    End If

    Exit Sub

    errTrap:
    Exit Sub
    Resume

    End Sub

  3. GilH94 a écrit:

    Parfait.Merci

  4. Aurore a écrit:

    Bonjour,
    Merci pour l’astuce !
    C’est possible de sélectionner un fichier dans un formulaire, en double cliquant sur le champ par exemple et d’y faire apparaître le chemin dans le champ où on a double cliq ?

  5. Gaetan Mourmant a écrit:

    Bonjour Aurore,
    il faudrait préciser la question, mais ca doit être possible.
    Vous pouvez m’envoyer le fichier par email et je peux y jeter un oeil si ca n’est pas confidentiel.
    Cordialement

  6. Aurore a écrit:

    Bonjour Gaëtan,

    J’ai réussi ! J’ai utilisé votre procédure en remplaçant range par le nom du formulaire. Merci beaucoup !!

    Par contre, j’ai une autre question. Au lieu de récupérer le chemin, est-ce possible de récupérer uniquement le nom du fichier ?

    Mon document n’est pas confidentiel.

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

  8. Gaetan Mourmant a écrit:

    Bonjour,
    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/
    Merci pour votre question.
    Gaetan

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.