suggestion pour ce code

zesuila

XLDnaute Occasionnel
Bonjour à tous

Ca y est les vacances c'est fini :angry:
Il faut se remettre au boulot dans la joie et la bonne humeur. Heureusement XLD est là ;)

Voici mon problème : ci joint le code (que j'ai trouvé sur XLD bien sûr, merci à ...euh je ne sais plus qui, désolé !)

Private Sub Worksheet_Activate()
Dim Direction As String
Dim Lig As Variant
Dim Trouve As Variant

Range('A7:C1000').ClearContents

Direction = Sheets('chercher').Range('C3').Value
Lig = 7
Cells(Lig, 1) = 'Chemin fichier'
'Cells(Lig, 2) = 'Taille'
'Cells(Lig, 3) = 'Date/Heure'
Range('A7:C7').Font.Bold = True
Lig = Lig + 1

On Error Resume Next
With Application.FileSearch
.NewSearch
.LookIn = Direction
.Filename = '*.' & Sheets('chercher').Range('C1').Value
.SearchSubFolders = True
.Execute

For Trouve = 1 To .FoundFiles.Count

ActiveSheet.Hyperlinks.Add Anchor:=Cells(Lig, 1), Address:=.FoundFiles(Trouve)
'Cells(Lig, 2) = FileLen(.FoundFiles(Trouve))
Cells(Lig, 3) = FileDateTime(.FoundFiles(Trouve))

ActiveSheet.UsedRange.EntireColumn.AutoFit
Lig = Lig + 1

Next Trouve
End With
End Sub

Il marche parfaitement bien, mais je voudrais n'avoir que le nom du fichier et non pas le nom du disque, du répertoire etc..

Par exemple il m'affiche actuellement :
e:\\xld\\archives\\help.xls (et là magie il est sous forme de lien donc cliquable pour l'ouvrir !!!)

je voudrais seulement help.xls car après les utilisateurs peuvent cliquer sur des petits boutons pour faire une recherche affinée .


Allez zou je repars bosser,(quoique là finalement je bosse :p )
Bonne journée à tous !
 

Shining Hawk

XLDnaute Junior
Hug zesuila,les XLDiens,

si j'ai bien compris ton problème, tu veux afficher seulement les X derniers caratères du nom de ton fichier.

Si c'est bien ca, tu peux utiliser TextToDisplay:

Code:
ActiveSheet.Hyperlinks.Add Anchor:=Cells(Lig, 1), Address:=.FoundFiles(Trouve),TextToDisplay:=Right(.FoundFiles(Trouve),9)

sinon, si tu veux récupérer le nom de ton fichier (ce qui semblerait plus logique:

Code:
Set fso = CreateObject('Scripting.FileSystemObject')
For Trouve = 1 To .FoundFiles.Count
    Set fichier = fso.GetFile(.FoundFiles(Trouve))
    ActiveSheet.Hyperlinks.Add Anchor:=Cells(Lig, 1), Address:=.FoundFiles(Trouve),TextToDisplay:=fichier.Name
    'Cells(Lig, 2) = FileLen(.FoundFiles(Trouve))
    Cells(Lig, 3) = FileDateTime(.FoundFiles(Trouve))
    ActiveSheet.UsedRange.EntireColumn.AutoFit
    Lig = Lig + 1
Next Trouve

NB: fichier est un objet de type File, tu peux donc récupérer toutes les propriétés et méthodes qui y sont associées.

En éspèrant que ça te convienne.
Bonne journée (pluvieuse chez moi :( )
 
Z

zesuila

Guest
bonjour Shining Hawk

Effectivement c'est la 2e solution (le nom du fichier) qui m'interesse.

Mais je ne vois pas ou je dois mettre tes lignes de code par rapport à mon code existant. Peux tu m'éclairer
Merci de ton aide
 
Z

zesuila

Guest
:eek: SI SI CA MARCHE !!!
Désolé, je n'ai pas réflechi assez (c'est l'heure de la pause café !! alors !!!)

Je l'ai donc placé par déduction mais j'avoue que j'ai du mal avec ces codes pour récupérer les noms de fichiers, répertoire etc...
Si tu avais un moment pour m'expliquer ce code, cela serait génial. Mais bon je ne veux pas te faire perdre du temps.

Encore merci
Bonne journée
 
Z

zesuila

Guest
:eek: SI SI CA MARCHE !!!
Désolé, je n'ai pas réflechi assez (c'est l'heure de la pause café !! alors !!!)

Je l'ai donc placé par déduction mais j'avoue que j'ai du mal avec ces codes pour récupérer les noms de fichiers, répertoire etc...
Si tu avais un moment pour m'expliquer ce code, cela serait génial. Mais bon je ne veux pas te faire perdre du temps.

Encore merci
Bonne journée
 
S

Shining Hawk

Guest
Re,

bah, en fait j'ai juste repris ton code et j'ai rajouter les deux lignes
Code:
Set fso = CreateObject('Scripting.FileSystemObject')
ca, c'est l'instruction qui me permet de créer un objet FileSystemObject que je nomme fso. Avec fso, tu peux effectuer les actions les + courrantes sur des fichiers et/ou dossiers (création, déplacement, suppression,...). il existe des méthodes bien utiles rattachées à cet objet comme DriveExists, FolderExists, FileExists qui te permettent de tester l'existance d'un lecteur, dossier ou fichier. Il y en a d'autres comme GetFile(chemin_du_fichier) qui permettent de renvoyer une référence à un objet. Ainsi, la ligne
Code:
Set fichier = fso.GetFile(.FoundFiles(Trouve))
permet de dire que j'affecte à la variable(objet) fichier les caractéristiques du fichier dont le chemin d'accès est donné par .FoundFiles(Trouve). FoundFiles est l'ensemble des chemins resultats de ta recherche. C'est une sorte de tableau, exemple:
.FoundFiles(1)='c:/toto.txt'
.FoundFiles(2)='c:/titi.txt'
.FoundFiles(3)='e:/tutu.txt'... c'est pour cela qu'on utilise une boucle en général avec .FoundFiles pour balayer l'ensemble des résultats de la recherche.

Je suis désolé, dis le moi si c'est pas très clair car j'ai super la tête dans cul ce matin... :silly:

Le plus simple, je pense, c'est que tu jettes un coup d'oeil dans l'aide VB, elle est pas trop mal foutue sur ce point, les exemples fournis aident bien à fixer les choses.

NB 1: Dans le VBE, tu vas dans outils/Références, et tu coches Windows Script Host Object Model : ca te permet de déclarer des variables en tant que FileSystemObject (Dim truc As FileSystemObject) ou File (Dim truc2 As File) et bien d'autres encore... C'est bien utiles après quand tu tapes par exemple 'truc.', tu as la liste des propriétés et méthodes qui apparaissent.

NB 2: Si tu me faisais perdre mon temps, je ne serai pas là... ;)

NB 3: je vais me prendre un méga café.... X)

Bon courage
A+
 

bbmarcus

XLDnaute Occasionnel
C'est marrant, il y aplus de fan du vil coyotte que du roadrunner.....pourtant il s'en prend plein la gueulle....ca doit être notre coté maso.... :woohoo: :woohoo: :pinch: :silly: :woohoo: :woohoo:

Et hop une roulade....oh je vais être malade.... :sick:

bbmarcus
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 853
Membres
103 975
dernier inscrit
denry