comment trouver l'adresse du fichier excel?

  • Initiateur de la discussion Thomas
  • Date de début
T

Thomas

Guest
Bonsoir le forum,

comment a partir d'une boite de recherche tell que ci dessous, peut on récupérer l'adresse du fichier selecitionné. afin que celui ci alimente une variable (MaVariable)
Sub ouvrir()
Dim Fichier
Fichier = Application.GetOpenFilename('Tous les fichiers (*.xls),*.xls', , 'Recherche de Fichier')
If Fichier <> False Then '(MaVariable = l'adresse du fichier.xls selectionné)
End Sub

le but de cette macro est de pouvoir récupérer dans un textbox tout les fichiers excel qui ce trouve à l'adresse MaVariable (de ce fait il ne faut pas que le fichier excel pointé figure dans la variable mais uniquement l'adresse 'c:\\....')

Voici le Code utilisé pour alimenté le Textbox
Sub LbxXLSIni()
Dim ThisBookPath As String, FileName() As Variant
Dim SearchFile As FileSearch
Dim ThePath As String
Dim i As Integer, ZZ As Integer

On Error Resume Next

Set SearchFile = Application.FileSearch
ThisBookPath = ThisWorkbook.Path

If MaVariable <> '' Then ThePath = MaVariable Else ThePath = ThisBookPath

With SearchFile
.NewSearch
.FileName = '*.XLS'
.LookIn = ThePath
.SearchSubFolders = False
.Execute msoSortByFileName, msoSortOrderAscending
If .Execute > 0 Then
With .FoundFiles
For i = 1 To .Count
ReDim Preserve FileName(0 To .Count - 1)
FileName(i - 1) = Dir(.Item(i))
Next i
End With
Else
MsgBox 'No File Found ' & ThePath
End If
End With
Set SearchFile = Nothing
UserForm1.LbxXLS.List() = FileName
End Sub


D'avance merci
 

Zon

XLDnaute Impliqué
Salut,

Pas s&ucirc;r de tout comprendre (ta recherche ne sert à rien dans ce que tu demandes), mais getopenfilename te renvoie le chemin complet


If Fichier <> False Then MaVariable = fichier


Tu ne confonds pas textbox et listbox ?

A+++
 

Zon

XLDnaute Impliqué
Salut,

Pour alimenter ta listbox (zone de liste)

A y est je crois que j'ai compris, en relisant attentivement ton post aprés avoir choisi un fichier tu voudrais la liste des fichiers de son répertoire courant :

Function NomDossier$(ByVal Ch$)
Dim Temp$
Temp = Ch
While InStr(Temp, '\\') > 0
Temp = Mid(Temp, InStr(Temp, '\\') + 1)
Wend
NomDossier = Left(Ch, Len(Ch) - Len(Temp))
End Function

Function ListeClasseurs(NomDossier$)
Dim FSO, Dossier, Fichier, T(), I&

Set FSO = CreateObject('Scripting.FileSystemObject')
On Error Resume Next
Set Dossier = FSO.GetFolder(NomDossier)
For Each Fichier In Dossier.Files
I = I + 1
ReDim Preserve T(1 To I)
T(I) = NomfichierT(Fichier.Name, 4)
Next Fichier
ListeClasseurs = IIf(Err <> 0, 'Pas de fichier Trouvé', T)
End Function

Private Function NomfichierT$(ByVal Ch$, Ext As Byte)
NomfichierT = Left(Ch, Len(Ch) - Ext)
End Function


Ce qui devrait donné chez toi, tu peux ôter la fonction nomfichierT
sub Ouvri()
dim Fichier,Temp
fichier=ouvf
if fichier<>false then
temp=listeclasseurs(nomdossier(fichier))
if isarray(temp) then UserForm1.LbxXLS.List =temp
end if
end sub


A+++

Ps Comment fait on pour insérer du code ?
 

Zon

XLDnaute Impliqué
re,

c'est pas mon soir, j'ai oublié le filtre xls dans la recherche des fichiers

à rajouter dans listeclasseurs

Function ListeClasseurs(NomDossier$)
Dim FSO, Dossier, Fichier, T(), I&

Set FSO = CreateObject('Scripting.FileSystemObject')
On Error Resume Next
Set Dossier = FSO.GetFolder(NomDossier)
For Each Fichier In Dossier.Files
If VerifNom(Fichier.Name, '.xls') Then 'ici
I = I + 1
ReDim Preserve T(1 To I)
T(I) = NomfichierT(Fichier.Name, 4)
End If 'ici aussi
Next Fichier
ListeClasseurs = IIf(Err <> 0, 'Pas de fichier Trouvé', T)
End Function

Private Function VerifNom(ByVal Ch$, Ext$) As Boolean
VerifNom = Ch <> ThisWorkbook.Name And InStr(Ch, Ext) > 0
End Function

A+++
 
A

Alain CROS

Guest
Bonjour.

Sub ouvrir()
Dim Fichier$
Fichier = CStr(Application.GetOpenFilename( _
'Tous les fichiers (*.xls),*.xls', , 'Recherche de Fichier'))
If Fichier <> CStr(False) Then
With Application
MsgBox Left$(Fichier, InStr(.Substitute(Fichier, .PathSeparator, '?', _
Len(Fichier) - Len(.Substitute(Fichier, .PathSeparator, ''))), '?'))
End With
End If
End Sub

Alain CROS
 
T

Thomas

Guest
Merci pour toutes ces info

je vais essayer de suite

je vous join mon fichier (j'ai enfin réussi à le réduire)

Merci
Thomas&reg;

Ps dans le fichier join je n'ai pas encore apporté vos solution

dans celui ci j'ai soit la possibiliter d'afficher tout les fichiers qui ce trouve dans le meme dossier que celui ci ou alors d'ecrire une autre adresse dans un text box (ce qui fait que lorsque l'on clique sur recherche fichier les fichiers sont ceux de l'adresse noté)

en même tps si vous pourrez voir que dans mon fichier j'ai une erreur de varible objet?? alors que la macro fonctionne tres bien.

pour resumer

je peux chercher dans tout les fichiers excel ouvert (et dans toutes les feuilles)
affiner la recherche.
aller directement sur le resultat de la recherche en double clique dans la liste box.

Merci à michel car c'est en m'inspirant de plusieur de ces nombreuses demo que j'ai pu faire celui ci (enfin faire est un grand mot, j'ai souvant repris les codes en y apportant des modifs)

[file name=perso.zip size=24978]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/perso.zip[/file]
 

Pièces jointes

  • perso.zip
    1.2 KB · Affichages: 47
  • perso.zip
    1.2 KB · Affichages: 44
  • perso.zip
    1.2 KB · Affichages: 36
T

Thomas

Guest
Bonjour,

je debut alors, je pose des question bête mais comment puis je

recupérer l'adresse qui est inscit dans ce MsgBox :

MsgBox Left$(Fichier, InStr(.Substitute(Fichier, .PathSeparator, '?', _
Len(Fichier) - Len(.Substitute(Fichier, .PathSeparator, ''))), '?'))


afin d'alimenter un textbox

d'avance merci
Thomas&reg;
 
T

Thomas®

Guest
Merci à tous,

voici le resulta final

si vous n'avez pas d'autre fichier excel ouvert en même tps taper 1 dans la recherche car sinon le USF ne se lancera pas.

il fonctionne tres bien sauf toujours ce problème de variable objet non défini ...??

mais là je ne trouve pas la solution :pinch:

Thomas [file name=perso_20050331003953.zip size=35363]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/perso_20050331003953.zip[/file]
 

Pièces jointes

  • perso_20050331003953.zip
    34.5 KB · Affichages: 40

Zon

XLDnaute Impliqué
Salut,

Thomas tu as cette erreur car tu essaies de décharger (unload me) alors qu'il n'est pas encore chargé à l'évènement Initialize, utilises plutôt

If Occurence = '' Then end

Bon pour récupérer dans un variable, ta procédure ouvrir tranbsforme la en fonction quyi retourne une chaine de caractère:

Function Ouvrir$() 'Alain Cros
Dim Fichier$
&nbsp; Fichier = CStr(Application.GetOpenFilename( _
&nbsp; &nbsp; &nbsp; &nbsp; 'Tous les fichiers (*.xls),*.xls', , 'Recherche de Fichier'))
&nbsp;
If Fichier <> CStr(False) Then
&nbsp; &nbsp;
With Application
&nbsp; &nbsp; &nbsp; Ouvrir = Left$(Fichier, InStr(.Substitute(Fichier, .PathSeparator, '?', _
&nbsp; &nbsp; &nbsp; &nbsp; Len(Fichier) - Len(.Substitute(Fichier, .PathSeparator, ''))), '?'))
&nbsp; &nbsp;
End With
&nbsp;
End If
End Function


Comme ceci dans ouvrir_click pour définir ta textbox filesss il te suffit d'écrire

filesss=ouvrir

Pourtant ton browsefolder fonctionner bien ....

Si tu utilises le code de quelqu'un d'autre mets son nom en commentaire(comme je viens de faire pour Alain).

A+++
 

Statistiques des forums

Discussions
312 980
Messages
2 094 128
Membres
105 941
dernier inscrit
antho_qh