J’ai une macro chargée d’ouvrir tous les fichiers “*.xls” se trouvant dans le dossier appelé TobeCopied qui se trouve sur le même chemin que le fichier avec la macro (Base).
Ce matin la macro a renvoyé un message d’erreur prétendant qu’il n’y avait pas un tel fichier dans le dossier, alors qu’il y en avait deux.
En analysant les noms des fichiers j’ai constaté que l’extension “.xls” n’était pas affichée. Je l‘ai ajoutée au nom de l‘un des deux fichiers, mais pas à l‘autre, et j‘ai relancé la macro qui a alors ouvert les deux fichiers.
J‘ai essayé encore sans l‘extension: aucun fichier trouvé, idem lorsque j‘ai rajouté l‘extension.
J‘ai redémarré Excel, puis l‘ordinateur, sans changement.
J‘ai alors ouvert le fichier contenant la macro (il se trouve sur un serveur et est nommé „Base“) sur un autre ordinateur: les fichiers sans l‘extension ont été ouverts sans problème.
Lors des essais échoués, j’ai exécuté la macro pas à pas avec F8, le chemin était le bon, mais Fname (les noms des fichiers à ouvrir) a affiché vide.
J‘en conclue que cela ne doit pas tenir ni au fichier avec la macro ni même à Excel.
Où pourrait résider le problème?
La partie concernée de la macro:
VB:
Set wbZiel = Workbooks("Base.xls")
Pfad = ActiveWorkbook.Path
SuchPfad = Pfad & "\TobeCopied"
ChDir SuchPfad
'---upfront check----
msg = "You are about to copy all data " & Chr(13) & _
"from the folder" & Chr(13) & "<TobeCopied>" & _
Chr(13) & "to the database list."
If MsgBox(msg, vbOKCancel) = vbCancel Then Exit Sub
'---check if there are files to be copied----
FNames = Dir("*.xls")
If Len(FNames) = 0 Then
MsgBox "No files in the Directory"
ChDir Pfad
Exit Sub
End If
Je vais tester.
Mais je ne comprends toujours pas pourquoi ce problème surgit tout d'un coup et seulement sur un ordinateur.
L'instruction est bien claire. Pourquoi Excel ne trouve-t-il pas ces fichiers?
Peut être parce que sur cet ordinateur, selon les habitudes de l'utilisateur qui change de tâches, le lecteur courant n'est souvent plus celui du chemin du classeur auquel il revient ? …
Faites un MsgBox CurDir pour voir. Un ChDir d'un chemin sur un autre lecteur ne le change pas.
Peut être parce que sur cet ordinateur, selon les habitudes de l'utilisateur qui change de tâches, le lecteur courant n'est souvent plus celui du chemin du classeur auquel il revient ?
Ok, je comprends, seulement, si j'exécute le code pas à pas et que, en déplaçant la souris sur "SuchPfad" [ce système fonctionne sans problèmes majeurs depuis 2005 et je crois que c'était un Suisse germanophone qui avait écrit cette macro, d'où les mots en allemand], et que le bon chemin est affiché -ce qui est le cas- cela ne saurait être la cause.
Qui plus est, j'étais sur place lorsque le problème a surgi, et on n'avait fait rien d'autre que de travailler sur ce fichier en Excel.
Bonjour.
Je n'ai pas dit que ce SuchPfad n'était pas bon, j'ai dit que si le dossier courant n'est pas sur le même lecteur que ce chemin, un ChDir ne suffit pas à le changer.
Qu'affiche un MsgBox CurDir après le ChDir SuchPfad ?
Bonjour,
Il faudrait essayer cela sur l'ordinateur "incriminé" auquel je n'ai pas accès le WE. Je vais demander lundi à la personne qui travaille avec ce système de l'essayer.
Je ne comprends pas trop comment le dossier courant pourrait ne pas être le bon si on n'a fait rien d'autre sur l'ordinateur.
Oui mais si on a fait autre chose dessus qui à changé le dossier courant vers un autre lecteur, puis qu'on est revenu sur le classeur avant d'exécuter la macro, ça peut s'expliquer.
Mais si ça se trouve c'est beaucoup plus bête que ça, genre vous auriez totalement oublié que sur cet ordi le classeur est ouvert depuis une clé USB, alors qu'il devrait tout de même travailler avec un dossier de son disque dur et non de la dite clé …
On n'a fait rien d'autre que d'ouvrir le fichier depuis le serveur, j'y ai ajouté une feuille ainsi qu'un bouton et après on a testé si tout fonctionnait. Les autres tâches que ce fichier exécute ont fonctionné, mais pas celle-là.
Et j'étais moi-même tout le temps sur l'ordinateur.
Depuis le serveur. Ça vous ne l'avez pas dit, et ça change tout, À moins qu'une lettre de lecteur virtuel lui soit affectée. Un ChDrive et ChDir me marche pas avec un chemin commençant par "//".
Vous pouvez remplacer les deux instructions par un appel à l'API SetCurrentDirectory.
Bonjour tout le monde :) je me permets de vous embêter car je ne trouve pas la solution à mon problème malgré mes recherches Je souhaite via vba permettre à l'utilisateur de selectionner un fichier excel qui me permettra de faire plein de trucs avec je souhaiterai que le chemin proposé par...
Oui mais je n'avais pas accroché parce que vous aviez ajouté que c'était le classeur contenant la macro alors j'ai imaginé que c'était un classeur différent du classeur actif ouvert en dernier.
En tout cas on en revient toujours au même point: Si l'argument d'un ChDir commence par une lettre suivi de ':' il change seulement le dossier courant du lecteur identifié par cette lettre sans changer le lecteur courant, donc sans changer le dossier courant s'il n'est pas sur ce même lecteur. De plus tout ça ne marche plus avec des chemins de réseau, pour cela il faut le SetCurrentDirectory.
Je n'aurais rien à y opposer si lors de l'exécution avec F8 je n'avais pas pu me convaincre que le chemin affiché en glissant la souris au-dessus de "SuchPfad" menait tout droit au bon dossier: TobeCopied!
Vous n'arrivez décidément pas à comprendre que ce n'est pas SuchPfad qui ne contient pas le bon chemin mais le ChDir SuchPfad qui ne le définit pas en tant que CurDir parce que son lecteur n'est pas actif à ce moment là
Conseil: corrigez comme suit le second MsgBox de votre code :
VB:
MsgBox "No files in this directory :" _
& vbLf & CurDir, VbExclamation
Je vous crois, faute de le savoir mieux!
Votre proposition précise donc le message de la MsgBox en affichant le chemin du dossier considéré comme vide.
Je viens de parler à la personne qui gère le système. En premier lieu je lui ai demandé d'essayer si par hasard la macro arrivait à nouveau "d'elle-même" à fonctionner, ce qui est le cas!
Il a ajouté MsgBox CurDir qui n'affiche pas le chemin, que ça marche ou pas, ce qui était le cas au deuxième essai d'importer!
Voici le MsgBox affiché:.
Lorsque j'exécute la même macro à la maison sur mon ordi j'ai un MsgBox avec le chemin!