Comment extraire un nom de repertoire en fonction de son chemin?

Résolu/Fermé
letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 - 24 oct. 2013 à 12:39
letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 - 4 nov. 2013 à 09:47
bonjour,
je suis tout nouveau sur VBA, je n y connais RIEN mais, je souhaite m'y interesser.

je souhaite extraire un ou des nom(s) de répertoire(s) en fonction d'un path donné pour les visualiser dans d'autres case de mon document.

j ai une base de code.




Dim iRow

Sub ListFiles()
iRow = 11
Call ListMyFiles(Range("B4"), Range("D6"))
End Sub

Sub ListMyFiles(mySourcePath, Subfolders)
Set MyObject = New Scripting.FileSystemObject
Set mySource = MyObject.GetFolder(mySourcePath)
On Error Resume Next
For Each MyFile In mySource.Files
iCol = 2
'Cells(iRow, iCol).Value = MyFile.path'
iCol = iCol + 1
Cells(iRow, iCol).Value = MyFile.Name
iCol = iCol + 1
Cells(iRow, iCol).Value = MyFile.Size
iCol = iCol + 1
Cells(iRow, iCol).Value = MyFile.DateLastModified
iRow = iRow + 1
Next
If IncludeSubfolders Then
For Each mySubFolder In mySource.Subfolders
Call ListMyFiles(mySubFolder.Path, True)
Next
End If
End Sub



et mon sourcepath est sous cette forme:


S:\**1**\**2**\**3**\**4**\**5**

je liste donc dans mon tableau, tout ce qui est dan **5**
mais ce que je veux voir apparaître dans mon document , sont les informations 3 et 5. pas au meme endroit bien evidement (ce serais trop facile!)

merci pour vos futur contributions.
A voir également:

14 réponses

letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 1
25 oct. 2013 à 08:42
merci bien zoul, je fais ce que je peux coté originalité.
reste que je suis toujours aussi nul en VBA et je n ai pas trouvé de tuto (en francais ) qui m'explique bien son fonctionnement.

si une bonne ame pouvais me donné des info voir meme me compléter mon ti bout de programme.
je le lui serais tres mes alors tres reconnaissant

grand merci..... par avance.
1
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
25 oct. 2013 à 10:00
Il y a un bug dès le départ dans ton code.
De plus, j'ai peut-être mal compris ce que tu cherches à faire...
Split te permet de lister les différents dossiers à parcourir pour atteindre S:\**1**\**2**\**3**\**4**\**5** , soit
S:\
**1**
**2**
**3**
**4**
**5**

suivant :
https://silkyroad.developpez.com/VBA/ManipulerChainesCaracteres/#LI-I
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
24 oct. 2013 à 13:25
Bonjour,

Bienvenue dans le monde de VBA.
3 et 5 c'est tellement original que je te conseille de ne pas utiliser les fonctions classiques sur les dossiers, mais la fonction Split avec comme séparateur \.
Tu trouveras pour sûr suffisamment d'infos sur cette fonction dans l'aide VBA et sur le net.

A+
0
letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 1
25 oct. 2013 à 10:26
en gros:


dans mon chemin d'acces je veux réutiliser ce qui ce trouve en "3" et "5" pour identifier mon tableau

ps: s'il y a un bug dans mon programme?
je n en sais rien!
il fait ce que je lui demande (trouvé sur le net ), donc tout va bien...pour le moment ^^

mais je ne cherche qu'a apprendre et surtout comprendre.
ce qui n est pas gagné!

merci
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
25 oct. 2013 à 10:34
dans mon chemin d'acces je veux réutiliser ce qui ce trouve en "3" et "5" pour identifier mon tableau
Que veut dire "identifier mon tableau" ?

dans mon chemin d'acces je veux réutiliser ce qui ce trouve en "3" et "5" pour identifier mon tableau
Le chemin d'accès qui est écrit en B4 ?

il fait ce que je lui demande (trouvé sur le net )
Avec comme argument Subfolders alors que plus bas c'est IncludeSubfolders ? ça m'épate
0
letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 1
25 oct. 2013 à 10:48
* 3 et 5 sont des "arguments" qui devront ce modifier automatiquement en tant que titre dans ma mise en page en fonction du chemin en B4 (oui bien vu ^^).

pour le moment je ne met pas de subfolders car inutile dans mon cas, ..... mais on ne sais jamais.
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
25 oct. 2013 à 11:23
Je ne suis toujours pas sûr d'avoir compris, mais regarde si ceci : https://www.cjoint.com/?CJzlwVC2xNS est utilisable.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 1
25 oct. 2013 à 12:16
OUI SUPER !

bon la je transpire a grosse gouttes pour l'integrer dans mon document.

je met le code dans un nouveau module, et change les valeur pour le resultat de l'extraction, mais quand je valide il me sort un .... fonction non valide!

le FU..."#@&! IER ...!

a moi de trouver pourquoi!

ou as tu une explication?

en tous cas je te remercie d'aider un gros boulet comme moi ^^
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
25 oct. 2013 à 13:04
Bonjour,
Je pense qu'il manque un ti quéq choses dans l'exemple de Zoul67
Dans son classeur, le module1 tu colle cette sub
Sub DecoupeChemin()
Dim Chemin As String, S As String
Dim TB() As String, i As Integer
Chemin = Cells(4, "B")
TB = Split(Chemin, "\")
For i = 0 To UBound(TB)
S = S & TB(i) & "\"
Cells(4 + i, "H") = S
Next i
End Sub
A toi de choisir les répertoires dont tu à besoin, en l'occurrence les cellules H5 et 8
A+
0
letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 1
25 oct. 2013 à 14:11
merci a toi lermite mais je trouve que zoul est pile poile sur mon probleme.

reste a l'intergrer dans mon document. mais je n arrive pas au meme resultat ... je ne sais pas pourquoi!

y a une methode particuliere pour l'inserer ?

^^
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
25 oct. 2013 à 14:22
Non, tu l'appelles comme une autre fonction.
Tu arrives à un résultat faux ou à aucun résultat ?
Les macros sont bien activées dans ton fichier ?
0
letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 1
25 oct. 2013 à 14:37
j ai ouvert mon document et le tien.
j ai "copié" le module (il se nome module11)
dans la case ou je souhaite mon resultat je met mes valeurs ( =Extraction($i$9;h4-1) ) et au moment de valider il me sort une fenetre avec un gros "fonction non valide"

comme j arrive a faire ma liste, je suppose que les macros actives.!
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
25 oct. 2013 à 15:16
Tu peux fournir ton fichier sur cjoint.com ?
0
letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 1
28 oct. 2013 à 13:44
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
30 oct. 2013 à 10:04
Etrange... en mettant = devant la formule que tu as écrite, ça marche parfaitement chez moi...
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
30 oct. 2013 à 15:41
Bonjour,
Apparemment le mot Extraction est un mot réserver quelque part (bien que je ne le connaisse pas)
Si tu change le nom par autre chose (j'ai essayé avec Rep) ça fonctionne.
Oublie pas de changer également le nom dans le corps de la fonction.
Il n'est pas nécessaire de mettre des $ dans la formule.
A+
0
letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 1
30 oct. 2013 à 18:35
merci bien,

je regarderais demain ... si possible.

en pleine bourre en ce moment !
0
letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 1
Modifié par letonet le 31/10/2013 à 14:30
boujout a vous,

je ne sais pas pourquoi La Loi de Murphy s'applique toujours sur moi!

j ai testé en changeant l'"extracte" par un ti "leto" .... y a du mieux ..... mais ...

je me retrouve avec une valeur nul "0"

je suis sur de ne pas avoir fait pipi sur un totem durant c est 40 dernières annees !

ps: il faut souligner que la fonction est parfaitement applicable sur le premier fichier de zoul67.
etrange non ????
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
31 oct. 2013 à 16:53
C'est vrai que c'est bizarre...
J'ai eu le même coup que toi (des zéro) mais quand j'ai enlevé les $ ça a fonctionner.
Essaye.. tu dis

0
letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 1
31 oct. 2013 à 17:03
idem !

GRRR.....!
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
31 oct. 2013 à 17:50
Essaye avec cette formule un peu plus... orthodoxe.
Public Function Rep(Chemin As Range, Num As Range)
Dim Tableau() As String
Tableau = Split(Chemin.Value, "\")
Rep = Tableau(Num.Value - 1)
End Function
Dans l'appel tu ne dois pas mettre -1, c'est fais dans la fonction.

0
letonet Messages postés 13 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 4 novembre 2013 1
4 nov. 2013 à 09:47
YES YES et encore YES !!!

ca marche ........ ( big smile )

alors je ne sais ni le pourquoi ni comment, mais les fais sont la !

grand merci a vous, je vais pouvoir avancer sur mon truc.

mais avec vos capacités, je vais sans doute trouver une autre fonction que je ne saurais pas faire.

a tres vite donc ^^

encore un gros merci a vous
0