Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    février 2006
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 1 221
    Points : 3 312
    Points
    3 312

    Par défaut [VBS]Dialogue "Sélectionner un fichier" toutes versions de Windows avec filtres et choix du répertoire initial

    bonjour,

    selon le principe que "deux c'est déjà trop", j'ai écris une fonction en une ligne qui permet la sélection d'un fichier
    dans une boite de dialogue.
    c'est une version étendue de ma précédente fonction qui permet désormais de choisir facilement le répertoire
    de départ du dialogue, les éventuels filtres ainsi que le titre du dialogue.
    compatible toutes versions et notamment vista, seven et 8

    pas de composant additionnel, pas d'horreurs comme l'utilisation de clés de registre ou de fichiers temporaires
    c'est du straight microsoft
    qui a dit ? : pour une fois !!

    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
    '************************************************************************************** 
    ' GetFileDlg() And GetFileDlgBar() by omen999 - may 2014 - http://omen999.developpez.com
    ' Universal Browse for files function  
    ' compatibility : all versions windows and IE - supports start folder, filters and title
    ' note : the global size of the parameters cannot exceed 191 chars for GetFileDlg and 227 chars for GetFileDlgBar
    ' for people who want to tell their life's story within browse dialogs, this limit can be removed but it would take two more lines of code so.. no way
    '*******************************************************************************************
    Function GetFileDlg(sIniDir,sFilter,sTitle)
    	GetFileDlg=CreateObject("WScript.Shell").Exec("mshta.exe ""about:<object id=d classid=clsid:3050f4e1-98b5-11cf-bb82-00aa00bdce0b></object><script>moveTo(0,-9999);function window.onload(){var p=/[^\0]*/;new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(p.exec(d.object.openfiledlg('" & sIniDir & "',null,'" & sFilter & "','" & sTitle & "')));close();}</script><hta:application showintaskbar=no />""").StdOut.ReadAll
    End Function
     
    Function GetFileDlgBar(sIniDir,sFilter,sTitle)
    	GetFileDlgBar=CreateObject("WScript.Shell").Exec("mshta.exe ""about:<object id=d classid=clsid:3050f4e1-98b5-11cf-bb82-00aa00bdce0b></object><script>moveTo(0,-9999);function window.onload(){var p=/[^\0]*/;new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(p.exec(d.object.openfiledlg('" & sIniDir & "',null,'" & sFilter & "','" & sTitle & "')));close();}</script>""").StdOut.ReadAll
    End Function
     
    ' sample test
    sIniDir = "C:\Windows\Fonts\*"
    sFilter = "All files (*.*)|*.*|Microsoft Word (*.doc;*.docx)|*.doc;*.docx|Adobe pdf (*.pdf)|*.pdf|"
    sTitle = "GetFileDlg by omen999 2014 - omen999.developpez.com"
     
    ' (sIniDir + sFilter + sTitle) size doesn't exceed 191 chars (227 for GetFileDlgBar)
    ' MsgBox Len(Replace(sIniDir,"\","\\")) + Len(sFilter) + Len(sTitle)
     
    ' sIniDir must be conformed to the javascript syntax
    rep = GetFileDlg(Replace(sIniDir,"\","\\"),sFilter,sTitle)
    MsgBox rep & vbcrlf & Len(rep)
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  2. #2
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    février 2006
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 1 221
    Points : 3 312
    Points
    3 312

    Par défaut

    les principes sont fait pour être violés...
    bon, en fait j'avais besoin d'un filtre à rallonge

    donc je publie la version étendue GetFileDlgEx sans limitation de taille pour les paramètres d'entrée
    qui tient en trois lignes au lieu d'une.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function GetFileDlgEx(sIniDir,sFilter,sTitle) '"no limit" Browse dialog : the global size of the parameters isn't limited anymore
    	Set oDlg = CreateObject("WScript.Shell").Exec("mshta.exe ""about:<object id=d classid=clsid:3050f4e1-98b5-11cf-bb82-00aa00bdce0b></object><script>moveTo(0,-9999);eval(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(0).Read("&Len(sIniDir)+Len(sFilter)+Len(sTitle)+41&"));function window.onload(){var p=/[^\0]*/;new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(p.exec(d.object.openfiledlg(iniDir,null,filter,title)));close();}</script><hta:application showintaskbar=no />""")
    	oDlg.StdIn.Write "var iniDir='" & sIniDir & "';var filter='" & sFilter & "';var title='" & sTitle & "';"
    	GetFileDlgEx = oDlg.StdOut.ReadAll
    End Function
    ps : c'est cette version qui figure dans la
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  3. #3
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    février 2006
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 1 221
    Points : 3 312
    Points
    3 312

    Par défaut

    un message récent m'a rappelé que j'avais omis d'apporter
    quelques précisions sur la syntaxe de cette fonction notamment
    pour une définition correcte des filtres

    le paramètre sIniDir définit à la fois le répertoire d'ouverture ET
    le 1er item actif du filtre (d'où la nécessité de placer cet item en tête de liste dans sFilter)
    c'est la raison pour laquelle mon exemple définit un sIniDir se terminant par un astérisque
    puisque le 1er item de sFilter est "All Files"

    il y a toutefois, une petite subtilité de syntaxe :
    pour être reconnue, l'extension doit aussi être précédée d'un astérisque...
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  4. #4
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    2 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 271
    Points : 5 380
    Points
    5 380

    Par défaut

    Bonjour omen999

    On peut éviter à l'utilisateur la saisie du caractère * à la fin de sIniDir en mettant ce caractère comme suit, juste au début de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      If Right(sIniDir,1) = "\" Then sIniDir = Left(sIniDir,Len(sIniDir)-1)
      If Right(sIniDir,3) <> "\\*" Then sIniDir = sIniDir + "\\*"
    De cette façon, si on écrit sIniDir = "C:\Windows" avec ou sans séparateur de répertoire à la fin, le code est bien exécuté.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

Discussions similaires

  1. Boite dialogue pour sélectionner plusieurs fichiers
    Par livebe dans le forum VBScript
    Réponses: 4
    Dernier message: 30/12/2014, 13h24
  2. Boite de dialogue pour sélectionner un fichier / un répertoire
    Par Sylvaner dans le forum Téléchargez
    Réponses: 6
    Dernier message: 23/01/2014, 13h53
  3. Nettoyage complet batch - Toutes versions OS Windows
    Par greg110774 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 16/07/2010, 16h41
  4. Réponses: 2
    Dernier message: 10/07/2007, 16h55
  5. Réponses: 3
    Dernier message: 25/12/2006, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo