Macro Excel et réseau

Warbler -  
 Warbler -
Bonjour,
J'ai des macros Excel qui ouvrent des fichiers du genre :
Workbooks.Open Filename:="C:\Mes Documents\Répertoire\Monfichier.xls"

Ces macros ne fonctionnent pas en réseau quand je les lance d'un autre poste.
Dans ce cas l'ouverture se fait avec
Workbooks.Open Filename:= \\Nom_Ordi\Mes Documents\ Répertoire\Monfichier.xls"

…mais cette syntaxe ne fonctionne pas sur le poste où se trouve le fichier !

Comment faire pour faire tourner mes macros quel que soit le poste utilisé pour les lancer ?

A l'avance merci pour vos lumières
A voir également:

4 réponses

tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   435
 
Salut,

En rajoutant une condition du type
If nom_ordi_utilisé = nom_ordi then Workbooks.Open Filename:="C:\Mes Documents\Répertoire\Monfichier.xls"
Else Workbooks.Open Filename:="C:\Mes Documents\Répertoire\Monfichier.xls"

Non ???
0
Warbler
 
Merci pour la réponse.
Mais quelle est la commande VBA pour extraire le nom de l'ordi ?

Y-at-il une commande du genre "Application.username" qui donne le nom de l'utilisateur courant ?

@+ warbler
0
Armojax Messages postés 1916 Date d'inscription   Statut Membre Dernière intervention   1 529
 
Bonjour Warbler,

Peux-tu regarder si le UserName diffère d'un poste du réseau à l'autre, ce qui est probablement le cas (en faisant : MsgBox Application.UserName, par exemple).

Auquel cas, tu peux paramétrer ta commande :
If Application.UserName = "Toto" Then etc.
0
Warbler
 
merci pour ta réponse.
ça marche (après avoir différencié les username).

Mais y-a-t-il une commande VBA pour extraire le nom de l'ordi ?
ça serait plus pratique, car il y a plusieurs utilisateurs par postes.

@+ Warbler
0
Armojax Messages postés 1916 Date d'inscription   Statut Membre Dernière intervention   1 529
 
L'accès au nom de l'ordinateur n'existe pas en standard dans VBA, à ma connaissance.
On a un moyen avec l'API de Windows. Je ne l'ai jamais fait. Il faut définir des modules de classe et accéder aux dll de Windows.
Je buche en ce moment la question, mais pour le moment je n'ai pas la solution...
Si ça ne prend pas trop de temps et si j'y arrive, je repasse par là...
Si quelqu'un d'autre sait le faire, il est le bienvenu...
0
Armojax Messages postés 1916 Date d'inscription   Statut Membre Dernière intervention   1 529
 
Trouvé, grâce à l'excellent bouquin de Stephen Bullen et John Green. Merci à eux.
Chez moi ça marche, en tout cas.

Voici la marche à suivre :

1) Créer un module de Classe : Insertion / Module de Classe

2) Lui donner un nom : Sélectionner le module de Classe Classe1 qui vient d'être créé, afficher la fenêtre Propriétés et modifier le champ (name). Je l'ai appelé CSysInfo.

3) Placer dans ce module le code suivant :
Private Declare Function GetComputerName Lib "kernel32" _
  Alias "GetComputerNameA" ( _
  ByVal lbbuffer As String, _
  nsize As Long) As Long
  
Public Property Get ComputerName() As String
  Dim stBuff      As String * 255
  Dim lAPIResult  As Long
  Dim lBuffLen    As Long
  
  lBuffLen = 255
  lAPIResult = GetComputerName(stBuff, lBuffLen)
  If lBuffLen > 0 Then ComputerName = Left(stBuff, lBuffLen)
  
End Property

4) On peut ensuite utiliser la nouvelle fonctionnalité dans une macro "normale", de la façon suivante :
Dim obSysInfo As New CSysInfo
NomOrdi = obSysInfo.ComputerName

Essaie et dis-moi si ça marche.
Ajx.
0
Warbler
 
Merci Armojax pour ta réponse.
J'ai implémenté cette procédure dans mes macros et ça marche super.

Warbler
0