hm, désolé pour le titre je savais pas quoi mettre
Alors, je récupere un chemin grace à un explorateur windows avec le code suivant
Là tout va bien !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 'declarations Private Const BIF_RETURNONLYFSDIRS = 1 Private Const BIF_DONTGOBELOWDOMAIN = 2 Private Type BrowseInfo hWndOwner As Long pIDLRoot As Long pszDisplayName As Long lpszTitle As Long ulFlags As Long lpfnCallback As Long lParam As Long iImage As Long End Type Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, _ ByVal lpBuffer As String) As Long Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, _ ByVal lpString2 As String) As Long Public Function RechercherDossier(Titre As String, Handle As Long) As String Dim lpIDList As Long Dim strBuffer As String Dim strTitre As String Dim tBrowseInfo As BrowseInfo With tBrowseInfo .hWndOwner = Handle .lpszTitle = lstrcat(strTitre, "") .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN End With lpIDList = SHBrowseForFolder(tBrowseInfo) If (lpIDList) Then strBuffer = String(255, vbNullChar) SHGetPathFromIDList lpIDList, strBuffer RechercherDossier = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1) End If End Function
Je voudrais maitenant trouver les fichiers texte dans ce dossier que j'ai choisi. J'ai à la base le chemin qui est un string dans un label d'un userform.
J'ai trouvé ici ce code que j'ai mis dans un autre module:
je l'ai deja un peu modifié mais le probleme est que ce code debute lui aussi d'un explorateur pour selectionner le dossier contenant (et moi je voudrait qu'il cherche directement dans le chemin qui se trouve dans mon label)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 'Option Explicit Private Const BIF_RETURNONLYFSDIRS = 1 Private Const BIF_DONTGOBELOWDOMAIN = 2 Private Const MAX_PATH = 260 Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" _ (ByVal lpFile As String, ByVal lpDirectory As String, _ ByVal lpResult As String) As Long Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long Private Declare Function SHGetPathFromIDList Lib _ "shell32" (ByVal pidList As Long, ByVal lpBuffer _ As String) As Long Private Declare Function lstrcat Lib "kernel32" _ Alias "lstrcatA" (ByVal lpString1 As String, ByVal _ lpString2 As String) As Long Private Type BrowseInfo hWndOwner As Long pIDLRoot As Long pszDisplayName As Long lpszTitle As Long ulFlags As Long lpfnCallback As Long lParam As Long iImage As Long End Type Sub RechercheFichier() Dim lpIDList As Long ' Declare Variables Dim szTitle As String Dim sBuffer As String Dim tBrowseInfo As BrowseInfo szTitle = "Choisissez le répertoire :" With tBrowseInfo .lpszTitle = lstrcat(szTitle, "") .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN End With lpIDList = SHBrowseForFolder(tBrowseInfo) Debug.Print lpIDList If (lpIDList) Then sBuffer = Space(MAX_PATH) SHGetPathFromIDList lpIDList, sBuffer sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1) End If 'Recherche des fichiers dans le dossier Dim Compteur1 As Integer Dim ObjetTrouve As FileSearch Dim ListeFichiers As String Dim Dossier As String Dim response As String Dossier = sBuffer 'InputBox("Indiquez le répertoire à afficher", "Liste de fichiers", CurDir()) If Dossier = "" Then Exit Sub End If ListeFichiers = "" Set ObjetTrouve = Application.FileSearch With ObjetTrouve .NewSearch .LookIn = Dossier .SearchSubFolders = False .Filename = "*.txt" .Execute End With If ObjetTrouve.FoundFiles.Count > 0 Then For Compteur1 = 1 To ObjetTrouve.FoundFiles.Count Menu.ListeTexte.AddItem ObjetTrouve.FoundFiles(Compteur1) Next End If End Sub
J'ai fait quelques tests et j'ai vu que cetai à cette ligne qu'il lancer l'explorateur
et que la fonction renvoyait un numero. J'ai vu que ce numero changeait à chaque execution
Code : Sélectionner tout - Visualiser dans une fenêtre à part lpIDList = SHBrowseForFolder(tBrowseInfo)
là le seul moyen de faire ce que je veux (je pense) serait de realiser une fonction me permettant de trouver le numero du chemin qui se trouve dans mon label pour ainsi directement le fournir à ma sub RechercherFichier (et ainsi ne plus avoir à choisir le dossier qui contient les fichiers).
J'espere avoir été clair
bon j'ai deja fait quelques recherches mais là je patoge un peu
le numero renvoyé est bien le "handle" ??
merci de votre aide
Partager