Macro Excel et réseau

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

4 réponses

  1. Contributeur
    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
    1. 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
  2. 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
    1. 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
      1. 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
    2. 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
      1. Merci Armojax pour ta réponse.
        J'ai implémenté cette procédure dans mes macros et ça marche super.

        Warbler
        0