OVH Cloud OVH Cloud

oShell.CurrentDirectory en VBA

9 réponses
Avatar
sympatix
Bonjour !

j'ai un fonctionnement bizarre d'un script en environnement VBA (sous excel)
de la routine suivante:
------------------------------------
Sub Dir()
Set oShell = CreateObject("WScript.Shell")
MsgBox oShell.CurrentDirectory
End Sub
-----------------------------------
Le fichier excel qui exécute cette macro est sur le bureau. Normalement, je
devrais avoir en sortie, le path du bureau.
Or, j'ai tout a fait autre chose. j'ai le path d'un répertoire
(I:\sauvegarde) qui existe bien, mais qui n'a rien a voir avec le répertoire
courant, le bureau !
Et si je change de répertoire, j'ai toujours ce dossier I:\sauvegarde en
sortie (c'est un dossier dans lequel j'ai effectivement travaillé avant,
avec cette macro, mais pourquoi persiste-t-il ?)
J'ai même fait un copier-coller de cette sub dans un nouveau fichier excel,
avec un nouveua nom, mais c'est pareil.

Je ne comprend pas ce qui ce passe, pourtant l'objet "WScript.Shell" est
bien instancié, et je n'ai aucune erreur !
Merci d'avance pour toute info :-)

--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

9 réponses

Avatar
Fred
Dans son message %
sympatix nous dit :

Bonjour !

j'ai un fonctionnement bizarre d'un script en environnement VBA (sous
excel) de la routine suivante:
------------------------------------
Sub Dir()
Set oShell = CreateObject("WScript.Shell")
MsgBox oShell.CurrentDirectory
End Sub
-----------------------------------
Le fichier excel qui exécute cette macro est sur le bureau.
Normalement, je devrais avoir en sortie, le path du bureau.
Or, j'ai tout a fait autre chose. j'ai le path d'un répertoire
(I:sauvegarde) qui existe bien, mais qui n'a rien a voir avec le
répertoire courant, le bureau !
Et si je change de répertoire, j'ai toujours ce dossier I:sauvegarde
en sortie (c'est un dossier dans lequel j'ai effectivement travaillé
avant, avec cette macro, mais pourquoi persiste-t-il ?)
J'ai même fait un copier-coller de cette sub dans un nouveau fichier
excel, avec un nouveua nom, mais c'est pareil.

Je ne comprend pas ce qui ce passe, pourtant l'objet "WScript.Shell"
est bien instancié, et je n'ai aucune erreur !
Merci d'avance pour toute info :-)


Bonjour,
Je n'ai pas de solution mais voilà où j'irais jeter un oeil :
- Options d'Excel,
- Paramètres des raccourcis pour lancer Excel,
- Types de fichier : ce qui est associé à xls.

--
Fred

Avatar
sympatix
Salut !

Je n'ai pas de solution mais voilà où j'irais jeter un oeil :
- Options d'Excel,
- Paramètres des raccourcis pour lancer Excel,
- Types de fichier : ce qui est associé à xls.
Je n'ai pas trouvé ce que tu m'indiques, mais, j'ai vu autre chose...

Sous excel, dans Outils, Options, Général, en changeant le dossier par
défaut, celà modifie le comportement de sortie du script...en fait,
oShell.CurrentDirectory renvoie le dossier par défaut d'excel, et non le
dossier dans lequel se trouve le fichier excel en cours. Bizarre. En tout
cas, ça ne m'arrange pas du tout.

Merci

--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
"Fred" a écrit dans le message de news:

Dans son message %
sympatix nous dit :

Bonjour !

j'ai un fonctionnement bizarre d'un script en environnement VBA (sous
excel) de la routine suivante:
------------------------------------
Sub Dir()
Set oShell = CreateObject("WScript.Shell")
MsgBox oShell.CurrentDirectory
End Sub
-----------------------------------
Le fichier excel qui exécute cette macro est sur le bureau.
Normalement, je devrais avoir en sortie, le path du bureau.
Or, j'ai tout a fait autre chose. j'ai le path d'un répertoire
(I:sauvegarde) qui existe bien, mais qui n'a rien a voir avec le
répertoire courant, le bureau !
Et si je change de répertoire, j'ai toujours ce dossier I:sauvegarde
en sortie (c'est un dossier dans lequel j'ai effectivement travaillé
avant, avec cette macro, mais pourquoi persiste-t-il ?)
J'ai même fait un copier-coller de cette sub dans un nouveau fichier
excel, avec un nouveua nom, mais c'est pareil.

Je ne comprend pas ce qui ce passe, pourtant l'objet "WScript.Shell"
est bien instancié, et je n'ai aucune erreur !
Merci d'avance pour toute info :-)


Bonjour,
Je n'ai pas de solution mais voilà où j'irais jeter un oeil :
- Options d'Excel,
- Paramètres des raccourcis pour lancer Excel,
- Types de fichier : ce qui est associé à xls.

--
Fred






Avatar
sympatix
Entre temps, j'ai pu trouver ça en VBA, qui me renvoie bien le repertoire
courant du fichier excel en cours d'utilisation:
ActiveWorkbook.Path

--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
"Fred" a écrit dans le message de news:

Dans son message %
sympatix nous dit :

Bonjour !

j'ai un fonctionnement bizarre d'un script en environnement VBA (sous
excel) de la routine suivante:
------------------------------------
Sub Dir()
Set oShell = CreateObject("WScript.Shell")
MsgBox oShell.CurrentDirectory
End Sub
-----------------------------------
Le fichier excel qui exécute cette macro est sur le bureau.
Normalement, je devrais avoir en sortie, le path du bureau.
Or, j'ai tout a fait autre chose. j'ai le path d'un répertoire
(I:sauvegarde) qui existe bien, mais qui n'a rien a voir avec le
répertoire courant, le bureau !
Et si je change de répertoire, j'ai toujours ce dossier I:sauvegarde
en sortie (c'est un dossier dans lequel j'ai effectivement travaillé
avant, avec cette macro, mais pourquoi persiste-t-il ?)
J'ai même fait un copier-coller de cette sub dans un nouveau fichier
excel, avec un nouveua nom, mais c'est pareil.

Je ne comprend pas ce qui ce passe, pourtant l'objet "WScript.Shell"
est bien instancié, et je n'ai aucune erreur !
Merci d'avance pour toute info :-)


Bonjour,
Je n'ai pas de solution mais voilà où j'irais jeter un oeil :
- Options d'Excel,
- Paramètres des raccourcis pour lancer Excel,
- Types de fichier : ce qui est associé à xls.

--
Fred






Avatar
Fred
Dans son message
sympatix nous dit :

Je n'ai pas trouvé ce que tu m'indiques, mais, j'ai vu autre chose...
Sous excel, dans Outils, Options, Général, en changeant le dossier par
défaut, celà modifie le comportement de sortie du script...en fait,
oShell.CurrentDirectory renvoie le dossier par défaut d'excel, et
non le dossier dans lequel se trouve le fichier excel en cours.
Bizarre. En tout cas, ça ne m'arrange pas du tout.


Oui, c'est à ce genre de chose que je pensais.
Et tu as aussi un répertoire de démarrage dans les raccourcis d'où ma
suggestion.
Pour les associations de fichiers je suis allé un peu vite car après
vérification, il n'y apparaît pas cette notion de répertoire de démarrage.

Le ActiveWorkbook.Path est sans doute la meilleure solution.


--
Fred

Avatar
sympatix
Oui, c'est à ce genre de chose que je pensais.
Et tu as aussi un répertoire de démarrage dans les raccourcis d'où ma
suggestion.
Là, j'ai pas capté...c'est où, dans excel, ou ailleurs ? (chuis un peu lent,

en fin de semaine...en début aussi, du reste...;-)


--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
"Fred" a écrit dans le message de news:

Dans son message
sympatix nous dit :

Je n'ai pas trouvé ce que tu m'indiques, mais, j'ai vu autre chose...
Sous excel, dans Outils, Options, Général, en changeant le dossier par
défaut, celà modifie le comportement de sortie du script...en fait,
oShell.CurrentDirectory renvoie le dossier par défaut d'excel, et
non le dossier dans lequel se trouve le fichier excel en cours.
Bizarre. En tout cas, ça ne m'arrange pas du tout.


Oui, c'est à ce genre de chose que je pensais.
Et tu as aussi un répertoire de démarrage dans les raccourcis d'où ma
suggestion.
Pour les associations de fichiers je suis allé un peu vite car après
vérification, il n'y apparaît pas cette notion de répertoire de démarrage.

Le ActiveWorkbook.Path est sans doute la meilleure solution.


--
Fred






Avatar
Fred
Dans son message Of%
sympatix nous dit :

Oui, c'est à ce genre de chose que je pensais.
Et tu as aussi un répertoire de démarrage dans les raccourcis d'où ma
suggestion.
Là, j'ai pas capté...c'est où, dans excel, ou ailleurs ? (chuis un

peu lent, en fin de semaine...en début aussi, du reste...;-)


Bonsoir,
Quand tu crées un raccourci, tu peux spécifier un répertoire de démarrage !
Je ne savais pas si tu ouvrais ton fichier XL en double-cliquant dessus ou
alors en lançant d'abord Excel (par un raccourci) puis en ouvrant le dit
fichier La première méthode fait appel aux associations des extensions avec
les programmes, que tu trouves dans Outils, Options des dossiers, Types de
fichiers. La seconde fait appel à un raccourci. Ces deux choses sont
extérieures à Excel. Il restait la dernière solution (la bonne) : Excel
propose dans ses options le paramétrage d'un répertoire de travail, ou de
démarrage ...
En fait c'est en lisant la documentation de la propriété CurrentDirectory
que j'ai pensé à ces quelques pistes. Il y est dit en substance que c'est le
répertoire courant du process utilisant l'objet Shell. Donc, dans ton cas,
non pas le fichier xls mais Excel.exe lui même.




--
Fred


Avatar
sympatix
Quand tu crées un raccourci, tu peux spécifier un répertoire de démarrage !
Oui


Je ne savais pas si tu ouvrais ton fichier XL en double-cliquant dessus...
Dans ce cas là, oui.


ou alors en lançant d'abord Excel (par un raccourci) puis en ouvrant le dit
fichier
Non, je procède rarement comme ça.


La première méthode fait appel aux associations des extensions avec les
programmes, que tu trouves dans Outils, Options des dossiers, Types de
fichiers.
Oui, c'est windows qui sait qu'un fichier *.xls doit s'ouvrir avec XL.

Là, pas de soucis, mes fichiers xls sont bien associés avec excel

Ces deux choses sont extérieures à Excel. Il restait la dernière solution
(la bonne) : Excel propose dans ses options le paramétrage d'un répertoire
de travail, ou de démarrage ...
Effectivement, oui...


En fait c'est en lisant la documentation de la propriété CurrentDirectory
que j'ai pensé à ces quelques pistes. Il y est dit en substance que c'est
le répertoire courant du process utilisant l'objet Shell. Donc, dans ton
cas, non pas le fichier xls mais Excel.exe lui même.
Bien vu, je n'avais pas poussé les investigations aussi loin !

Mais, je ne comprend qu'à moitié. Si c'est bien le repertoire courant du
process utilisant excel qui est renvoyé par CurrentDirectory, ça devrait
être:
C:Program FilesMicrosoft OfficeOffice10 et non le dossier de travail que
l'on définit dans les Options ?


--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
"Fred" a écrit dans le message de news:

Dans son message Of%
sympatix nous dit :

Oui, c'est à ce genre de chose que je pensais.
Et tu as aussi un répertoire de démarrage dans les raccourcis d'où ma
suggestion.
Là, j'ai pas capté...c'est où, dans excel, ou ailleurs ? (chuis un

peu lent, en fin de semaine...en début aussi, du reste...;-)


Bonsoir,
Quand tu crées un raccourci, tu peux spécifier un répertoire de démarrage
! Je ne savais pas si tu ouvrais ton fichier XL en double-cliquant dessus
ou alors en lançant d'abord Excel (par un raccourci) puis en ouvrant le
dit fichier La première méthode fait appel aux associations des extensions
avec les programmes, que tu trouves dans Outils, Options des dossiers,
Types de fichiers. La seconde fait appel à un raccourci. Ces deux choses
sont extérieures à Excel. Il restait la dernière solution (la bonne) :
Excel propose dans ses options le paramétrage d'un répertoire de travail,
ou de démarrage ...
En fait c'est en lisant la documentation de la propriété CurrentDirectory
que j'ai pensé à ces quelques pistes. Il y est dit en substance que c'est
le répertoire courant du process utilisant l'objet Shell. Donc, dans ton
cas, non pas le fichier xls mais Excel.exe lui même.




--
Fred







Avatar
Fred
Dans son message
sympatix nous dit :

En fait c'est en lisant la documentation de la propriété
CurrentDirectory que j'ai pensé à ces quelques pistes. Il y est dit
en substance que c'est le répertoire courant du process utilisant
l'objet Shell. Donc, dans ton cas, non pas le fichier xls mais
Excel.exe lui même.


Bien vu, je n'avais pas poussé les investigations aussi loin !
Mais, je ne comprend qu'à moitié. Si c'est bien le repertoire courant
du process utilisant excel qui est renvoyé par CurrentDirectory, ça
devrait être:
C:Program FilesMicrosoft OfficeOffice10 et non le dossier de
travail que l'on définit dans les Options ?


Bonjour,
Oui, je me suis mal exprimé, je voulais dire le process excel.exe en mémoire
(il a un répertoire de travail courant qui n'est pas nécessairement le
répertoire où est stocké le fichier excel.exe)

Reprenons l'exemple du raccourci : si tu ne spécifie pas de répertoire de
démarrage, je pense que par défaut il sera le même que le répertoire où se
trouve l'exécutable (ou bien le raccourci peut-être).
Idem pour l'option de Excel, sauf que si tu ne spécifies pas de répertoire
de travail, il prendra par défaut le répertoire "Mes Documents" de
l'utilisateur. Les programmes qui ne prévoient pas cela (il y en a de moins
en moins) ouvrent souvent leurs boîtes de dialogue fichier dans "Program
FilesNom de l'app", je suppose que tu as déjà rencontré cela.

En VBA, le répertoire où se trouve l'exécutable, tu l'obtiens avec
Application.Path



--
Fred


Avatar
sympatix
Bonjour,
Oui, je me suis mal exprimé, je voulais dire le process excel.exe en
mémoire (il a un répertoire de travail courant qui n'est pas
nécessairement le répertoire où est stocké le fichier excel.exe)
Ah bon.


Reprenons l'exemple du raccourci : si tu ne spécifie pas de répertoire de
démarrage, je pense que par défaut il sera le même que le répertoire où se
trouve l'exécutable (ou bien le raccourci peut-être).
Idem pour l'option de Excel, sauf que si tu ne spécifies pas de répertoire
de travail, il prendra par défaut le répertoire "Mes Documents" de
l'utilisateur. Les programmes qui ne prévoient pas cela (il y en a de
moins en moins) ouvrent souvent leurs boîtes de dialogue fichier dans
"Program FilesNom de l'app", je suppose que tu as déjà rencontré cela.
Euh, de mémoire, non, je rencontre le plus souvent le dossier Mes doc.


En VBA, le répertoire où se trouve l'exécutable, tu l'obtiens avec
Application.Path
Merci de me le confirmer, et merci d'avoir pris la peine de détailler tout

ça :-)

--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)