OVH Cloud OVH Cloud

fermer un fichier suite à un "getopenfilename"

4 réponses
Avatar
JF
bonjour

Je veux ouvrir puis fermer un fichier "toto1" que je choisis via la
boite de dialogue "Ouvrir" (car le nom de ce fichier peut varier).

Donc pour ouvrir le fichier je fais:

dlganswer =3D Application.GetOpenFilename
Workbooks.Open Filename:=3D dlganswer

ensuite je fais intervenir un deuxi=E8me fichier "toto2" dans lequel je
fais ex=E9cuter tout un tas de trucs.

Je veux finalement revenir au premier fichier "toto1"pour le fermer.
Mais je ne sais pas comment le rappeler. Je voulais faire

Workbooks.Close Filename:=3Ddlganswer

mais apparement cette syntaxe n'existe pas.
Et je ne veux pas =E9crire Workbooks("toto1").Close car il ne
s'appellera pas toujours "toto1".
Comment rappeler ce fichier alors que je suis dans un autre workbook?

Merci

4 réponses

Avatar
anonymousA
Bonjour

dlganswer = Application.GetOpenFilename
Workbooks.Open Filename:= dlganswer
set wbk¬tiveworkbook


et quand tu voudras le fermer, il te suffira d'écrire wbk.close

A+
Avatar
michdenis
Bonjour Jf,

En utilisant le truc d'anonymous.

Un détail important, tu dois définir une variable au niveau du module
dim Wk as workbook ou Public Wk As workbook
selon que tu veux pouvoir référencer le classeur que tu as ouvert
dans toutes les modules de ton classeur ou non. Par la même occasion,
il te sera loisible de le fermer avec la commande
Wk.Close True 'or False pour la sauvegarde


Salutations!






"JF" a écrit dans le message de news:
bonjour

Je veux ouvrir puis fermer un fichier "toto1" que je choisis via la
boite de dialogue "Ouvrir" (car le nom de ce fichier peut varier).

Donc pour ouvrir le fichier je fais:

dlganswer = Application.GetOpenFilename
Workbooks.Open Filename:= dlganswer

ensuite je fais intervenir un deuxième fichier "toto2" dans lequel je
fais exécuter tout un tas de trucs.

Je veux finalement revenir au premier fichier "toto1"pour le fermer.
Mais je ne sais pas comment le rappeler. Je voulais faire

Workbooks.Close Filename:=dlganswer

mais apparement cette syntaxe n'existe pas.
Et je ne veux pas écrire Workbooks("toto1").Close car il ne
s'appellera pas toujours "toto1".
Comment rappeler ce fichier alors que je suis dans un autre workbook?

Merci
Avatar
Vincnet.
Bonjour,
Sans passer par une variable, ça pourrait aussi donner :
Workbooks(Workbooks(dlganswer).name).Close
mais c'est quand même super lourd...
Et pour compléter les réponses d'AnonymousA et michdenis, il vaut en général
mieux éviter d'utiliser les ActiveWorkbook, ActiveSheet et autres
ActiveTrucs... Ce qui donne :

Dim wbk As Workbook
dlganswer = Application.GetOpenFilename
Set wbk = Workbooks.Open(Filename:= dlganswer)
'[...]
wbk.Close
Set wbk = Nothing 'pour vider wbk de la mémoire d'Excel

Et puis, peut-être rajouter un test :

Dim wbk As Workbook
dlganswer = Application.GetOpenFilename
If VarType(temp) = vbBoolean Then
MsbGox "Procédure annulée ou un truc du genre", vbOkOnly
Exit Sub 'Pour sortir effectivement de la procédure
Else
Set wbk = Workbooks.Open(Filename:= dlganswer)
End If
'[...]
wbk.Close
Set wbk = Nothing
End Sub



--
A+

V.



bonjour

Je veux ouvrir puis fermer un fichier "toto1" que je choisis via la
boite de dialogue "Ouvrir" (car le nom de ce fichier peut varier).

Donc pour ouvrir le fichier je fais:

dlganswer = Application.GetOpenFilename
Workbooks.Open Filename:= dlganswer

ensuite je fais intervenir un deuxième fichier "toto2" dans lequel je
fais exécuter tout un tas de trucs.

Je veux finalement revenir au premier fichier "toto1"pour le fermer.
Mais je ne sais pas comment le rappeler. Je voulais faire

Workbooks.Close Filename:=dlganswer

mais apparement cette syntaxe n'existe pas.
Et je ne veux pas écrire Workbooks("toto1").Close car il ne
s'appellera pas toujours "toto1".
Comment rappeler ce fichier alors que je suis dans un autre workbook?

Merci




Avatar
anonymousA
Bonjour,

sans aller jusqu'à souscrire à 100% avec ta remarque sur les
Activetruc (sic) , je reconnais qu'il peut parfois être surprenant
d'utiliser p.e les activeworkbook ou activesheet en raison des
procédures evenementielles que celles-ci peuvent contenir et donc les
eventuels mouvements intempestifs d'activation vers d'autres classeurs
ou feuilles . Dans le cas précis de l'exemple que je communiquais, il
est clair que si le classeur à ouvrir contient une procédure
workbook_open dans laquelle un ordre d'ouverture d'un autre fichier est
donné, alors activeworkbook sera le nouveau fichier en question et non
pas celui initialement ouvert. Raisonnement un peu tordu mais dont la
probabilité d'apparition n'est pas nulle. Ta déclarartion de wbk
prend donc tout son sens dans ce cas de figure et règle
définitivement ce type de problème.

A+