IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ouvrir un fichier Excel sur réseau


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2019
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Novembre 2019
    Messages : 40
    Par défaut Ouvrir un fichier Excel sur réseau
    Bonjour,

    je souhaite ouvrir un fichier excel depuis un code VBA mais ce fichier à ouvrir est sur un réseau partagé. J'ai écrit ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set classeur = Application.Workbooks.Open(ThisWorkbook.Path & "\" & "Fichier_a_copier", ReadOnly:=True)
    Il copie le chemin de mon classeur depuis lequel je demande l'ouverture et va cherche le fichier à ouvrir par ce même chemin (suivi de son nom). Je précise que mon fichier "destination" est dans le même dossier que le classeur à ouvrir.

    Cela fonctionne très bien en local sur mon ordinateur mais dès que je fais un essais dans un dossier en réseau les fichiers sont introuvables. Le chemin du classeur destination est bien copié par contre.

    Auriez vous des idées ?

    Merci en avance et bonne journée

  2. #2
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    Ceci est l'instruction pour l'ouverture en local:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set classeur = Application.Workbooks.Open(ThisWorkbook.Path & "\" & "Fichier_a_copier", ReadOnly:=True)
    Mais quelle est l'instruction que vous donnez pour l'ouverture du fichier sur réseau ?

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2019
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Novembre 2019
    Messages : 40
    Par défaut
    Bpnjour,

    justement en réseau je ne sais pas comment lancer l'ouverture ... Mon fichier se trouve dans le même dossier et a donc le même chemin que je copie en changeant simplement le nom du classeur a la fin.

    Je pensais qu'en réseau si le chemin était copié il parviendrait à trouver le fichier mais non..

  4. #4
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    Ouvrez le fichier qui se trouve sur réseau
    Dans une cellule quelconque, taper la formule =Cell("filename";"A1"); (en Français, je présume =cellule("nom de fichier";"A1"))
    Ceci vous donnera le bon chemin sur réseau, à exploiter dans le code

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    J'ai déjà eu ce genre de soucis avec des disques réseau qui n'ont pas été montés avec une lettre. Si tu montais ton volume réseau en lui attribuant une lettre, je pense que cela résoudrait ton problème.

    Nom : 2019-12-12_112625.png
Affichages : 3858
Taille : 57,8 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Simon5713 Voir le message
    ... Mon fichier se trouve dans le même dossier et a donc le même chemin que je copie en changeant simplement le nom du classeur a la fin.

    Je pensais qu'en réseau si le chemin était copié il parviendrait à trouver le fichier mais non..
    Pour récupérer le chemin de ton classeur c'est :ActiveWorkbook.Path

    mais je te conseille d'utiliser les File Dialogs

    c'est plus souple et plus pro voici un exemple

    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
    Sub MOOON_Test()
     
    'ouverture d'un fichier par boite FileDialog
    '**********************************************************
        'Declaration d'une variable comme objet FileDialog
        Dim fd As FileDialog
     
        'Creation d'un objet FileDialog comme un File Open dialog box.
        Set fd = Application.FileDialog(msoFileDialogOpen)
     
        'Déclaration d'une variable contenant le "path" de style variant
        Dim vrtSelectedItem As Variant 'obligatoirement de type variant
     
        With fd
            '.AllowMultiSelect = True
            .InitialFileName = ActiveWorkbook.Path & "\"
     
            If .Show = -1 Then
                For Each vrtSelectedItem In .SelectedItems
     
                    'vrtSelectedItem est un String contenant le "path"  de chaque item selectionné.
                    'affichage du "PATH et du fichier selectionné" dans une boite message
                    MsgBox "Vous avez sélectionné : " & vrtSelectedItem
                    File_Select = vrtSelectedItem
                Next
                 .Execute
            Else
                Exit Sub
            End If
        End With
     
    End Sub
    @ Zekraoui_Jakani

    Je pense que ta solution est peu trop lourde car ajouter une formule qui récupère le chemin+le nom du fichier+le nom la feuille me parrais pas adapté surtout s'il ne dois pas modifier les fichiers

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Les FileDialogs amènent à une intervention de l'utilisateur durant l'exécution de la macro. Ca ne me semble pas adapté lorsque l'on veut récupérer un fichier dont on connait le chemin ou que l'on peut le récupérer par code, comme c'est le cas ici.

    De plus, il importe de bien faire la différence entre ThisWorkbook (déjà proposé et utilisé par le demandeur lui-même) et ActiveWorkbook. Ce ne sont pas forcément les mêmes classeurs.

    Ce n'est pas "plus souple" ou "plus pro" d'utiliser les FileDialogs (quels sont les critères qui déterminent ce qui est plus souple ou plus pro?), c'est juste une démarche différente à utiliser lorsque l'on a besoin de l'intervention de l'utilisateur pour récupérer un fichier, alors que ThisWorkbook.Path ou ActiveWorkbook.Path permettent de se passer de cette intervention puisque le chemin est supposé connu
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2019
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Novembre 2019
    Messages : 40
    Par défaut
    Merci pour vos réponses mais aucune ne fonctionne...

    Le chemin copié est le bon (les classeurs sont tous au même endroit du réseau, seul leur nom change)

    Le lecteur est déjà mappé avec une lettre (il s'appelle G:)

    Le code permettant l'ouverture est un peu barbare car je souhaite ouvrir en lecture seule pour une simple copie sans risque de modification.

    Du coup je suis complètement bloqué parce qu'en local tout fonctionne même si je déplace le fichier par ci par là.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Lorsque tu es en réseau, regarde ce que te donne ? thisworkbook.path dans la fenêtre d'exécution (CTRL+G dans l'éditeur VBA). Peux-tu nous donner ce qui est renvoyé par cette commande?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2019
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Novembre 2019
    Messages : 40
    Par défaut
    Voilà ce que je reçois : G:\03_xxxx\01_xxxx

    Le lecteur est bien nommé et il s'agit du même chemin récupéré que ce lui de mon code

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Pourrais-tu donner le code exact que tu utilises?

    Tu dis "Les fichiers sont introuvables"... Qu'est-ce qui te faire dire cela? As-tu un message d'erreur? Si oui, lequel?

    Tu devrai décomposer ta ligne:
    Récupérer le chemin du fichier actif;
    Recomposer le nom complet (chemin et nom) du fichier que tu veux ouvrir dans une variable;
    Ouvrir le fichier dont le nom complet se trouve dans la variable.

    Ca permettrait de voir plus facilement où cela coince...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2019
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Novembre 2019
    Messages : 40
    Par défaut
    J'utilise ce code pour copier le chemin d’accès au fichier ouvert et ajouter le nom du fichier à ouvrir (qui se trouve dans le même dossier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set classeur = Application.Workbooks.Open(ThisWorkbook.Path & "\" & "Fichier_a_copier", ReadOnly:=True)
    En local tout fonctionne mais dès que je déplace le dossier dans le lecteur réseau le chemin (qui semble être bon) ne fonctionne plus. Je reçois le message suivant :
    Images attachées Images attachées  

  13. #13
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous,

    Peut-être une piste.
    Si le classeur actif a été ouvert depuis un lecteur réseau connecté (E:\...., H:\...), il pourrait être opportun d'ouvrir un second classeur, porté sur le même répertoire, en utilisant le chemin complet de façon explicite.

    Autrement dit,
    Remplacer
    E:\......
    par
    \\leréseau\monchemincomplet\nomduclasseur.xlsm

    Je reporte cette fonctionnalité qui, de mémoire, m'a été fournie pas Gayot il y a quelques années

    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
    Private Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" _
     (ByVal lpszLocalName As String, ByVal lpszRemoteName As String, cbRemoteName As Long) As Long
     Public site As String
     
    Option Compare Text
     
    Public Function fnctGetUNCPath(ByVal PathName As String) As String
     
    'fonction donnée par GAYOT sur forum, discussion ouverte par MG
    'http://www.developpez.net/forums/d1025924/logiciels/microsoft-office/excel/macros-vba-excel/recherche-repertoire-libelle-integral/
     
    'comment récupérer le chemin intégral du fichier si connection lecteur réseau
    'tuto :
    'http://access.developpez.com/sources/?page=reseau#GetUNC
     
    Const MAX_UNC_LENGTH  As Integer = 512
    Dim strUNCPath As String
    Dim strTempUNCName As String
    Dim lngReturnErrorCode  As Long
     
      strTempUNCName = String(MAX_UNC_LENGTH, 0)
      lngReturnErrorCode = WNetGetConnection(Left(PathName, 2), strTempUNCName, _
        MAX_UNC_LENGTH)
     
      If lngReturnErrorCode = 0 Then
         strTempUNCName = Trim(Left(strTempUNCName, InStr(strTempUNCName, vbNullChar) - 1))
         strUNCPath = strTempUNCName & Mid(PathName, 3)
      End If
     
    fnctGetUNCPath = strUNCPath
    End Function
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim maréf_true As String, lerép As String
     
    With ThisWorkbook
                    maréf_true = IIf(Len(fnctGetUNCPath(.FullName)) = 0, .FullName, fnctGetUNCPath(.FullName))
                    lerép = Replace(maréf_true,  .Name, "")
                    Debug.Print lerép
                    Workbooks.Open Filename:=lerép & "lenomduclasseur.xlsm"
    End With
    A plus tard.

Discussions similaires

  1. Comment ouvrir un fichier excel sur Guide?
    Par noxita dans le forum Interfaces Graphiques
    Réponses: 19
    Dernier message: 24/11/2014, 19h32
  2. Ouvrir un fichier excel sur un onglet particulier
    Par Marsupio dans le forum VBScript
    Réponses: 2
    Dernier message: 08/01/2011, 09h05
  3. [XL-2007] Ouvrir un fichier excel toujours sur la meme feuille.
    Par rouget dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/11/2009, 21h41
  4. Ouvrir un fichier Excel quand on clique sur un bouton
    Par perdeak dans le forum Composants VCL
    Réponses: 10
    Dernier message: 31/01/2008, 11h12
  5. [VBA-E] Ouverture automatique d'un fichier excel sur un réseau
    Par NiKoS29 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/04/2007, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo