OVH Cloud OVH Cloud

Choix d'un repertoire par VBA

12 réponses
Avatar
Bolderic
Bonjour,


voila, j'ai un UserForm sur lequel un bouton déclenche la fonction
ci-dessous.Cette fonction permet d'ouvrir une fenetre pour
sélectionner un répertoire (pour info, cette fonction bien utile n'est
pas de moi mais d'un généreux anonyme).

Mon soucis est que si je clique à côté de la fenetre (sur l'UserForm
par exemple) la fenetre disparait (elle n'est plus au premier plan).

1. Que faut-il rajouter au code pour que la fenêtre reste au premier
plan tant que l'on a pas validé ou annulé?

2. Autre chose, que faut-il rajouter au code pour faire pointer la
fenêtre sur un dossier en particulier lors de l'affichage de la
fenêtre?

3. Dans le même ordre d'idée, dans le cas d'une fenêtre pour
sélectionner un fichier, est-il possible de faire pointer la fenêtre
sur un fichier en particulier à l'ouverture de la fenêtre?


Si quelqu'un a la réponse ou une piste de recherche, je suis preneur


Merci beaucoup!



La fonction est la suivante:

Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
'32-bit API declarations
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As
String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long


Public Dossier
Public Rap
Public Dossierelec

------------------------------------------------------------------------------------

Function GetDirectory(Optional Msg) As String
Dim bInfo As BROWSEINFO
Dim path As String
Dim r As Long, x As Long, pos As Integer
bInfo.pidlRoot = 0&
If IsMissing(Msg) Then
bInfo.lpszTitle = "Choisissez un dossier de destination pour cette
sauvegarde."
Else
bInfo.lpszTitle = Msg
End If
bInfo.ulFlags = &H1
x = SHBrowseForFolder(bInfo)
path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal path)
If r Then
pos = InStr(path, Chr$(0))
GetDirectory = Left(path, pos - 1) & "\"
Else
GetDirectory = ""
End If
End Function

2 réponses

1 2
Avatar
Jacques93
Bonsoir,
Bonjour,

effectivement, j'ai bien trouvé le fichier "ComDlg32.ocx" sous
Windowssystem32.

Niveau API, je débute. Comment fait-on pour trouver la fonction
appropriée à ce que l'on désire faire? Faut-il les passer toutes en
revue ou existe-t-il une sorte de lexique qui en fonction de ce que
l'on souhaite obtenir vous donne la fonction correspondante?



Dans ce cas là plus d'API... pour les fichiers :-) .

Dans VBA, affiches ton UserForm, dans le menu Outils => Contrôles
supplémentaires, cocher Microsoft Common Dialog (ComDlg32.ocx).

Ajoute ensuite sur ton UserForm un contrôle 'CommonDialog', par défaut
il va s'appeler 'CommonDialog1'

et tu ajoutes ce code :

Private Sub CommandButton1_Click()
With Me.CommonDialog1
.InitDir = NomDuChemin
.FileName = NomDuFichier
.Filter = "Excel (*.xls) | *.xls|Tous (*.*) | *.*"
' Tu peux mettre un ou plusieurs filtres.
' La propriété FilterIndex n'est utile que si tu proposes
' plusieurs filtres
.FilterIndex = 1
.CancelError = False
.ShowOpen
If Len(.FileName) > 0 Then
MsgBox .FileName
End If
End With
End Sub


Avec Common Dialog, tu as les boites standard pour :
Ouverture : .ShowOpen
Enregistrement : .ShowSave
Police : .ShowFont
Couleur : .ShowColor
Imprimantes : .ShowPrinter
Aide : .ShowHelp

--
Cordialement,

Jacques.

Avatar
Bolderic
Merci beaucoup.


A + ... pour de nouveaux problemes :-)
1 2