OVH Cloud OVH Cloud

Sélection de fichiers

2 réponses
Avatar
Christophe CHENAVIER
Bonjour,

Le script suivant permet de sélectionner un fichier, mais ce n'est pas une
boîte de sélection très pratique (on ne peut pas filtrer sur une extension
par exemple)

Const WINDOW_HANDLE = 0
Const SHOWFILES = 16384 'Displays files

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder _
(WINDOW_HANDLE, "Choix du fichier : ", SHOWFILES,
cSourceFolder)
On Error Resume Next
Set objFolderItem = objFolder.Self
If Not Err Then
wscript.echo objFolderItem.Path
End IF

Comment avoir accès à la boîte de sélection de fichiers usuelle de windows ?
Est-ce possible ?

2 réponses

Avatar
Jean-Claude BELLAMY
Dans le message news:e$MOn% ,
Christophe CHENAVIER s'est ainsi exprimé:

Bonjour,

Le script suivant permet de sélectionner un fichier, mais ce n'est
pas une boîte de sélection très pratique (on ne peut pas filtrer sur
une extension par exemple)

Const WINDOW_HANDLE = 0
Const SHOWFILES = 16384 'Displays files

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder _
(WINDOW_HANDLE, "Choix du fichier : ", SHOWFILES,
cSourceFolder)
On Error Resume Next
Set objFolderItem = objFolder.Self
If Not Err Then
wscript.echo objFolderItem.Path
End IF

Comment avoir accès à la boîte de sélection de fichiers usuelle de
windows ? Est-ce possible ?


Oui, mais en ajoutant "des choses" !

Personnellement, je passe par un contrôle ActiveX (créé en VB) qui fait
appel à la fonction "GetOpenFileName" de la dll "comdlg32.dll"
Dans mon ActiveX "fourre-tout" "JCB.OCX", j'ai inclus une commande
OpenFile(ByVal initfile As String, ByVal Filter As String, _
ByVal defExt As String, ByVal Title As String) As String
que j'utilise dans mes VBS

A titre d'exmple, et pour faire plus simple, je viens de créer un contrôle
"dialog.ocx" (enregistré comme composant "dialog.file") qui ne contient que
cette fonction.

Il est librement téléchargeable ici :
http://www.bellamyjc.org/download/dialog.zip (7 ko)
Le zip contient le .ocx et toutes les sources (.ctl, .vbp, ...) que tu
pourras adapter à ta convenance.

Pour le (re)compiler, VBCCE (gratuit) suffit :
http://www.bellamyjc.org/fr/vbsgeneralites.html#VBCCE

Quant à son utilisation dans un VBS, elle est très simple.

Il faut tout d'abord enregistrer l'ActiveX (une fois pour toutes) :
regsvr32 dialog.ocx
(c'est fait automatiquement si on recompile le programme)

fichier "testdialog.vbs"

------ couper ici ------
Set dlg = wscript.CreateObject("dialog.file","")
NomInitial="c:boot.ini"
Filtre1="Texte (*.txt;*.ini;*.log)|*.txt;*.ini;*.log|"
Filtre2="Image (*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif)|"
Filtre3="Exécutable (*.exe;*.com;*.scr)|*.exe;*.com;*.scr|"
Filtre4="Scripts (*.bat;*.cmd;*.vbs;*.js)|*.bat;*.cmd;*.vbs;*.js|"
Filter5="Tout fichier (*.*)|*.*"
Filtres=Filtre1 & Filtre2 & Filtre3 & Filtre4 & Filtre5
DefautExt="txt"
Titre="Test d'ouverture de fichier"
filename=dlg.Openfile(NomInitial,Filtres,DefautExt,Titre)
wscript.echo "Fichier sélectionné : " & FileName
------ couper ici ------

Tu pourras modifier p.ex. la ligne suivante :
ofn.FLAGS = OFN_EXPLORER + OFN_FILEMUSTEXIST + OFN_HIDEREADONLY +
OFN_PATHMUSTEXIST
qui signifie :
- nouvelle interface Explorateur de fichier
(celle de W2K/XP)
- le fichier doit exister
- la case "lecture seule" est masquée
- le chemin doit exister

Tu pourras aussi (si tu veux) ajouter la fonction "GetSaveFileName" pour
enregistrer un fichier
(la structure est strictement identique) :
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
....

NB: Dans le source, j'ai défini toutes les constantes utilisables
(OFN_OVERWRITEPROMPT, OFN_NOVALIDATE, OFN_ALLOWMULTISELECT,
OFN_CREATEPROMPT,...)

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
http://www.bellamyjc.org *


Avatar
Christophe CHENAVIER
Merci beaucoup Jean Claude !

"Jean-Claude BELLAMY" a écrit
Personnellement, je passe par un contrôle ActiveX (créé en VB) qui fait
appel à la fonction "GetOpenFileName" de la dll "comdlg32.dll"
Dans mon ActiveX "fourre-tout" "JCB.OCX", j'ai inclus une commande
OpenFile(ByVal initfile As String, ByVal Filter As String, _
ByVal defExt As String, ByVal Title As String) As String
que j'utilise dans mes VBS

A titre d'exmple, et pour faire plus simple, je viens de créer un contrôle
"dialog.ocx" (enregistré comme composant "dialog.file") qui ne contient
que

cette fonction.

Il est librement téléchargeable ici :
http://www.bellamyjc.org/download/dialog.zip (7 ko)
Le zip contient le .ocx et toutes les sources (.ctl, .vbp, ...) que tu
pourras adapter à ta convenance.

Pour le (re)compiler, VBCCE (gratuit) suffit :
http://www.bellamyjc.org/fr/vbsgeneralites.html#VBCCE

Quant à son utilisation dans un VBS, elle est très simple.

Il faut tout d'abord enregistrer l'ActiveX (une fois pour toutes) :
regsvr32 dialog.ocx
(c'est fait automatiquement si on recompile le programme)

fichier "testdialog.vbs"

------ couper ici ------
Set dlg = wscript.CreateObject("dialog.file","")
NomInitial="c:boot.ini"
Filtre1="Texte (*.txt;*.ini;*.log)|*.txt;*.ini;*.log|"
Filtre2="Image (*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif)|"
Filtre3="Exécutable (*.exe;*.com;*.scr)|*.exe;*.com;*.scr|"
Filtre4="Scripts (*.bat;*.cmd;*.vbs;*.js)|*.bat;*.cmd;*.vbs;*.js|"
Filter5="Tout fichier (*.*)|*.*"
Filtres=Filtre1 & Filtre2 & Filtre3 & Filtre4 & Filtre5
DefautExt="txt"
Titre="Test d'ouverture de fichier"
filename=dlg.Openfile(NomInitial,Filtres,DefautExt,Titre)
wscript.echo "Fichier sélectionné : " & FileName
------ couper ici ------

Tu pourras modifier p.ex. la ligne suivante :
ofn.FLAGS = OFN_EXPLORER + OFN_FILEMUSTEXIST + OFN_HIDEREADONLY +
OFN_PATHMUSTEXIST
qui signifie :
- nouvelle interface Explorateur de fichier
(celle de W2K/XP)
- le fichier doit exister
- la case "lecture seule" est masquée
- le chemin doit exister

Tu pourras aussi (si tu veux) ajouter la fonction "GetSaveFileName" pour
enregistrer un fichier
(la structure est strictement identique) :
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
....

NB: Dans le source, j'ai défini toutes les constantes utilisables
(OFN_OVERWRITEPROMPT, OFN_NOVALIDATE, OFN_ALLOWMULTISELECT,
OFN_CREATEPROMPT,...)

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
http://www.bellamyjc.org *