Trouver un fichier VBA Excel

[Résolu/Fermé]
Signaler
-
Messages postés
16513
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
17 septembre 2021
-
Bonjour,

j'ai un formulaire excel et j'aimerais que l'utilisateur puisse rechercher un fichier afin d'utiliser l'emplacement du fichier dans le fichier excel.

Je ne sais pas si je suis clair.
Mais il y'aurais un menu comme lorsqu'on veut ouvrir un fichier. Mais ici, il selectionnerait le fichier en naviguant au travers des dossiers, puis on récupérerait l'emplacement du fichier pour l'utiliser dans Excel.


Merci.

4 réponses

Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 644
Salut,
Tu peux adapter la fonction SelectionFichier() trouvée dans cette astuce, comme ceci :

Sub SelectionFichier()
Dim nomfich As String, i As Integer
    nomfich = Application.GetOpenFilename(FileFilter:="(*.*),*.*" _
            , Title:="Sélectionnez le fichier à convertir")
    If nomfich = "Faux" Then 'pas de sélection faite
        Exit Sub
    End If
    For i = Len(nomfich) To 2 Step -1
        If Mid(nomfich, i, 1) = "" Then Exit For
    Next i
    Chemin = Left(nomfich, i)
    Fichier = Mid(nomfich, i + 1)
    MsgBox Chemin & " " & Fichier
End Sub
Ca fonctionne très bien!

Par contre, est-il possible de seulement récupérer le nom du fichier?

Car ça me donne l'emplacement entier. Par exemple : c:\blabla\fichier.doc

Or, je voudrais juste avoir le "fichier.doc"

Car le fichier est destiné à être envoyé et vu que les dossiers varient d'un pc à l'autre...
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 644
Bien sur, en manipulant un peu le code et la chaîne de caractère tu peux faire :

Sub SelectionFichier()
Dim nomfich As String, i As Integer
    nomfich = Application.GetOpenFilename(FileFilter:="(*.*),*.*" _
            , Title:="Sélectionnez le fichier à convertir")
    If nomfich = "Faux" Then 'pas de sélection faite
        Exit Sub
    End If
    For i = Len(nomfich) To 2 Step -1
        If Mid(nomfich, i, 1) = "\" Then Exit For
    Next i
    nomfich = Right(nomfich, Len(nomfich) - i)
    
    MsgBox nomfich
End Sub
Un grand merci \o/

Vraiment!
Messages postés
16513
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
17 septembre 2021
3 221
bonjour,
a la bourre mais
la boucle est inutile dans ce cas

Dim nomfich As String, i As Integer
    nomfich = Application.GetOpenFilename(FileFilter:="(*.*),*.*" _
            , Title:="Sélectionnez le fichier à convertir")
    If nomfich = "Faux" Then 'pas de sélection faite
        Exit Sub
    End If
    tablo = Split(nomfich, "\")
    nomfich = tablo(UBound(tablo))


attention quand m^me aux astuces ccm...
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 644
Salut,
merci du coup de main. 'Fectivement, pas besoin de boucle et ta proposition est claire.
Par contre en ce qui concerne cette astuce, la provenance de Lermitte222 est un gage de qualité, en tout cas, il me semble.
A +
Messages postés
16513
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
17 septembre 2021
3 221
Et pour rester dans la m^me technique pour extraire le chemin seul (il y a d'autres manières mais...)
Dim nomfich As String, chemin As String
Dim tablo
    nomfich = Application.GetOpenFilename(FileFilter:="(*.*),*.*" _
            , Title:="Sélectionnez le fichier à convertir")
    If nomfich = "Faux" Then 'pas de sélection faite
        Exit Sub
    End If
    tablo = Split(nomfich, "\")
    nomfich = tablo(UBound(tablo))
    ReDim Preserve tablo(UBound(tablo) - 1)
    chemin = Join(tablo, "\")


ma réflexion sur les astuces ne concernait pas la qualité de l'auteur mais un code pouvant être amélioré comme souvent dans cette rubrique et comme souvent dans ceux que je propose