Ouvrir fichier a partir d'une liste
Résolu
guillaume660
-
Patrice33740 Messages postés 8400 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8400 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je me permets de vous contatcer pour un probleme sur une macro.
Je bloque au tout début d'une macro qui consiste a ouvrir un fichier excel grace à une liste situé dans un autre fichier, voila où j'en suis :
[Sub TEST()
For I = 5 To 500
Workbooks.Open range("B" & I).Value + "\" + range("C" & I).Value
Next I
End Sub]
Mais un message d'erreur apparait :\code.xlsx introuvable.
Quelqu'un sait d'où vient le problème ?
Merci.
Je bloque au tout début d'une macro qui consiste a ouvrir un fichier excel grace à une liste situé dans un autre fichier, voila où j'en suis :
[Sub TEST()
For I = 5 To 500
Workbooks.Open range("B" & I).Value + "\" + range("C" & I).Value
Next I
End Sub]
Mais un message d'erreur apparait :\code.xlsx introuvable.
Quelqu'un sait d'où vient le problème ?
Merci.
13 réponses
-
Il faut l'adresse complète du fichier à ouvrir (disque:\ répertoire\...\nom.xlsx
-
Bonjour Patrice33740,
En fait j'ai en colonne B l'adresse du répertoire et en colonne C le nom du fichier.
Je suis donc obligé de mettre l'adresse complète en colonne B et entre parenthèse ?
Puis-je choisir l'onglet qui m'intéresse également ?
Merci -
Re,
Non, le chemin (répertoire) en B et le nom du fichier en C conviennent, il semblerait que le chemin soit vide lors de l'erreur.
Essaie :Sub TEST() Dim strFichier As String For I = 5 To 500 strFichier = Range("B" & I).Value & "\" & Range("C" & I).Value Workbooks.Open strFichier Next I End Sub
Avec le débogueur, la variable locale strFichier permet de vérifier que le nom complet du fichier correspond à un fichier existant.
-
Merci pour ton aide en tout cas !
Avec ce code le fichier s'ouvre bien mais le même message d'erreur apparaît !
Le fichier que j'ouvre est un .xlsm, le problème peut-il venir de là ? Sachant que l'extension xlsm est bien précisée dans la colonne C. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Tu dis le fichier s'ouvre, mais avec ce code tu est sensé ouvrir non pas un mais 495 fichiers, il n'y a aucune sécurité en cas d'absence de fichier sur une des 495 lignes explorées.
-
En fait pour ne pas que la macro dure trop longtemps pendant l'essai, je transforme le i = 5 to 500 en I = 5 to 7, mais quoiqu'il arrive, le message arrive après l'ouverture du premier fichier
-
Vérifie que l'exécution des macro est autorisée, vérifie le niveau de sécurité.
Les macros sont-elles signées numériquement ? -
Messieurs,
le message d'erreur est le suivant :
Erreur d'execution 1004
'\code.xlsx' introuvable. Vérifiez l'orthographe du nom du classeur et la validité de l'emplacement.
Quand je clique sur débogage la ligne " Workbooks.Open strFichier " est surlignée en jaune.
Pour ce qui est du niveau de sécurité, c'est la case "activer toutes les macros" qui est cochée (je suis sur excel 2007).
Dois-je modifier quelque chose ? -
Re,
Dans le VBE, lors du débogage (ligne surlignée en jaune) affiche les variables locales (affichage / fenêtre variables locales), vérifier la valeur de strFichier.
Il est fort probable que le fichier n'existe pas.
-
-
Effectivement, "\code" n'est pas un nom de fichier valide
Essaie :Sub TEST() Dim wsh As Worksheet Dim strFichier As String Set wsh = ActiveSheet For I = 5 To 7 strFichier = wsh.Range("B" & I).Value & "\" & wsh.Range("C" & I).Value Workbooks.Open strFichier Next I End Sub
-
Merci beaucoup Patrice,
ça fonctionne parfaitement !!!!!
afin que je me couche mons bete ce soir, peux tu m'expliquer ce qui n'allait pas ? (je sais que l'explication est dans le code ci-dessus mais c'est loin d'être clair pour moi...)
En tout cas merci encore... -
Re,
En fait, quand le premier fichier s'ouvre, il devient le fichier actif et donc
Range("B" & I).Value et Range("C" & I).Value sont lus dans ce fichier au lieu du fichier initial.
En déclarant la feuille active initiale (wsh) et en y faisant référence lors de la lecture du répertoire (wsh.Range("B" & I).Value) et du nom (wsh.Range("C" & I).Value) on évite cette erreur de débutant à laquelle nous faisons tous piéger régulièrement.
Cordialement
Patrice