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é :calim2: 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:
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 |
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:
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