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 :

Erreur 1004 Chemin d'accès introuvable : fichier en réseau [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Février 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Février 2020
    Messages : 12
    Par défaut Erreur 1004 Chemin d'accès introuvable : fichier en réseau
    Bonjour,

    je suis novice en VBA et je suis confrontée à un problème technique. Ma macro ne trouve pas le fichier que je lui indique, j'ai évidement contrôler que le chemin était bon.

    Je pense plutôt que le soucis vient du fait qu'il s'agit d'un dossier présent sur un réseau partagé, le dossier Suivi est limité à certains utilisateurs mais j'ai les droits en écritures dessus. Pensez vous que ce soit ça ? Si oui avez vous des solutions ?

    Merci d'avance de votre aide.

    Je vous mets la macro :

    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
    33
    34
    35
    36
    37
    38
    Option Explicit 'Syntaxe permettant la déclaration obligatoire des variables
    
    'Déclaration des variables
    Dim NomClasseurDI As String
    Dim DerLigne As Integer
    Dim MaNouvelleLigne As Integer
    
    Sub Copiebase()
    'On désactive le raffraichissement de l'écran pour ne pas montrer les manipulations.
    Application.ScreenUpdating = False
    
    '___________________________________________________________________________
    ' Parcours de tous les fichiers
    '____________________________________________________________________________
    
    'On change le chemin par défaut des fichiers sources avec l'instruction chDir
    ChDir "V:\Outils\Suivi\DG\2020"
    'On affecte le premier nom de fichier se trouvant dans le répertoire avec la fonction Dir
    NomClasseurDI = Dir("V:\Outils\Suivi\DG\2020\Classeur2.xlsx")
    'On vérifie que l'existence du classeur grâce au nombre de caractère contenu dans son nom
    'et on fait une boucle afin de lire tous les fichiers.
    
        Application.DisplayAlerts = False   'On désactive les boites de message d'Excel
        Workbooks.Open NomClasseurDI        'On ouvre le classeur
        Sheets("Bordereau Factures 2020").Select
        'Sheets("Bordereau Factures 2020").Range
        DerLigne = ActiveSheet.UsedRange.Rows.Count  'On récupère le nombre de ligne de la plage utilisée.
        Range("B5:T" & DerLigne).Copy       'On copie la plage de données de la feuille
        Workbooks("Classeur1.xlsm").Activate    'On revient sur le Classeur de synthèse
        MaNouvelleLigne = ActiveSheet.UsedRange.Rows.Count + 1      'On récupère la nouvelle ligne de la consolidation
        Range("A" & MaNouvelleLigne).Select 'On se positionne sur la nouvelle ligne.
        ActiveCell.PasteSpecial Paste:=xlPasteValues   'On copie les données du fichier source
        ActiveCell.PasteSpecial Paste:=xlPasteFormats   'On copie les données du fichier source
        Range("U" & MaNouvelleLigne & ":U" & ActiveSheet.UsedRange.Rows.Count) = NomClasseurDI 'On y colle le nom du fichier en Colonne U
        Workbooks(NomClasseurDI).Close    'On ferme le classeur source
        NomClasseurDI = Dir   'On passe au prochain fichier du dossier.
    
    End Sub

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Annefi Voir le message
    Ma macro ne trouve pas le fichier que je lui indique, j'ai évidement contrôler que le chemin était bon.
    Quel est le message d'erreur renvoyé ?

    NomClasseurDI = Dir("V:\Outils\Suivi\DG\2020\Classeur2.xlsx")
    Mets un point d'arrêt du code juste après ce Dir() et regarde le contenu de ta variable.

    D'après ce que je sais, Dir() ne renvoie que le nom de fichier.
    Or, ton Open ne pourra pas se contenter du nom de fichier, il lui faut aussi le chemin.

    Bien sûr, j'ai remarqué ton ChDir "V:\Outils\Suivi\DG\2020" mais il n'a pas d'incidence sur Open, il n'influe que sur les instruction et fonctions liées au FileSystem.
    C'est Application.DefaultFilepath qui influe sur le chemin par défaut de Open.
    https://docs.microsoft.com/fr-fr/off...efaultfilepath

    Essaye de remplacer ton Open par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Workbooks.Open "V:\Outils\Suivi\DG\2020\" & NomClasseurDI
    Je pense plutôt que le soucis vient du fait qu'il s'agit d'un dossier présent sur un réseau partagé, le dossier Suivi est limité à certains utilisateurs mais j'ai les droits en écritures dessus. Pensez vous que ce soit ça ? Si oui avez vous des solutions ?
    Avant de chercher des raisons complexe, essaye d'éliminer les motifs simples.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 678
    Par défaut
    Bonjour,

    tu pourras constater que la valeur contenue dans ta variable n'est que le nom du fichier que tu souhaites ouvrir.

    Pour que le code fonctionne, il faut que tu concatènes le chemin du fichier en plus du nom de fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Workbooks.Open "V:\Outils\Suivi\DG\2020\" & NomClasseurDI
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Février 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Février 2020
    Messages : 12
    Par défaut Merci !
    C'est bon cela fonctionne avec le chemin précisé.
    Je pensais que chdir() permettait cela mais du coup il ne sert à rien dans ma macro ?

    Merci de votre aide à tous les 2.

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Annefi Voir le message
    Je pensais que chdir() permettait cela mais du coup il ne sert à rien dans ma macro ?
    Dans TA macro, il ne sert à rien car il n'influence que les instructions et fonctions liées au File System.
    Dans le cas de ton code, je pense que le seul élément concerné est le Dir(), mais comme tu le renseignes avec le chemin absolu, ça ne change rien.

    Personnellement, je trouve cette double gestion (File System et Excel) très confuse et je préfère toujours donner le chemin complet dans les instructions que j'utilise plutôt que de me fier au chemin par défaut.

  6. #6
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2017
    Messages : 31
    Par défaut Même problème pour moi
    Bonjour les amis,

    Je rencontre le même problème avec mon code:

    Sub macro_ouvrir_fichiers()
    '
    ' macro_ouvrir_fichiers Macro
    '
    Dim cheminDossier As String
    Dim fichier As String
    Dim classeur As Workbook
    Dim ws As Worksheet
    Dim ww As Worksheet
    Dim lastRow As Long
    'Spécifiez le chemin d'accès complet du dossier contenant les fichiers
    cheminDossier = "C:\Users\Documents\TEST"
    ' Désactivez les mises à jour d'écran pour améliorer les performances
    Application.ScreenUpdating = False
    ' Vérifiez si le dossier existe
    If Dir(cheminDossier, vbDirectory) = "" Then
    MsgBox "Le dossier spécifié n'existe pas.", vbExclamation
    Exit Sub
    End If
    ' Obtenez le premier fichier dans le dossier
    fichier = Dir(cheminDossier & "\*.*")
    ' Bouclez à travers tous les fichiers du dossier
    Do While fichier <> ""
    'Ignorer les dossiers et les fichiers cachés
    If (GetAttr(cheminDossier & "\" & fichier) And vbDirectory) <> vbDirectory And Left(fichier, 1) <> "." Then
    ' Ouvrez le fichier Set
    Workbooks.Open (cheminDossier & " \" & fichier)
    ' Ajoutez ici le code pour effectuer des opérations sur le fichier ouvert
    Set ws = ThisWorkbook.Sheets("RAA")
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    Set cell = Range("K19")
    Set ww = Workbooks("RA.xls").Worksheets("Comptes")
    Set myrange = Columns("A:C")

    ws.Range("K19").FormulaR1C1 = Application.VLookup(cell, myrange, 3, 0)
    ' Fermez le fichier en enregistrant les modifications
    ActiveWorkbook.Close SaveChanges:=True
    End If
    ' Obtenez le fichier suivant
    fichier = Dir
    Loop
    ' Réactivez les mises à jour d'écran
    Application.ScreenUpdating = True
    ' Affichez un message indiquant que l'opération est terminée
    MsgBox "Tous les fichiers ont été ouverts avec succès.", vbInformation
    End Sub
    J'ai un message d'erreur au niveau de la ligne en rouge, "L'indice n'appartient pas à la sélection"
    Pouvez vous me dire svp que dois je changer ?

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le message "L'indice n'appartient pas à la sélection" signifie que vraisemblablement vous n'avez pas de feuille nommée "RAA" dans le classeur où se trouve le code VBA.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2017
    Messages : 31
    Par défaut
    Oui, la feuille RAA est la feuille qui est dans chacun des fichiers que la macro va ouvrir. La macro est actuellement dans un fichier vide. L'objectif est d'aller ouvrir un par un les fichiers de un dossier en particulier, effectuer une recherchev par rapport à un autre fichier qu'est ouvert qui s'appelle RA, enregistrer et passer au fichier suivant pour faire la même manipulation.

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Oui, la feuille RAA est la feuille qui est dans chacun des fichiers que la macro va ouvrir.
    Dans ce cas, ce n'est pas ThisWorkbook qu'il faut utiliser mais soit ActiveWorkbook, si le classeur concerné est celui qui est actif, soit Workbooks("NomDuClasseur")
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2017
    Messages : 31
    Par défaut
    Merci Philippe

    Maintenant j'ai un autre soucis avec la partie en rouge ( J'ai fait des recherches sur google pour arriver à cette écriture).

    Sub macro_ouvrir_fichiers()
    '
    ' macro_ouvrir_fichiers Macro
    '
    Dim cheminDossier As String
    Dim fichier As String
    Dim classeur As Workbook
    Dim ws As Worksheet
    Dim ww As Worksheet
    Dim lastRow As Long
    'Spécifiez le chemin d'accès complet du dossier contenant les fichiers
    cheminDossier = "C:\Users\Documents\TEST""
    ' Désactivez les mises à jour d'écran pour améliorer les performances
    Application.ScreenUpdating = False
    ' Vérifiez si le dossier existe
    If Dir(cheminDossier, vbDirectory) = "" Then
    MsgBox "Le dossier spécifié n'existe pas.", vbExclamation
    Exit Sub
    End If
    ' Obtenez le premier fichier dans le dossier
    fichier = Dir(cheminDossier & "\*.xls*")
    ' Bouclez à travers tous les fichiers du dossier
    Do While fichier <> ""
    'Ignorer les dossiers et les fichiers cachés
    If (GetAttr(cheminDossier & "\" & fichier) And vbDirectory) <> vbDirectory And Left(fichier, 1) <> "." Then
    ' Ouvrez le fichier Set
    Workbooks.Open (cheminDossier & "\" & fichier)
    ' Ajoutez ici le code pour effectuer des opérations sur le fichier ouvert
    Set ws = ActiveWorkbook.Sheets("RAA")
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    Set cell = Range("B19")
    Set ww = Workbooks("RA.xlsx").Worksheets("Comptes")
    Set myrange = Columns("A:C")
    with ws.Range ("K19:K") & lastRow.Formula = "IFERROR(VLOOKUP(B19,myrange,3,0),"")".Range("K19:K" & lastRow).Value = .Range("K19:K" & lastRow).Value
    End With
    cell.Select
    ' Fermez le fichier en enregistrant les modifications
    ActiveWorkbook.Close SaveChanges:=True
    End If
    ' Obtenez le fichier suivant
    fichier = Dir
    Loop
    ' Réactivez les mises à jour d'écran
    Application.ScreenUpdating = True
    ' Affichez un message indiquant que l'opération est terminée
    MsgBox "Tous les fichiers ont été ouverts avec succès.", vbInformation
    End Sub
    La formule sur une feuille d'excel normal serait la suivante: dans chacun des fichiers ouvert, dans la feuille RAA, à la cellule K19, Recherchev(b19;;[RA.xlsx]Comptes!$A:$C;3;0)

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans la ligne qui est en rouge, vous utilisez la propriété Formula de l'objet Range, dans la chaine de caractères de votre formule, il manque le "=".
    Il est possible qu'il y ait d'autres problèmes.
    Je pense que vous devriez ouvrir une nouvelle discussion car vous avez débuté votre discussion sur une autre qui est close depuis plus de 3 ans.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 503
    Par défaut
    c'est quoi cette esperluette (&) entre le Range et le lastRow.formula ??????

    tu voulais sûrement écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with ws.Range ("K19:K" & lastRow)
        .Formula = "=IFERROR(VLOOKUP(B19,myrange,3,0),"""")"
        .Value = .Value
    End With
    Noter les doubles guillemets pour afficher des guillemets

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur lors de l' accès aux fichiers du réseau
    Par papyxy dans le forum VBScript
    Réponses: 2
    Dernier message: 11/12/2017, 11h34
  2. erreur 76 sous VB6 chemin d'accès introuvable
    Par bague dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 26/10/2017, 00h19
  3. [XL-2010] Erreur '76' Chemin d'accès introuvable
    Par ti-flo41 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/06/2013, 15h25
  4. Erreur "Chemin d'accès introuvable"
    Par Cachlab dans le forum VBScript
    Réponses: 15
    Dernier message: 06/02/2012, 16h19
  5. erreur d'exécution '76' chemin d'accès introuvable
    Par ensmaitk dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/04/2007, 17h31

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