Bonsoir à tous les développeurs ici-présents !
Je fais appel à vos connaissances et votre aide concernant un petit soucis que je rencontre actuellement dans VB2010.
À noter que je ne connais absolument pas le VB. Je "découvre" grâce à mon entreprise qui me demande de reprendre un projet développé en interne, afin de l'améliorer et de le rendre fonctionnel (voir plus bas, c'est expliqué).
Je m'explique :
je cherche à intégrer en code VB une solution qui permet de monter un lecteur réseau. Mais il y a une petite particularité : son nom, que je souhaite modifier.
Actuellement, le plus 'facile' pour moi est de me servir de ce code VBScript :
Avec ces quelques lignes, je réussis parfaitement à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 strDriveLetter = "Z:" strRemotePath = "\\Serveur\Dossier1\Dossier2\Dossier3\NomduPartageARallongeQuiNenFinitAbsolumentPasEtQuiEstTotallementIllisible" strNewName = "NomAbrégé" Set objNetwork = CreateObject("WScript.Network") objNetwork.MapNetworkDrive strDriveLetter, strRemotePath, true, "CompteUtilisateur", "MotDePasse" Set objShell = CreateObject("Shell.Application") objShell.NameSpace(strDriveLetter).Self.Name = strNewName
1. mapper le lecteur réseau
2. lui donner le nom que je veux.
Ainsi, grâce à ce VBScript, dans l'Explorateur de Fichiers, je ne vois plus ça :
mais ça :NomduPartageARallongeQuiNenFinitAbsolumentPasEtQuiEstTotallementIllisible sur \\Serveur\Dossier1\Dossier2\Dossier3\ ( Z: )
ce qui est nettement plus clair, non ?NomAbrégé ( Z: )
Mais aujourd'hui, mon entreprise me demande de reprendre un projet VB afin de le mettre à jour. Ce projet porte sur le fait que l'on puisse lancer plusieurs applications de notre choix, par le biais de CheckBoxes, via un bouton 'final' nommé "Lancer". Ainsi, si on coche 2 des 10 cases présentes, puis que l'on clique sur "LANCER", les applications cochées se lancent alors d'elles-même. Mais il y a un petit problème : c'est que ces applications sont toutes sur le fameux lecteur Z:. Vous me suivez toujours ?
Actuellement, dans ce projet VB, c'est la ligne suivante qui a été utilisée :
Elle s'active dès le lancement de l'application VB et monte alors le lecteur Z:, mais avec le nom à rallonge, ce qui n'est pas très... esthétique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Shell("net use Z:" & Chr(34) & "\\Serveur\Dossier1\Dossier2\Dossier3\NomduPartageARallongeQuiNenFinitAbsolumentPasEtQuiEstTotallementIllisible" & Chr(34) & " " & Chr(34) & "MotDePasse" & Chr(34) & " /user:CompteUtilisateur")
Moi ce que je voudrais, c'est donc pouvoir monter le lecteur, tout en lui donnant le nom que je veux. Je suppose que c'est possible à mettre en place, mais actuellement je sèche un peu. On fouillant sur le Net ainsi qu'ici, j'ai trouvé quelques codes somme-toute intéressants, mais que je n'arrive pas à faire fonctionner... Voici ce que j'ai aujourd'hui :
Je suis sûr & certain que les développeurs que vous êtes vont grincer des dents en voyant mon code qui pourrait peut-être être épuré ou amélioré. Ce que je sais aujourd'hui, c'est que ça ne fonctionne pas. Le lecteur ne monte absolument pas, et je n'ai pas le message d'erreur non plus.
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 Private Function MapNetworkDrive() As Integer 'MAPPAGE DU LECTEUR Z: 'Déclaration des objets Dim objNetwork, objShell, objFSO As Object Dim ZDriveLetter, ZRemotePath, ZDriveNewName, ZUsr, ZPwd As Object 'Déclaration des variables ZDriveLetter = "Z:" ZRemotePath = "\\Serveur\Dossier1\Dossier2\Dossier3\NomduPartageARallongeQuiNenFinitAbsolumentPasEtQuiEstTotallementIllisible" ZDriveNewName = "NomAbrégé " ZUsr = "CompteUtilisateur" ZPwd = "MotDePasse" 'Instanciation des objets Try objNetwork = CreateObject("WScript.Network") objFSO = CreateObject("Scripting.FileSystemObject") 'Vérification de la présence du lecteur réseau : If Not objFSO.DriveExists(ZDriveLetter) Then 'Si le lecteur n'existe pas, alors on le connecte : objNetwork.MapNetworkDrive(ZDriveLetter, ZRemotePath, "false", ZUsr, ZPwd) objShell = CreateObject("Shell.Application") objShell.NameSpace(ZDriveLetter).Self.Name = ZDriveNewName 'Le lecteur existe, alors on le déconnecte pour le remapper Else objNetwork.RemoveNetworkDrive(ZDriveLetter, True) objNetwork.MapNetworkDrive(ZDriveLetter, ZRemotePath, "false", ZUsr, ZPwd) objShell = CreateObject("Shell.Application") objShell.NameSpace(ZDriveLetter).Self.Name = ZDriveNewName End If Catch err As System.Exception 'Capture de l'erreur, le cas échéant MsgBox("Map->" + ZDriveLetter + ZRemotePath + " || " + err.ToString) End Try End Function
J'en appelle donc à vous pour :
1. m'aider dans la conception/amélioration de ces lignes de code
2. me dire ce qui ne va pas, en m'expliquant pourquoi (de préférence)
3. m'indiquer si l'usage des balises TRY / END TRY est pertinent, et voir si l'on peut les remplacer par d'autres, plus usuelles
4. ne pas utiliser la balise 'Catch', utilisée dans les balises TRY, qui ne me servira absolument à rien
5. m'aider à consolider la fin de mon code, car pour 'End Function' VB2010 m'affiche ce message d'avertissement :
D'habitude j'arrive à me dépatouiller en fouinant et testant à tour de bras. Et comme on dit, on apprend sur le tas. Alors j'apprends, comme je peux... mais comme il est de coutume pour les entreprises, c'est très souvent urgent ! ^^Avertissement 1 La fonction 'MapNetworkDrive' ne retourne pas une valeur pour tous les chemins de code. Une instruction 'Return' est-elle manquante*?
Alors je vous sollicite, en espérant obtenir une (ou même plusieurs !) réponses.
En tout cas, je vous remercie de m'avoir lu jusqu'ici, en espérant avoir été suffisamment clair dans mes explications.
Dans l'attente de vous lire !
++
V77
Partager