OVH Cloud OVH Cloud

Récupération nom de fichier sans extension ?

8 réponses
Avatar
seb
Bonjour

j'ai actuellement une macro qui me permet d'ouvrir une boite de dialogue me
permettant de choisir un fichier, d'y sélectionner tout puis crée un
classeur en copiant des données du fichier d'origine. Cette macro fait une
mise en page et j'aimerai que le nom du fichier d'origine apparaisse dans
une cellule (G2) sans extension ni chemin d'accès (ce fichier d'origine
reste ouvert). Si je tape
sélection =fichierAouvrir j'obtient le chemin complet avec l'extension de
fichier (c:\programme..\test.xls)
Si quelqu'un pouvait m'orienter, ce serait sympa. Il me semble qu'il existe
une fonction Getfilename mais je ne sais pas si ça colle et comment
l'utiliser.
D'avance merci

seb

8 réponses

Avatar
Papou
Bonjour
Voici une manière de procéder avec une fonction perso qui trouve la position
du dernier anti-slash dans un nom complet de fichier et permet ainsi de
trouver le nom de fichier seul.
Dans ta macro tu ajoutes cette ligne :
NomFichierSeul = Mid(FichierAOuvrir, PositionAs(FichierAOuvrir,
Len(FichierAOuvrir)) + 1, Len(FichierAOuvrir) - PositionAs(FichierAOuvrir,
Len(FichierAOuvrir)))
puis tu ajoutes la fonction suivante dans ton module :
Function PositionAs(Chemin$, Nb&) As Long
Dim Pos1 As Long
Dim Pos2 As Long
Dim i As Long
Pos2 = 0
For i = 1 To Nb
Pos1 = Pos2
Pos2 = InStr(Pos1 + 1, Chemin, "")
If Pos2 = 0 Then Exit For
Next i
If Pos2 > Pos1 Then
PositionAs = Pos2
Else: PositionAs = Pos1
End If
End Function

Cordialement
Pascal



"seb" a écrit dans le message de
news:41232530$0$28260$
Bonjour

j'ai actuellement une macro qui me permet d'ouvrir une boite de dialogue
me

permettant de choisir un fichier, d'y sélectionner tout puis crée un
classeur en copiant des données du fichier d'origine. Cette macro fait une
mise en page et j'aimerai que le nom du fichier d'origine apparaisse dans
une cellule (G2) sans extension ni chemin d'accès (ce fichier d'origine
reste ouvert). Si je tape
sélection =fichierAouvrir j'obtient le chemin complet avec l'extension de
fichier (c:programme..test.xls)
Si quelqu'un pouvait m'orienter, ce serait sympa. Il me semble qu'il
existe

une fonction Getfilename mais je ne sais pas si ça colle et comment
l'utiliser.
D'avance merci

seb




Avatar
Michel Gaboly
Bonjour,

Une fois le fichier ouvert, sa propriété Name te renvoie le nom sans
le chemin d'accès.

Quant à l'extension, supprime les 4 derniers caractères :

Le classeur que tu viens d'ouvrir étant actif :

Sub NomSansExtension()
Dim Nom As String
Nom = ActiveWorkbook.Name
Nom = Left(Nom, Len(Nom) - 4)
End Sub



Bonjour

j'ai actuellement une macro qui me permet d'ouvrir une boite de dialogue me
permettant de choisir un fichier, d'y sélectionner tout puis crée un
classeur en copiant des données du fichier d'origine. Cette macro fait une
mise en page et j'aimerai que le nom du fichier d'origine apparaisse dans
une cellule (G2) sans extension ni chemin d'accès (ce fichier d'origine
reste ouvert). Si je tape
sélection =fichierAouvrir j'obtient le chemin complet avec l'extension de
fichier (c:programme..test.xls)
Si quelqu'un pouvait m'orienter, ce serait sympa. Il me semble qu'il existe
une fonction Getfilename mais je ne sais pas si ça colle et comment
l'utiliser.
D'avance merci

seb


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
docm
Bonjour Papou.
Ton code est intéressant.
Tu peux le raccourcir ainsi dans le cas présent:

FichierAOuvrir = "c:ddeerrffff"
While InStr(FichierAOuvrir, "") > 0
FichierAOuvrir = Mid(FichierAOuvrir, InStr(FichierAOuvrir, "") + 1)
Wend

Amicalement.

"Papou" wrote in message
news:
Bonjour
Voici une manière de procéder avec une fonction perso qui trouve la
position

du dernier anti-slash dans un nom complet de fichier et permet ainsi de
trouver le nom de fichier seul.
Dans ta macro tu ajoutes cette ligne :
NomFichierSeul = Mid(FichierAOuvrir, PositionAs(FichierAOuvrir,
Len(FichierAOuvrir)) + 1, Len(FichierAOuvrir) - PositionAs(FichierAOuvrir,
Len(FichierAOuvrir)))
puis tu ajoutes la fonction suivante dans ton module :
Function PositionAs(Chemin$, Nb&) As Long
Dim Pos1 As Long
Dim Pos2 As Long
Dim i As Long
Pos2 = 0
For i = 1 To Nb
Pos1 = Pos2
Pos2 = InStr(Pos1 + 1, Chemin, "")
If Pos2 = 0 Then Exit For
Next i
If Pos2 > Pos1 Then
PositionAs = Pos2
Else: PositionAs = Pos1
End If
End Function

Cordialement
Pascal



"seb" a écrit dans le message de
news:41232530$0$28260$
Bonjour

j'ai actuellement une macro qui me permet d'ouvrir une boite de dialogue
me

permettant de choisir un fichier, d'y sélectionner tout puis crée un
classeur en copiant des données du fichier d'origine. Cette macro fait
une


mise en page et j'aimerai que le nom du fichier d'origine apparaisse
dans


une cellule (G2) sans extension ni chemin d'accès (ce fichier d'origine
reste ouvert). Si je tape
sélection =fichierAouvrir j'obtient le chemin complet avec l'extension
de


fichier (c:programme..test.xls)
Si quelqu'un pouvait m'orienter, ce serait sympa. Il me semble qu'il
existe

une fonction Getfilename mais je ne sais pas si ça colle et comment
l'utiliser.
D'avance merci

seb








Avatar
seb
Merci beaucoup à tous. Je vais essayer de mettre tout ca en place.

seb

"Michel Gaboly" a écrit dans le message de
news:
Bonjour,

Une fois le fichier ouvert, sa propriété Name te renvoie le nom sans
le chemin d'accès.

Quant à l'extension, supprime les 4 derniers caractères :

Le classeur que tu viens d'ouvrir étant actif :

Sub NomSansExtension()
Dim Nom As String
Nom = ActiveWorkbook.Name
Nom = Left(Nom, Len(Nom) - 4)
End Sub



Bonjour

j'ai actuellement une macro qui me permet d'ouvrir une boite de dialogue
me


permettant de choisir un fichier, d'y sélectionner tout puis crée un
classeur en copiant des données du fichier d'origine. Cette macro fait
une


mise en page et j'aimerai que le nom du fichier d'origine apparaisse
dans


une cellule (G2) sans extension ni chemin d'accès (ce fichier d'origine
reste ouvert). Si je tape
sélection =fichierAouvrir j'obtient le chemin complet avec l'extension
de


fichier (c:programme..test.xls)
Si quelqu'un pouvait m'orienter, ce serait sympa. Il me semble qu'il
existe


une fonction Getfilename mais je ne sais pas si ça colle et comment
l'utiliser.
D'avance merci

seb


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





Avatar
Michel Gaboly
De rien. C'était avec plaisir. ;-)))


Merci beaucoup à tous. Je vais essayer de mettre tout ca en place.

seb

"Michel Gaboly" a écrit dans le message de
news:
Bonjour,

Une fois le fichier ouvert, sa propriété Name te renvoie le nom sans
le chemin d'accès.

Quant à l'extension, supprime les 4 derniers caractères :

Le classeur que tu viens d'ouvrir étant actif :

Sub NomSansExtension()
Dim Nom As String
Nom = ActiveWorkbook.Name
Nom = Left(Nom, Len(Nom) - 4)
End Sub



Bonjour

j'ai actuellement une macro qui me permet d'ouvrir une boite de dialogue
me


permettant de choisir un fichier, d'y sélectionner tout puis crée un
classeur en copiant des données du fichier d'origine. Cette macro fait
une


mise en page et j'aimerai que le nom du fichier d'origine apparaisse
dans


une cellule (G2) sans extension ni chemin d'accès (ce fichier d'origine
reste ouvert). Si je tape
sélection =fichierAouvrir j'obtient le chemin complet avec l'extension
de


fichier (c:programme..test.xls)
Si quelqu'un pouvait m'orienter, ce serait sympa. Il me semble qu'il
existe


une fonction Getfilename mais je ne sais pas si ça colle et comment
l'utiliser.
D'avance merci

seb


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com



Avatar
Frédéric Sigonneau
Bonsoir,

Une autre solution possible, en utilisant la fonction Dir :

Sub test()
Dim S$
S = "C:Program FilesMicrosoft OfficeOffice10EXCEL.EXE"
MsgBox Left(Dir(S), Len(Dir(S)) - 4)
End Sub

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour

j'ai actuellement une macro qui me permet d'ouvrir une boite de dialogue me
permettant de choisir un fichier, d'y sélectionner tout puis crée un
classeur en copiant des données du fichier d'origine. Cette macro fait une
mise en page et j'aimerai que le nom du fichier d'origine apparaisse dans
une cellule (G2) sans extension ni chemin d'accès (ce fichier d'origine
reste ouvert). Si je tape
sélection =fichierAouvrir j'obtient le chemin complet avec l'extension de
fichier (c:programme..test.xls)
Si quelqu'un pouvait m'orienter, ce serait sympa. Il me semble qu'il existe
une fonction Getfilename mais je ne sais pas si ça colle et comment
l'utiliser.
D'avance merci

seb




Avatar
Papou
Bonjour
Oui c'est effectivement plus léger ;-)
J'utilisais surtout cette méthode dans Access et dans un lot de traitement
de fichiers en grand nombre, par contre je serai curieux de connaître
l'effet sur le temps de traitement avec ta méthode.
Cordialement
Pascal

"docm" a écrit dans le message de
news:%
Bonjour Papou.
Ton code est intéressant.
Tu peux le raccourcir ainsi dans le cas présent:

FichierAOuvrir = "c:ddeerrffff"
While InStr(FichierAOuvrir, "") > 0
FichierAOuvrir = Mid(FichierAOuvrir, InStr(FichierAOuvrir, "") + 1)
Wend

Amicalement.

"Papou" wrote in message
news:
Bonjour
Voici une manière de procéder avec une fonction perso qui trouve la
position

du dernier anti-slash dans un nom complet de fichier et permet ainsi de
trouver le nom de fichier seul.
Dans ta macro tu ajoutes cette ligne :
NomFichierSeul = Mid(FichierAOuvrir, PositionAs(FichierAOuvrir,
Len(FichierAOuvrir)) + 1, Len(FichierAOuvrir) -
PositionAs(FichierAOuvrir,


Len(FichierAOuvrir)))
puis tu ajoutes la fonction suivante dans ton module :
Function PositionAs(Chemin$, Nb&) As Long
Dim Pos1 As Long
Dim Pos2 As Long
Dim i As Long
Pos2 = 0
For i = 1 To Nb
Pos1 = Pos2
Pos2 = InStr(Pos1 + 1, Chemin, "")
If Pos2 = 0 Then Exit For
Next i
If Pos2 > Pos1 Then
PositionAs = Pos2
Else: PositionAs = Pos1
End If
End Function

Cordialement
Pascal



"seb" a écrit dans le message de
news:41232530$0$28260$
Bonjour

j'ai actuellement une macro qui me permet d'ouvrir une boite de
dialogue



me
permettant de choisir un fichier, d'y sélectionner tout puis crée un
classeur en copiant des données du fichier d'origine. Cette macro fait



une
mise en page et j'aimerai que le nom du fichier d'origine apparaisse
dans


une cellule (G2) sans extension ni chemin d'accès (ce fichier
d'origine



reste ouvert). Si je tape
sélection =fichierAouvrir j'obtient le chemin complet avec l'extension
de


fichier (c:programme..test.xls)
Si quelqu'un pouvait m'orienter, ce serait sympa. Il me semble qu'il
existe

une fonction Getfilename mais je ne sais pas si ça colle et comment
l'utiliser.
D'avance merci

seb












Avatar
docm
Bonjour.
La différence de temps est minime. Un test avec
la Fonction GetTickCount révèle que

pour traiter 100,000 fois le nom de fichier "c:ddeerrffff",
il faut 320 millièmes de secondes avec ta méthode
et 365 millièmes de secondes avec la mienne.

La mienne peut être accélérée significativement en utilisant comme tu le
fais
le paramètre Départ de l'intruction Instr(Départ , string1, string2)

NomFichierSeul = FichierAOuvrir
pos = 1
While InStr(pos, NomFichierSeul, "") > 0
pos = InStr(pos, NomFichierSeul, "") + 1
Wend
NomFichierSeul = Mid(NomFichierSeul, pos)
Next

On tombe alors à 250 millièmes de secondes.

Amicalement.


"Papou" wrote in message
news:
Bonjour
Oui c'est effectivement plus léger ;-)
J'utilisais surtout cette méthode dans Access et dans un lot de traitement
de fichiers en grand nombre, par contre je serai curieux de connaître
l'effet sur le temps de traitement avec ta méthode.
Cordialement
Pascal

"docm" a écrit dans le message de
news:%
Bonjour Papou.
Ton code est intéressant.
Tu peux le raccourcir ainsi dans le cas présent:

FichierAOuvrir = "c:ddeerrffff"
While InStr(FichierAOuvrir, "") > 0
FichierAOuvrir = Mid(FichierAOuvrir, InStr(FichierAOuvrir, "") + 1)
Wend

Amicalement.

"Papou" wrote in message
news:
Bonjour
Voici une manière de procéder avec une fonction perso qui trouve la
position

du dernier anti-slash dans un nom complet de fichier et permet ainsi
de



trouver le nom de fichier seul.
Dans ta macro tu ajoutes cette ligne :
NomFichierSeul = Mid(FichierAOuvrir, PositionAs(FichierAOuvrir,
Len(FichierAOuvrir)) + 1, Len(FichierAOuvrir) -
PositionAs(FichierAOuvrir,


Len(FichierAOuvrir)))
puis tu ajoutes la fonction suivante dans ton module :
Function PositionAs(Chemin$, Nb&) As Long
Dim Pos1 As Long
Dim Pos2 As Long
Dim i As Long
Pos2 = 0
For i = 1 To Nb
Pos1 = Pos2
Pos2 = InStr(Pos1 + 1, Chemin, "")
If Pos2 = 0 Then Exit For
Next i
If Pos2 > Pos1 Then
PositionAs = Pos2
Else: PositionAs = Pos1
End If
End Function

Cordialement
Pascal



"seb" a écrit dans le message de
news:41232530$0$28260$
Bonjour

j'ai actuellement une macro qui me permet d'ouvrir une boite de
dialogue



me
permettant de choisir un fichier, d'y sélectionner tout puis crée un
classeur en copiant des données du fichier d'origine. Cette macro
fait





une
mise en page et j'aimerai que le nom du fichier d'origine apparaisse
dans


une cellule (G2) sans extension ni chemin d'accès (ce fichier
d'origine



reste ouvert). Si je tape
sélection =fichierAouvrir j'obtient le chemin complet avec
l'extension




de
fichier (c:programme..test.xls)
Si quelqu'un pouvait m'orienter, ce serait sympa. Il me semble qu'il
existe

une fonction Getfilename mais je ne sais pas si ça colle et comment
l'utiliser.
D'avance merci

seb