cs_bob87
Messages postés3Date d'inscriptionmercredi 9 mars 2005StatutMembreDernière intervention25 juin 2005
-
24 juin 2005 à 18:20
cs_bob87
Messages postés3Date d'inscriptionmercredi 9 mars 2005StatutMembreDernière intervention25 juin 2005
-
25 juin 2005 à 18:36
Bonjour,
j'ai fais une macro VBA qui me permet de récupérer certaines valeurs pour les enregistrer dans un fichier texte.
La macro commence dabord par créer un fichier texte vierge et ensuite enregistre les valeurs les unes après les autres, et finit enfin par refermer le fichier texte.
Le soucis que je rencontre concerne la création du fichier texte vierge. En effet, lorsque je veux créer un fichier en local, aucun problème ne se pose, tout fonctionne bien. Mais lorsque je veux que le fichier soit crée sur un ordinateur distant, une erreur apparait.
ca me dit que le chemin ou le nom de fichier est incorrect.
j'ai l'impression que VBA ne comprend pas qu'il s'agit d'une adresse réseau.
voici une partie de ma macro :
nom2 = nom & ".txt" 'permet d'avoir l'extension txt
nom3 = "C:/OSCAR/GS4/RCP/" & nom2 'donne le chemin complet ou le fichier doit etre crée
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(nom3, True)
si je laisse le chemin local dans la variable "nom3" : aucun probleme
si je met "//10.142.32.63/DataRcp/" & nom2 dans "nom3" : ca bloque à la ligne : "Set a = fs.CreateTextFile(nom3, True)" en me disant chemin ou nom de fichier incorrect.
Y a t'il une syntaxe particulière pour rentrer une adresse réseau. Faut-il une fonction spéciale. J'ai pourtant essayé plein de méthoque sans aucun succès !
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 25 juin 2005 à 12:46
Avec FileSystemObject (comme avec plein d'autre), je crois qu'il n'est pas possible de travailler avec des adresses réseau. Il faut d'abord, leur allouer une lettre logique à condition que ces ressources soient partagées.
Ainsi, à la place de
[file://10.142.32.63/DataRcp/ \\10.142.32.63\DataRcp\
] tu mettras "z:" par exemple.
Pour faire ça, il faut utiliser les API's WNetAddConnection2 et WNetCancelConnection2.
' POUR CONNECTER LA RESSOURCE RESEAU
'If AddConnection(RemoteName, UserName, UserPwd, LocalName) Then
' c'est bon
'Else
' c'est pas bon
'End If
' POUR DECONNECTER LA RESSOURCE RESEAU
'CancelConnection "LocalName"
' Avec RemoteName = "\\nom ou ip de la machine\dossier partagé"
' Avec UserName = "" ou "Invité" ou "Anonymous" ou le nom d'utilisateur défini pour le partage
' Avec UserPwd = TonPassword (défini pour le partage)
' Avec LocalName = "Z:" par ex
' Constantes d'erreur
Private Const NO_ERROR As Long = 0 ' The function was successful
Private Const ERROR_BAD_USERNAME As Long = 2202& ' Mauvais nom d'utilisateur
Private Const ERROR_INVALID_PASSWORD As Long = 86& ' The password was invalid.
Private Const ERROR_ALREADY_ASSIGNED As Long = 85& ' LocalName déjà assigné
Private Const ERROR_BAD_DEVICE As Long = 1200& ' LocalName invalide
Private Const ERROR_BAD_NET_NAME As Long = 67& ' RemoteName invalide ou introuvable
' Constantes de Type de ressource
Private Const RESOURCETYPE_DISK = &H1
'
Private Type NETRESOURCE
dwScope As Long
dwType As Long
dwDisplayType As Long
dwUsage As Long
lpLocalName As String
lpRemoteName As String
lpComment As String
lpProvider As String
End Type
' Fonctions API
Private Declare Function WNetAddConnection2 _
Lib "mpr.dll" Alias "WNetAddConnection2A" _
( _
lpNetResource As NETRESOURCE, _
ByVal lpPassword As String, _
ByVal lpUserName As String, _
ByVal dwFlags As Long _
) As Long
Private Declare Function WNetCancelConnection2 _
Lib "mpr.dll" Alias "WNetCancelConnection2A" _
( _
ByVal lpName As String, _
ByVal dwFlags As Long, _
ByVal fForce As Long _
) As Long
Function AddConnection(RemoteName As String, UserName As String, UserPwd As String, LocalName As String) As Boolean
Dim Retour As Long
Dim SharedResource As NETRESOURCE
' Tentative de connexion à la ressource partagée
Retour = WNetAddConnection2(SharedResource, UserPwd, UserName, 0)
Select Case Retour
Case NO_ERROR ' Ca se passe bien
AddConnection = True
Case ERROR_BAD_USERNAME
'MsgBox "Mauvais nom d'utilisateur"
AddConnection = False
Case ERROR_INVALID_PASSWORD
'MsgBox "Password invalide"
AddConnection = False
Case ERROR_ALREADY_ASSIGNED
'MsgBox "LocalName déjà assigné"
AddConnection = False
Case ERROR_BAD_DEVICE
'MsgBox "LocalName invalide"
AddConnection = False
Case ERROR_BAD_NET_NAME
'MsgBox "RemoteName invalide ou introuvable"
AddConnection = False
Case Else
'MsgBox "Erreur n° " & Retour & " non gérée par l'appli."
AddConnection = False
End Select
End Function
Function CancelConnection(LocalName As String)
Dim Retour As Long
' Pour fermer la connexion
Retour = WNetCancelConnection2(LocalName, 0, 0)
End Function
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
cs_bob87
Messages postés3Date d'inscriptionmercredi 9 mars 2005StatutMembreDernière intervention25 juin 2005 25 juin 2005 à 18:36
Merci beaucoup pour cette solution
le problème c'est que je suis débutant et que je ne sais pas trop comment faire pour intéger ce code au mien.
est ce que je dois mettre tous ce code dans ma macro ?
a quoi correspond la partie encadrée par des *** ?