bonjour,
j'ai une application qui me m'ai dans un champ le chemin et le nom d'un fichier, sa marche pas de probléme.
Mon souci c'est que quand le chemin est long il ne me le prend pas donc je voudrai savoir comment utilise la fonction http://loufab.developpez.com/optimisation/#LV-A V-A. Convention Noms Longs / Noms Courts
j'ai réusi a l'utilise qui peux me dire comment faire par rapport a mon code
le chemin du fichier est sauvegarde dans CHEMIN_FICHIER_ETAPE_TYPE
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _ ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 'Déclaration de l'API Private Declare Sub PathStripPath Lib "shlwapi.dll" Alias "PathStripPathA" (ByVal pszPath As String) Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _ "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long 'Structure du fichier Private Type OPENFILENAME lStructSize As Long hWndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String Flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type 'Constantes Private Const OFN_READONLY = &H1 Private Const OFN_OVERWRITEPROMPT = &H2 Private Const OFN_HIDEREADONLY = &H4 Private Const OFN_NOCHANGEDIR = &H8 Private Const OFN_SHOWHELP = &H10 Private Const OFN_ENABLEHOOK = &H20 Private Const OFN_ENABLETEMPLATE = &H40 Private Const OFN_ENABLETEMPLATEHANDLE = &H80 Private Const OFN_NOVALIDATE = &H100 Private Const OFN_ALLOWMULTISELECT = &H200 Private Const OFN_EXTENSIONDIFFERENT = &H400 Private Const OFN_PATHMUSTEXIST = &H800 Private Const OFN_FILEMUSTEXIST = &H1000 Private Const OFN_CREATEPROMPT = &H2000 Private Const OFN_SHAREAWARE = &H4000 Private Const OFN_NOREADONLYRETURN = &H8000 Private Const OFN_NOTESTFILECREATE = &H10000 Private Const OFN_SHAREFALLTHROUGH = 2 Private Const OFN_SHARENOWARN = 1 Private Const OFN_SHAREWARN = 0 Public Function OuvrirUnFichier(Handle As Long, _ Titre As String, _ TypeRetour As Byte, _ Optional TitreFiltre As String, _ Optional TypeFichier As String, _ Optional RepParDefaut As String) As String 'OuvrirUnFichier est la fonction a utiliser dans votre formulaire pour ouvrir _ 'la boîte de dialogue de sélection d'un fichier. 'Explication des paramètres 'Handle = le handle de la fenêtre (Me.Hwnd) 'Titre = Titre de la boîte de dialogue 'TypeRetour (Définit la valeur, de type String, renvoyée par la fonction) '1 = Chemin complet + Nom du fichier '2 = Nom fichier seulement 'TitreFiltre = Titre du filtre 'Exemple: Fichier Access 'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre 'TypeFichier = Extention du fichier (Sans le .) 'Exemple: MDB 'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre 'RepParDefaut = Répertoire d'ouverture par defaut 'Exemple: C:\windows\system32 'Si vous laissé l'argument vide, par defaut il se place dans le répertoire de votre application Dim StructFile As OPENFILENAME Dim sFiltre As String 'Construction du filtre en fonction des arguments spécifiés If Len(TitreFiltre) > 0 And Len(TypeFichier) > 0 Then sFiltre = TitreFiltre & " (" & TypeFichier & ")" & Chr$(0) & "*." & TypeFichier & Chr$(0) End If sFiltre = sFiltre & "Tous (*.*)" & Chr$(0) & "*.*" & Chr$(0) RepParDefaut = "c:\" 'Configuration de la boîte de dialogue With StructFile .lStructSize = Len(StructFile) 'Initialisation de la grosseur de la structure .hWndOwner = Handle 'Identification du handle de la fenêtre .lpstrFilter = sFiltre 'Application du filtre .lpstrFile = String$(254, vbNullChar) 'Initialisation du fichier '0' x 254 .nMaxFile = 254 'Taille maximale du fichier .lpstrFileTitle = String$(254, vbNullChar) 'Initialisation du nom du fichier '0' x 254 .nMaxFileTitle = 254 'Taille maximale du nom du fichier .lpstrTitle = Titre 'Titre de la boîte de dialogue .Flags = OFN_HIDEREADONLY 'Option de la boite de dialogue If ((IsNull(RepParDefaut)) Or (RepParDefaut = "")) Then RepParDefaut = CurrentDb.Name PathStripPath (RepParDefaut) .lpstrInitialDir = Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(Mid$(RepParDefaut, 1, _ InStr(1, RepParDefaut, vbNullChar) - 1))) Else: .lpstrInitialDir = RepParDefaut End If End With If (GetOpenFileName(StructFile)) Then 'Si un fichier est sélectionné Select Case TypeRetour Case 1: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFile, InStr(1, StructFile.lpstrFile, vbNullChar) - 1)) Case 2: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFileTitle, InStr(1, StructFile.lpstrFileTitle, vbNullChar) - 1)) End Select End If End Function Private Sub INSEREFICHIER_Click() If NUM_CLASSE_FICHER_TYPE <> 0 Then Me.CHEMIN_FICHIER_ETAPE_TYPE = OuvrirUnFichier(Me.hwnd, "Parcourir", 1) If CHEMIN_FICHIER_ETAPE_TYPE <> "" Then NOM_FICHIER_ETAPE_TYPE = Dir(CHEMIN_FICHIER_ETAPE_TYPE) Else End If Else MsgBox "Merci de saisir un N° d'ordre de classement" End If End Sub
j'ai essai sa mais sa marche pas qui a une idée,????
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 Option Compare Database Option Explicit Declare Function GetShortPathName Lib "kernel32" _ Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _ ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _ ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Public Function GetShortName(ByVal sLongFileName As String) As String Dim lRetVal As Long, sShortPathName As String, iLen As Integer sShortPathName = Space(255) iLen = Len(sShortPathName) lRetVal = GetShortPathName(sLongFileName, sShortPathName, iLen) GetShortName = Left(sShortPathName, lRetVal) End Function 'Déclaration de l'API Private Declare Sub PathStripPath Lib "shlwapi.dll" Alias "PathStripPathA" (ByVal pszPath As String) Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _ "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long 'Structure du fichier Private Type OPENFILENAME lStructSize As Long hWndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String Flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type 'Constantes Private Const OFN_READONLY = &H1 Private Const OFN_OVERWRITEPROMPT = &H2 Private Const OFN_HIDEREADONLY = &H4 Private Const OFN_NOCHANGEDIR = &H8 Private Const OFN_SHOWHELP = &H10 Private Const OFN_ENABLEHOOK = &H20 Private Const OFN_ENABLETEMPLATE = &H40 Private Const OFN_ENABLETEMPLATEHANDLE = &H80 Private Const OFN_NOVALIDATE = &H100 Private Const OFN_ALLOWMULTISELECT = &H200 Private Const OFN_EXTENSIONDIFFERENT = &H400 Private Const OFN_PATHMUSTEXIST = &H800 Private Const OFN_FILEMUSTEXIST = &H1000 Private Const OFN_CREATEPROMPT = &H2000 Private Const OFN_SHAREAWARE = &H4000 Private Const OFN_NOREADONLYRETURN = &H8000 Private Const OFN_NOTESTFILECREATE = &H10000 Private Const OFN_SHAREFALLTHROUGH = 2 Private Const OFN_SHARENOWARN = 1 Private Const OFN_SHAREWARN = 0 Public Function OuvrirUnFichier(Handle As Long, _ Titre As String, _ TypeRetour As Byte, _ Optional TitreFiltre As String, _ Optional TypeFichier As String, _ Optional RepParDefaut As String) As String 'OuvrirUnFichier est la fonction a utiliser dans votre formulaire pour ouvrir _ 'la boîte de dialogue de sélection d'un fichier. 'Explication des paramètres 'Handle = le handle de la fenêtre (Me.Hwnd) 'Titre = Titre de la boîte de dialogue 'TypeRetour (Définit la valeur, de type String, renvoyée par la fonction) '1 = Chemin complet + Nom du fichier '2 = Nom fichier seulement 'TitreFiltre = Titre du filtre 'Exemple: Fichier Access 'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre 'TypeFichier = Extention du fichier (Sans le .) 'Exemple: MDB 'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre 'RepParDefaut = Répertoire d'ouverture par defaut 'Exemple: C:\windows\system32 'Si vous laissé l'argument vide, par defaut il se place dans le répertoire de votre application Dim StructFile As OPENFILENAME Dim sFiltre As String 'Construction du filtre en fonction des arguments spécifiés If Len(TitreFiltre) > 0 And Len(TypeFichier) > 0 Then sFiltre = TitreFiltre & " (" & TypeFichier & ")" & Chr$(0) & "*." & TypeFichier & Chr$(0) End If sFiltre = sFiltre & "Tous (*.*)" & Chr$(0) & "*.*" & Chr$(0) RepParDefaut = "c:\" 'Configuration de la boîte de dialogue With StructFile .lStructSize = Len(StructFile) 'Initialisation de la grosseur de la structure .hWndOwner = Handle 'Identification du handle de la fenêtre .lpstrFilter = sFiltre 'Application du filtre .lpstrFile = String$(254, vbNullChar) 'Initialisation du fichier '0' x 254 .nMaxFile = 254 'Taille maximale du fichier .lpstrFileTitle = String$(254, vbNullChar) 'Initialisation du nom du fichier '0' x 254 .nMaxFileTitle = 254 'Taille maximale du nom du fichier .lpstrTitle = Titre 'Titre de la boîte de dialogue .Flags = OFN_HIDEREADONLY 'Option de la boite de dialogue If ((IsNull(RepParDefaut)) Or (RepParDefaut = "")) Then RepParDefaut = CurrentDb.Name PathStripPath (RepParDefaut) .lpstrInitialDir = Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(Mid$(RepParDefaut, 1, _ InStr(1, RepParDefaut, vbNullChar) - 1))) Else: .lpstrInitialDir = RepParDefaut End If End With If (GetOpenFileName(StructFile)) Then 'Si un fichier est sélectionné Select Case TypeRetour Case 1: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFile, InStr(1, StructFile.lpstrFile, vbNullChar) - 1)) Case 2: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFileTitle, InStr(1, StructFile.lpstrFileTitle, vbNullChar) - 1)) End Select End If End Function Private Sub INSEREFICHIER_Click() If NUM_CLASSE_FICHER_TYPE <> 0 Then Me.CHEMIN_FICHIER_ETAPE_TYPE = GetShortName(OuvrirUnFichier(Me.hwnd, "Parcourir", 1)) If CHEMIN_FICHIER_ETAPE_TYPE <> "" Then NOM_FICHIER_ETAPE_TYPE = Dir(CHEMIN_FICHIER_ETAPE_TYPE) Else End If Else MsgBox "Merci de saisir un N° d'ordre de classement" End If End Sub
Partager