Récuperer le nom d'un fichier à partir de Application.FileDialog(msoFileDialogOpen)

oasis2k

XLDnaute Nouveau
Bonjour

Tout est dit dans le titre, comment récupérer le nom du fichier ouvert à partir d'une commande de type Application.FileDialog(msoFileDialogOpen).show ?

Je souhaite traiter un fichier (exemple toto.csv dans le repertoire c:\mondossier\test). le nom de se fichier va changer, ainsi que le dossier dans lequel il est. Le code permettant de traiter le fichier est ok (j'utilise une query table et je souhaite conserver ce code), mais je n'arrive pas à placer dans une variable "fichier" le nom du fichier ouvert. J'ai récupéré le nom du chemin du dossier.

Pour le moment, j'ai écris:
Code:
Application.FileDialog(msoFileDialogOpen).Show
  Repertoire = Application.FileDialog(msoFileDialogOpen).InitialFileName
  MsgBox Repertoire

If Right(Repertoire, 1) <> "\" Then Repertoire = Repertoire & "\"

Fichier = "toto.csv"

Chaine = "TEXT;" & Repertoire & Fichier
     
    Sheets("Feuil2").Select
     
    With ActiveSheet.QueryTables.Add(Connection:=Chaine, Destination:=Range("A1"))
        .Name = Fichier
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
.
.
.
End With

ce qui me permet de récupérer le nom du chemin dans la variable "repertoire" mais pas le nom du fichier !!!!

Je pensais écrire un bout de code qui à partir du chemin "repertoire" retire tout ce qui est avant le nom du fichier pour ne conserver que "toto.csv" seulement dans ma variable "repertoire" le nom du fichier n'apparait pas.... Quelle serai la syntaxe à employer?

A votre bon coeur si vous avez une idée !!!


Merci par avance
 

gilbert_RGI

XLDnaute Barbatruc
Re : Récuperer le nom d'un fichier à partir de Application.FileDialog(msoFileDialogOp

Bonjour

employer la boite suivante
'Outils/Références : cocher "Microsoft Excel XX.X Object Library"

Sub ChoixFichier()
FichierChoisi = Application.GetOpenFilename ("CSV Files (*.CSV), *.CSV")
MsgBox FichierChoisi
End Sub

Salutations

RGI
 
Dernière édition:

oasis2k

XLDnaute Nouveau
Re : Récuperer le nom d'un fichier à partir de Application.FileDialog(msoFileDialogOp

Merci pour votre réponse.

Je veux bien utiliser GetOpenFileName (déja testé par ailleur), mais:

1- Si j'utilise Application.GetOpenFilename la variable "Fichier" prend pour valeur c:\mondossier\test\toto.csv

2- et un message d'erreurs apparait à la ligne

Code:
 With ActiveSheet.QueryTables.Add(Connection:=Chaine, Destination:=Range("A1"))
        .Name = Fichier
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 932
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileDecimalSeparator = "."
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False     <----------MESSAGE D'ERREUR
    End With

MESSAGE d'ERREUR : 1004 fichier inaccessible, ce qui est normal puisque la variable "chaine" prend pour valeur "repertoire+ fichier" soit "c:\mondossier\test\c:\mondossier\test\toto.csv" ce dossier n'existe pas.

Je reformule à nouveau ma demande comment supprimer "c:\mondossier\test\ " de c:\mondossier\test\toto.csv ? Quelle est la syntaxe à utiliser afin que la variable "fichier" prenne pour valeur toto.csv
 

gilbert_RGI

XLDnaute Barbatruc
Re : Récuperer le nom d'un fichier à partir de Application.FileDialog(msoFileDialogOp

ceci donne le chemin complet et ensuite le fichier

Code:
Sub ChoixFichier()
  fichierchoisi = Application.GetOpenFilename("CSV Files (*.CSV), *.CSV")

  MsgBox fichierchoisi
  fichier = Split(fichierchoisi, "\")
x = fichierchoisi
a = Split(x, "\")
n = Len(a(UBound(a)))
MsgBox Right(fichierchoisi, n)

  
End Sub

Cdlt

RGI
 

oasis2k

XLDnaute Nouveau
Re : Récuperer le nom d'un fichier à partir de Application.FileDialog(msoFileDialogOp

Après quelques recherche plus poussé ;) j'ai trouvé la solution ici:

Il faut utilisé les fonctions Mid(), Left() ou Right() pour extraire des morceaux d'une chaine, et la fonction InstrRev() qui renvoie la position d'un caractère dans une chaine, en partant de la fin.

Soit :

Code:
  Fichier = Application.GetOpenFilename("CSV Files (*.CSV),*.CSV")
  Fichier = Mid(Range("A1").Value, InStrRev(Range("A1").Value, "\") + 1)

La variable "fichier" prend pour valeur à l'ouverture : c:\mondossier\test\toto.csv
Puis elle devient : toto.csv

au final je me retrouve avec une variable "chaine" valant "TEXT;" & Repertoire & Fichier, soit "TEXT;" c:\mondossier\test\toto.csv qui par la suite peut être appellé par ActiveSheet.QueryTables.Add (connection:=chaine).......blablabla

En espérant que cela puisse aider d'autres personnes.
 

Discussions similaires

Statistiques des forums

Discussions
312 001
Messages
2 084 477
Membres
102 581
dernier inscrit
Michou