Déclaration de chemin d'accès menant à fichier dans lecteur réseau

Bonjour,

J'ai confectionné un outil en VBA prévoyant d'introduire en données d'entrées un chemin d'accès absolu menant à un fichier de données d'entrée. Cet outil sert à produire une synthèse statistique en sortie. Je rencontre un problème dans ce bout de code :

path = PathToInputFile & "\" & Inputfilename
ExistenceFile = Dir(path)
Set file = Workbooks.Open(ExistenceFile)
s = Workbooks(Inputfilename).Sheets(InputSheetName).Name <> ""

Si le chemin d'accès déclaré se rattache au disque dur local, la variable s prend la valeur TRUE et le reste du code s'exécute.

Si le chemin d'accès déclaré se rattache à un lecteur réseau, la variable s prend la valeur FALSE et le reste du code ne s'exécute pas. Alors que le chemin et le fichier existent.

Si vous avez une suggestion...

Bonjour,

test avec FSO

Sub TEST()
PathToInputFile = "C:\": Inputfilename = "toto.xlsx"
Path = PathToInputFile & "\" & Inputfilename
If Fichier_Exist(Path) Then MsgBox "OK" Else MsgBox "KO"
End Sub
'Vérifie lexistance d'un   fichier
Public Function Fichier_Exist(Fichier)
Fichier_Exist = CreateObject("Scripting.FileSystemObject").FileExists(Fichier)
End Function

Bonjour,

Merci pour votre réponse.

Navré pour le temps de réponse. J'étais accaparé. Je fais des tests. C'est une variante de ce que j'avais déjà fait.

Je pense que cela est dû à une mauvaise utilisation de Dir.

J'ai remarqué que dans :

path = PathToInputFile & "\" & Inputfilename
ExistenceFile = Dir(path)
Set file = Workbooks.Open(ExistenceFile)

selon que je mette ExistenceFile ou path dans Dir (), il y a génération d'erreur ou pas. Pourtant cela revient au même.

Je vais vérifier avec le lecteur local lundi. J'écris ces lignes durant le WE.

bonjour,

ExistenceFile = Dir(path) 'ne retourne que le nom du fichier 
Set file = Workbooks.Open(ExistenceFile) ' comment ça pourrait fonctionner sans le chemin complet 

Bonjour à tous,

@Aphrodite, Prenez l'habitude de déclarer les variables , cela vous évitera pas mal d’ennuis à terme.

Dir renvoie un chaine de caractère si le fichier est présent. Vous devez utiliser le chemin complet comme dis par @Dysorthograhie pour ouvrir le fichier.

Vous pouvez quand même faire un test avec la variable ExistenceFile.

    Dim Path As String
    Path = PathToInputFile & "\" & Inputfilename

    Dim ExistenceFile As Boolean
    ExistenceFile = (Dir(Path) > vbNullString) ' //Renvoie False si Dir renvoie une chaine vide.

    If ExistenceFile Then
        Set file = Workbooks.Open(Path)
        s = Workbooks(Inputfilename).Sheets(InputSheetName).Name <> vbNullString
    Else
        MsgBox "Nous ne trouvons pas " & Path & vbNewLine & _
               "Peut être l'avez-vous renommé, déplacé ou supprimé."

    End If

Le fait de construire une chaine avec ce type :

Path = PathToInputFile & "\" & Inputfilename

Peut entrainer des complications si PathToInputFile contient déjà un séparateur en fin de chaine. Préférez une petite fonction qui l'ajoute si nécessaire.

'@Description "Ajoute un backSlash à  la fin du chemin si nécessaire."
Public Function AddBackslash( _
                            ByVal folderPath As String _
                            ) As String

    FolderPath = Trim$(folderPath)
    If Right$(folderPath, 1) <> "\" Then folderPath = folderPath & "\"
    AddBackslash = folderPath
End Function

Ce qui donnerait :

    Dim Path As String
    Path = AddBackslash(PathToInputFile) & Inputfilename

    Dim ExistenceFile As Boolean
    ExistenceFile = (Dir(Path) > vbNullString)

    If ExistenceFile Then
        Set file = Workbooks.Open(Path)
        s = Workbooks(Inputfilename).Sheets(InputSheetName).Name <> vbNullString
    Else
        MsgBox "Nous ne trouvons pas " & Path & vbNewLine & _
               "Peut être l'avez-vous renommé, déplacé ou supprimé."

    End If

Bonne programmation. Jean-Paul.

Bonjour,

Ce petit bout de code est constitutif d'un grand ensemble à près de 850 lignes de codes. Pour améliorer la robustesse, la lisibilité, la compréhension et la maintenabilité, je l'ai décomposé en procédures et fonctions avec des commentaires. Toute variable est déclarée en faisant en sorte qu'elle soit intuitive. J'y ai inclus une gestion d'erreur en cas de mauvaise saisie [....] mais je cherche à améliorer davantage ce qui existe.

Je prends en compte vos conseils.

Rechercher des sujets similaires à "declaration chemin acces menant fichier lecteur reseau"