IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

VBScript Discussion :

Récupérer le chemin d'un fichier avec BrowseForFolder et l'option BIF_browseIncludeFiles = &H4000


Sujet :

VBScript

  1. #1
    Membre du Club
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Points : 57
    Points
    57
    Par défaut Récupérer le chemin d'un fichier avec BrowseForFolder et l'option BIF_browseIncludeFiles = &H4000
    Bonjour,

    Je développe en VB Script dans le logiciel QlikView. Je paramètre un bouton dans le logiciel pour que lorsque l'on clique dessus, ça ouvre une fenetre, l'utilisateur sélectionne (côté serveur) le fichier qu'il souhaite copier en local, ensuite une autre fenetre apparaît pour selectionner le répertoire de destination puis j'utilise la fonction Copy avec les 2 paths récupérés pour rapatrier le fichier.

    Seulement voila, je n'arrive pas à récupérer le path du fichier sélectionné J'ai essayé tout ce qu'ils me disent sur le net, quand j'appuis sur OK après avoir selectionné mon fichier à copier, QlikView me dis que ça bloque à la fonction BrowseForFolder sans m'expliquer exactement pourquoi :\

    J'ai remarqué autre chose : Lorsque je n'inclut pas l'option "BrowseIncludesFile" dans BrowseForFolder, ça ne plante pas à BrowseForFolder mais ça me dit par la suite qu'il n'arrive pas à récupérer tout de même le path.

    Pouvez-vous m'aider svp ?

    Voici mon code :

    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
    'CREATION DES OBJETS
    Set object_exec_cmd = CreateObject("WScript.Shell")
    Set objet_connect_lecteur = CreateObject("WScript.Network")
    Set objet_copie = CreateObject("Scripting.FileSystemObject")
    
    
    'CONNEXION DU LECTEUR RESEAU
    function Connexion()
    	ligne_cmd = "net use W: \\frer0645\out"
    	Call object_exec_cmd.Run (ligne_cmd)
    end function 
    
    
    function fnGetMyPathVB() 
    	BIF_browseIncludeFiles = &H4000
    	BIF_noFolderButton = &H200
    	BIF_editbox = &H0010
    	
    	
    	dim oFolder
    	dim objFolderItem
    	
    	Dim objPath
    	
    	
    	
    	set oShell = CreateObject("Shell.Application") 
    	 Set oFolder = oShell.BrowseForFolder(0, "Select a file or folder", BIF_browseIncludeFiles,"frer0645\out")
    	
    'Je tente de recupérer le path du fichier mais ça bloque avant, à BrowseForFolder
    	   if (not oFolder is nothing) then
    	ShowOpenFolder="C:"
    	
    	Set objFolderItem = oFolder.Self
    	objPath = objFolderItem.Path
    	ShowOpenFolder = objPath
    	
    end if
    set oFolder = nothing
    set oShell = nothing
    
    
    Verif()                                                 
    end function
    
    
    'VERIFICATION LECTEUR RESEAU CONNECTE AVANT COPIE
    function Verif()
    
    do while objet_copie.DriveExists("W:") = false
    loop
    
    Copie() 'La copie peut s'effectuer une fois le lecteur connecté
    end function
    
    
    'COPIE DU FICHIER
    function Copie()
    objet_copie.CopyFile "objPath","C:\\"
    end function
    
    
    'PROCEDURE PRINCIPALE	
    Sub DownloadFile()
    Connexion() 'Si le lecteur existe, reconnexion.
    Verif()
    fnGetMyPathVB() 
    
    
    end Sub

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

    Informations forums :
    Inscription : Février 2006
    Messages : 1 300
    Points : 3 556
    Points
    3 556
    Par défaut
    bonjour,
    Seulement voila, je n'arrive pas à récupérer le path du fichier sélectionné
    si la fonction s'appelle BrowseForFolder c'est justement parce qu'elle renvoie un répertoire et seulement un répertoire
    des petits farceurs chez MS ont effectivement prévu un flag piégé BIF_BROWSEINCLUDEFILES qui autorise l'affichage des fichiers.
    seulement si l'utilisateur sélectionne un item fichier au lieu d'un répertoire, l'objet renvoyé par la fonction est ... nul
    donc, soit tu cherches un répertoire et tu dois supprimer ce flag pour éviter les erreurs
    soit tu cherches un fichier et il te faut une autre fonction
    les solutions sont différentes selon les versions de windows (XP, Vista ou Seven)
    fait un google avec "browseforfile et vbscript"
    ou http://vb.developpez.com/faqvbs/?pag...gOuvrirFichier

  3. #3
    Membre du Club
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    Merci de m'avoir éclairé à ce sujet. En effet, je ne comprends pas pourquoi on peut inclure les fichiers mais qu'on ne peut rien faire avec. Bref,

    Je vais approfondir mes recherches sur les pistes que tu m'as donné, et je te tiens au courant.

  4. #4
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 840
    Points : 9 225
    Points
    9 225
    Par défaut
    j'ai trouvé une solution pour BrowseForFile Dans Un autre Forum dans le Net et voila cette Fonction peut-être elle vous aidera ou bien à d'autres personnes:
    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
    Function BrowseForFile()
     Dim shell : Set shell = CreateObject("WScript.Shell")
     Dim fso : Set fso = CreateObject
     
    ("Scripting.FileSystemObject")
     Dim tempFolder : Set tempFolder = fso.GetSpecialFolder(2)
     Dim tempName : tempName = fso.GetTempName()
     Dim tempFile : Set tempFile = tempFolder.CreateTextFile(tempName & ".hta")
     tempFile.Write _
     "<html>" & _
     "    <head>" & _
     "        <title>Browse</title>" & _
     "    </head>" & _
     "    <body>" & _
     "        <input type='file' id='f'>" & _
     "        <script type='text/javascript'>" & _
     "            var f = document.getElementById('f');" & _
     "            f.click();" & _
     "            var shell = new ActiveXObject
     
    ('WScript.Shell');" & _
     "            shell.RegWrite
     
    ('HKEY_CURRENT_USER\\Volatile 
     
    Environment\\MsgResp', f.value);" & _
     "            window.close();" & _
     "        </script>" & _
     "    </body>" & _
     "</html>"
     tempFile.Close
     
     shell.Run tempFolder & "\" & tempName & ".hta", 1, True
     
     BrowseForFile = shell.RegRead
     
    ("HKEY_CURRENT_USER\Volatile 
     
    Environment\MsgResp")
     shell.RegDelete "HKEY_CURRENT_USER\Volatile 
     
    Environment\MsgResp"
    End Function
     
    MsgBox BrowseForFile

  5. #5
    Membre du Club
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    J'ai eu beaucoup de problème d'incompatibilité étant donné que je développe sous Windows Server 2003 R2.

    Mais j'ai tout de même réussi en utilisant SAFRCFileDlg.FileOpen.

    Il me reste quelques détails à régler, notamment le fait de pouvoir choisir son répertoire de référence pour choisir le fichier au début.

    Je cherche depuis une demi heure mais apparemment, on ne peux pas définir un répertoire de référence avec SAFRCFileDlg.FileOpen.
    On peut le faire avec UserAccounts.CommonDialog en utilisant oDlg.InitialDir, mais cet objet est incompatible avec Windows Server :\

    Je continue mes recherches ...

    Merci à vous pour votre aide

  6. #6
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 840
    Points : 9 225
    Points
    9 225
    Par défaut
    essaye ce script et si par hasard tu trouves une autre solution n’oublies pas de nous la partager ça pourrai être utile à d’autres personnes
    voir même ton script complet
    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
    Call BrowseFolder
    Sub BrowseFolder
    Const BIF_returnonlyfsdirs   = &H0001
    Const BIF_dontgobelowdomain  = &H0002
    Const BIF_statustext         = &H0004
    Const BIF_returnfsancestors  = &H0008
    Const BIF_editbox            = &H0010
    Const BIF_validate           = &H0020
    Const BIF_browseforcomputer  = &H1000
    Const BIF_browseforprinter   = &H2000
    Const BIF_browseincludefiles = &H4000
     
    Dim shell, item
    Set shell = WScript.CreateObject("Shell.Application")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    titre="Veuillez SVP choisir un dossier:"
    flag=BIF_editbox
    dirinit = BIF_returnonlyfsdirs 
    Set Item = shell.BrowseForFolder(&H0,titre,flag+dirinit)
    If isvalue(Item) Then
    	strDirectory=Item.Title
    ' Test si on a sélectionné la racine d'une partition 
    	If InStr(1,strDirectory,":")=0 Then
    		strDirectory=Item.ParentFolder.ParseName(Item.Title).Path
    		End If
    	MsgBox "Vous avez choisi : " & strDirectory,64, "Choix du Dossier"
     
     
     ' Ouverture du Dossier par l'explorateur windows
     If err.number = vbEmpty then
     Set objShell = CreateObject("WScript.Shell")
     objShell.run ("Explorer" &" " & strDirectory & "\" )
     Else
     WScript.echo "VBScript Error: " & err.number
     End If
    else
    	MsgBox "Vous avez choisi d'annuler l'opération !",64,"Choix du Dossier"	
    	End If
    Wscript.quit
    end sub
    '--------------------------------------------------------------
    ' Test de validité de l'objet retourné par BrowseForFolder
    ' On ne peut pas utiliser "IsObject", qui retourne toujours "true"
    Function IsValue(obj)
    Dim tmp
    On Error Resume Next
    tmp = " " & obj
    If Err <> 0 Then IsValue = False Else IsValue = True
    On Error GoTo 0
    End Function
    Bonne programmation

  7. #7
    Membre du Club
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    Oui, je mettrais la solution sur le forum une fois le script terminé.

    Quelqu'un sait s'il est possible de choisir le répertoire initial lorsque l'on ouvre une box avec SAFRCFileDlg.FileOpen ?

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

    Informations forums :
    Inscription : Février 2006
    Messages : 1 300
    Points : 3 556
    Points
    3 556
    Par défaut
    Quelqu'un sait s'il est possible de choisir le répertoire initial lorsque l'on ouvre une box avec SAFRCFileDlg.FileOpen ?
    c'est malheureusement impossible, le composant ne possède qu'une propriété FileName qui n'est disponible qu'en lecture après appel de la méthode OpenFileOpendDlg

  9. #9
    Membre du Club
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    Ok, j'arrête donc de perdre mon temps en cherchant cela alors

    Je développe sous Windows Server 2003, et pour le moment, je n'ai trouver que ce composant (SAFRCFileDlg.FileOpen) qui soit compatible. C'est dommage que UserAccounts.CommonDialog ne fonctionne pas car on peut choisir un répertoire initial avec.

    Quelqu'un a-t-il une idée sur une autre solution envisageable ?

    Je réfléchis à comment esquiver le problème du répertoire initial.

    Merci à tous pour votre aide.

  10. #10
    Membre du Club
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    Finalement, ce n'est pas très grave le fait de ne pas pouvoir choisir le répertoire initial car il ouvre la box la où l'on a choisit le dernier fichier. Au final, comme mes fichiers se trouvent au même endroit, ce n'est pas un problème.

    En revanche, ce que je cherche depuis le début de l'après-midi, c'est comment récupérer le nom de l'ordinateur avec lequel je me connecte à distance sur le serveur, à partir du serveur. J'explique :

    - Je me connecte au serveur par l'intermédiaire de "Connexion de Bureau à distance". C'est sur ce serveur que mon script tourne.

    Je rappelles que mon script doit rapatrier un fichier présent sur ce serveur vers l'ordinateur avec lequel on se connecte à distance. Les ordinateurs qui vont se connecter seront différents, il faut donc que j'automatise la détection du nom de l'ordinateur à partir du script qui tourne côté serveur.

    - Ensuite, je pourrai connecté un lecteur réseau pointant sur l'ordinateur, et copier le fichier.

    Seulement, je ne trouve pas comment trouver le nom de mon ordinateur à partir du serveur.

    Est-ce possible ?

  11. #11
    Membre du Club
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    Bon, même si je fais un monologue depuis quelques temps, je vous tiens au courant pour ceux que ça intéresse.

    Concernant mon problème d'hier, je fais tout simplement un InputBox pour demander à l'utilisateur le nom de son ordinateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function Connexion()
     
    	Dim computername
    	computername = InputBox("Veuillez taper le nom de votre ordinateur svp (exemple Ordinateur1) :","Nom de votre ordinateur","")
    	ligne_cmd = "net use N: \\computername\testshare"
    	Call object_exec_cmd.Run (ligne_cmd)
     
    end function
    Mais, j'ai un petit problème avec cela : Le InputBox fonctionne bien car j'ai vérifié en faisant un et il m'affiche parfaitement le nom que l'utilisateur tape dans le InputBox.

    Ma commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne_cmd = "net use N: \\computername\testshare"
    ne fonctionne pas car je pense qu'il n'interprète pas la variable computername.

    Peut-on préciser que c'est une variable ?

  12. #12
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 107
    Points : 16 633
    Points
    16 633
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne_cmd = "net use N: \\" & computername & "\testshare"

  13. #13
    Membre du Club
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    Merci beaucoup ProgElecT

  14. #14
    Membre du Club
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    J'ai une autre question :

    Comment puis-je gérer le fait que l'utilisateur clique sur annuler dès la première box par exemple ?

    Je poste tout le code tel qu'il est actuellement :

    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
    'CREATION DES OBJETS
    Set object_exec_cmd = CreateObject("WScript.Shell")
    Set objet_connect_lecteur = CreateObject("WScript.Network")
    Set objet_copie = CreateObject("Scripting.FileSystemObject")
     
     
    'CONNEXION DU LECTEUR RESEAU
    Function Connexion()
     
    	Dim computername
     
    'Récupération du nom de l'ordinateur
    	computername = InputBox("Veuillez taper le nom de votre ordinateur svp (exemple FREL21524) :","Nom de votre ordinateur","")
    'Connexion du lecteur réseau
    	ligne_cmd = "net use N: \\"& computername &"\Destination"
    	Call object_exec_cmd.Run (ligne_cmd)
     
    End function
     
     
    'VERIFICATION LECTEUR RESEAU CONNECTE AVANT COPIE
    function Verif()
     
    	Connexion()
     
    	do while objet_copie.DriveExists("N:") = false
    	loop
     
    end function
     
     
     
    Function Copie_fichier()
    	Dim oFolder
    	Dim objFolderItem
    	Dim objPath
     
     
    	Option_noFolderButton = &H200
     
    	Verif()
     
    'BOX SELECTION
    	Set objDialog=CreateObject("SAFRCFileDlg.FileOpen")
    	ObjDialog.OpenFileOpenDlg
     
    'Récupération du chemin du fichier à copier
    	fichier_copie=objDialog.FileName
     
     
    'BOX DESTINATION
    	Set oShell = CreateObject("Shell.Application") 
    	Set oFolder = oShell.BrowseForFolder(0, "Selectionner le répertoire de destination", Option_noFolderButton ,"N:\")
     
    'Récupération du chemin du répertoire de destination
    	If (not oFolder is nothing) then
    		Set objFolderItem = oFolder.Self
    		rep_dest = objFolderItem.Path
    	End if
     
    'Copie du fichier du serveur vers le répertoire en local
    	objet_copie.CopyFile fichier_copie,rep_dest,True
     
    	Set oFolder = nothing
    	Set oShell = nothing
    	Set objDialog=Nothing                                    
     
    End function
     
     
     
     
    'PROCEDURE PRINCIPALE	
    Sub DownloadFile()
    	Copie_fichier()
    End Sub
    J'ai essayer d’interrompre le code avec WScript.Quit, mais cela ne fonctionne pas, j'ai une erreur. De plus, je ne sais pas comment dire "Si l'utilisateur appuie sur Annuler, ..." : Le bouton annuler renvoie-t-il quelque chose ?

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

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 417
    Points : 5 816
    Points
    5 816
    Par défaut
    Bonjour;

    Ton code ne s'exécutera pas tant que tu n'as pas appelé la fonction ou procédure de démarrage qui est Copie_fichier je suppose.(DownloadFile est la même que cette fonction)

    Il faut l'appeler juste après la déclaration des 3 premiers objets.

  16. #16
    Membre du Club
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    Excuse moi, je n'ai pas très bien compris.
    Je cherche à stopper l’exécution du code si l'utilisateur appuie sur annuler.

    Pour cela, j'aimerai savoir si "Annuler" renvoi une variable par exemple, et quelle est la commande qui stoppe l’exécution du code mise à part qui ne fonctionne pas.

  17. #17
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 1
    Points : 3
    Points
    3
    Par défaut Optimisation du script de sélection de fichier
    Bonjour,

    Tout d'abord, super le programme, cela faisait plusieurs heures que je cherchais une solution me permettant de faire cette sélection, sans avoir à implémenter de module supplémentaire sur mes serveurs.


    Par contre, je me suis permis de rectifier ce script, en y ajoutant 3 lignes car j'y ai trouvé deux soucis :
    - Le fichier temporaire n'était pas purgé.
    - En cas d'utilisation sur un serveur avec plusieurs utilisateurs sous le même identifiant on pouvait avoir un écrasement de la clé de registre temporaire utilisée pour stocker le nom de fichier sélectionné.
    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
     
    Function BrowseForFile()
     Dim shell : Set shell = CreateObject("WScript.Shell")
     Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
     Dim tempFolder : Set tempFolder = fso.GetSpecialFolder(2)
     Dim tempName : tempName = fso.GetTempName()
     Dim tempFile : Set tempFile = tempFolder.CreateTextFile(tempName & ".hta")
     tempFile.Write _
     "<html>" & _
     "    <head>" & _
     "        <title>Browse</title>" & _
     "    </head>" & _
     "    <body>" & _
     "        <input type='file' id='f'>" & _
     "        <script type='text/javascript'>" & _
     "            var f = document.getElementById('f');" & _
     "            f.click();" & _
     "            var shell = new ActiveXObject('WScript.Shell');" & _
     "            shell.RegWrite('HKEY_CURRENT_USER\\Volatile Environment\\MsgResp" & tempName & _
     "', f.value);" & _
     "            window.close();" & _
     "        </script>" & _
     "    </body>" & _
     "</html>"
     tempFile.Close
     
     shell.Run tempFolder & "\" & tempName & ".hta", 1, True
     
     BrowseForFile = shell.RegRead("HKEY_CURRENT_USER\Volatile Environment\MsgResp" & tempName)
     shell.RegDelete "HKEY_CURRENT_USER\Volatile Environment\MsgResp" & tempName
     fso.DeleteFile(tempFolder & "\" & tempName & ".hta")
     
    End Function
     
    MsgBox BrowseForFile
    Et encore merci.

    JF

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 19
    Points : 33
    Points
    33
    Par défaut Joli travail
    @jfchaix
    Déjà 6 ans et ça marche toujours et ça m'a bien dépanner.

    C'est une belle boîte de dialogue pur jus Windows et elle fonctionne très bien sur Windows 10, 64 bits.
    Une fonction à mettre sous le coude, au cas où.

    Merci beaucoup de ce partage.

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

    Informations forums :
    Inscription : Février 2006
    Messages : 1 300
    Points : 3 556
    Points
    3 556
    Par défaut
    bonjour,

    sauf que depuis 2013 il existe un code plus simple sans création de fichier temporaire ni de clé de registre...
    voir la FAQ
    et ce fil de discussion

Discussions similaires

  1. Récupérer le chemin d'un fichier avec un input file
    Par L'aigle de Carthage dans le forum Général JavaScript
    Réponses: 31
    Dernier message: 05/06/2011, 10h57
  2. Récupérer le nom d'un fichier avec son chemin
    Par hacksi dans le forum Langage
    Réponses: 2
    Dernier message: 31/03/2008, 17h39
  3. [VBA_E] Récupérer le chemin d'un fichier ouvert
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/01/2007, 17h30
  4. Récupérer les propriétés d'un fichier avec GtkFileChooser
    Par yodo21 dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 26/10/2006, 17h30
  5. Réponses: 1
    Dernier message: 26/07/2006, 02h47

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