Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fermeture de fichier .xls en VBA

19 réponses
Avatar
PB
Bonsoir
comment fermer un fichier en VBA sans qu'il demande voulez-vous
sauvegarder etc.....
Merci

9 réponses

1 2
Avatar
DanielCo
DanielCo a écrit, le 23/05/2011 09:16 :
Gloops a écrit
DanielCo a écrit, le 22/05/2011 20:30 :
Bonjour Modeste,
Quelle est la différence avec :

ActiveWorkbook.Close True



ça, ça sauvegarde les modifications faites dans le classeur, non ?



Ce que je veux dire, c'est que le bouton par défaut, c'est
"Enregistrer", précisément.





Tu voulais dire ... la valeur par défaut, du premier argument ... True, donc
enregistrer ?



On a du mal à se comprendre. Je veux seulement dire que, quand on ferme
un classeur et qu'il y a eu des modifications d'apportées, dans le
pop-up qui s'affiche, le bouton ayant le focus, c'est "Enregistrer".
Donc, on peut utiliser :
1.
Application.DisplayAlerts = False
ActiveWorkbook.Close
dans ce cas, le classeur est enregistré;
2.
ActiveWorkbook.Close True
ou
ActiveWorkbook.Close False
(je ne pense pas qu'il y ait une valeur par défaut.)
Dans ce cas, la ligne :
Application.DisplayAlerts = False
est inutile.
Avatar
Gloops
DanielCo a écrit, le 23/05/2011 11:58 :
DanielCo a écrit, le 23/05/2011 09:16 :
Gloops a écrit
DanielCo a écrit, le 22/05/2011 20:30 :
Bonjour Modeste,
Quelle est la différence avec :

ActiveWorkbook.Close True



ça, ça sauvegarde les modifications faites dans le classeur, non ?



Ce que je veux dire, c'est que le bouton par défaut, c'est
"Enregistrer", précisément.





Tu voulais dire ... la valeur par défaut, du premier argument ...
True, donc enregistrer ?



On a du mal à se comprendre. Je veux seulement dire que, quand on fer me
un classeur et qu'il y a eu des modifications d'apportées, dans le
pop-up qui s'affiche, le bouton ayant le focus, c'est "Enregistrer".
Donc, on peut utiliser :
1.
Application.DisplayAlerts = False
ActiveWorkbook.Close
dans ce cas, le classeur est enregistré;
2.
ActiveWorkbook.Close True
ou
ActiveWorkbook.Close False
(je ne pense pas qu'il y ait une valeur par défaut.)
Dans ce cas, la ligne :
Application.DisplayAlerts = False
est inutile.





Tout-à-fait, d'après la doc, c'est bien ça.
Alors j'ai appliqué
ActiveWorkbook.Close False

et il m'est arrivé que l'application me demande si je voulais
enregistrer les modifications, alors qu'il me semblait bien que la
réponse était incluse dans l'instruction.

Je me suis dit, tiens, là, y a un truc que je n'ai pas pigé.
Alors j'ai quand même mis Application.DisplayAlerts = False,
bien qu'il m'ait semblé, comme à toi, que c'était inutile.

Oops, au fait, quelqu'un dans le fil a parlé de Application.WarningDisp lay

Y a-t-il deux variables, pour gérer l'affichage de messages ?
Avatar
DanielCo
Tout-à-fait, d'après la doc, c'est bien ça.
Alors j'ai appliqué
ActiveWorkbook.Close False

et il m'est arrivé que l'application me demande si je voulais enregistrer
les modifications, alors qu'il me semblait bien que la réponse était
incluse dans l'instruction.

Je me suis dit, tiens, là, y a un truc que je n'ai pas pigé.
Alors j'ai quand même mis Application.DisplayAlerts = False,
bien qu'il m'ait semblé, comme à toi, que c'était inutile.

Oops, au fait, quelqu'un dans le fil a parlé de Application.WarningDisplay

Y a-t-il deux variables, pour gérer l'affichage de messages ?



OK, mais j'attendrai que ça m'arrive; ça doit être un cas particulier,
mais je n'arrive pas à imaginer quoi.
Pour le WarningDsplay, je pense qu'il fallait lire DisplayAlerts.
Avatar
Gloops
DanielCo a écrit, le 23/05/2011 16:29 :
Tout-à-fait, d'après la doc, c'est bien ça.
Alors j'ai appliqué
ActiveWorkbook.Close False

et il m'est arrivé que l'application me demande si je voulais
enregistrer les modifications, alors qu'il me semblait bien que la
réponse était incluse dans l'instruction.

Je me suis dit, tiens, là, y a un truc que je n'ai pas pigé.
Alors j'ai quand même mis Application.DisplayAlerts = False,
bien qu'il m'ait semblé, comme à toi, que c'était inutile.

Oops, au fait, quelqu'un dans le fil a parlé de
Application.WarningDisplay

Y a-t-il deux variables, pour gérer l'affichage de messages ?



OK, mais j'attendrai que ça m'arrive; ça doit être un cas particu lier,
mais je n'arrive pas à imaginer quoi.
Pour le WarningDsplay, je pense qu'il fallait lire DisplayAlerts.





Oui, c'est vrai que dans la majorité des cas, on peut faire comme
indiqué dans la doc.
Avatar
MichD
Bonjour,

Juste pour le plaisir,
Il y a des cas particuliers : Exemple, ce code dans le ThisWorkbook

'-------------------------
Private Sub Workbook_Deactivate()
'On Error Resume Next
Range("A1") = 1
ThisWorkbook.Close True
End Sub
'-------------------------

Ce code plante si vous essayez de fermer le fichier normalement et que la ligne "On error..." est désactivée.
Si vous activez la ligne "On error..." la modification en A1 sera sauvegardée.

Dans les 2 cas, vous aurez eu le message : "Désirez-vous enregistrer les modifications..."

Vous pouvez tester la même procédure en ayant 2 classeurs ouverts et observer ce qui se passe
si vous essayez de passer du classeur qui contient ce code à un autre classeur...

N.B- J'ai fait ce test avec Excel 2007.


MichD
--------------------------------------------
Avatar
Maude Este
Bonsour®

Oops, au fait, quelqu'un dans le fil a parlé de Application.WarningDisplay


Pour le WarningDsplay, je pense qu'il fallait lire DisplayAlerts.



oupssss...
en effet, toutes mes confuses !!!
(réminiscence d'un autre langage)
;o)))
Avatar
DanielCo
Bonsoir Denis,
Amusant, il fait la partie "true" sans faire la partie "close"...
Tu aurais un début d'explication ?
Cordialement.
Daniel


Bonjour,

Juste pour le plaisir,
Il y a des cas particuliers : Exemple, ce code dans le ThisWorkbook

'-------------------------
Private Sub Workbook_Deactivate()
'On Error Resume Next
Range("A1") = 1
ThisWorkbook.Close True
End Sub
'-------------------------

Ce code plante si vous essayez de fermer le fichier normalement et que la
ligne "On error..." est désactivée. Si vous activez la ligne "On error..." la
modification en A1 sera sauvegardée.

Dans les 2 cas, vous aurez eu le message : "Désirez-vous enregistrer les
modifications..."

Vous pouvez tester la même procédure en ayant 2 classeurs ouverts et observer
ce qui se passe si vous essayez de passer du classeur qui contient ce code à
un autre classeur...

N.B- J'ai fait ce test avec Excel 2007.


MichD
--------------------------------------------
Avatar
MichD
Bonjour Daniel,

Lorsque l'on clique sur le X pour fermer un classeur, l'ordre des événements :

A ) Private Sub Workbook_BeforeClose(Cancel As Boolean)

B ) Message demandant si la sauvegarde des modifications doit être faites

C ) Private Sub Workbook_Deactivate()

Workbook_Deactivate est la dernière procédure qui doit s'exécuter avant
VBA laisse son emprise sur cet objet. À la fin de la procédure, soit le
fichier est fermé, soit le fichier n'est plus le fichier actif.

Lorsque l'on inclut une commande du type : Thisworkbook.close True dans la
procédure Workbook_Deactivate, cela oblige à exécuter à nouveau la procédure
Workbook_BeforeClose qui a son tour relance la procédure Workbook_deactivate
qui dans les faits n'a jamais pu finir de s'exécuter complètement une première fois.
Au moment où elle devrait avoir perdu le focus (à la fin de la procédure), on tente
de lui imposer à nouveau ce focus avant que la procédure ait fini de s'exécuter.

Si tu exécutes la procédure pas à pas, tu n'auras aucun message d'erreur. Comme
l'objet (vba) a forcément le focus lors de l'exécution pas à pas, tout fonctionne correctement.

C'est une tentative d'explication, il y a peut-être quelqu'un qui a une meilleure
compréhension sur le "Handle" des fenêtres lors d'exécution de procédure événementielle.


MichD
--------------------------------------------
Avatar
DanielCo
Bonjour Denis,
Merci; ça colle bien avec ce qu'il se passe.
Daniel


Bonjour Daniel,

Lorsque l'on clique sur le X pour fermer un classeur, l'ordre des événements
:

A ) Private Sub Workbook_BeforeClose(Cancel As Boolean)

B ) Message demandant si la sauvegarde des modifications doit être faites

C ) Private Sub Workbook_Deactivate()

Workbook_Deactivate est la dernière procédure qui doit s'exécuter avant
VBA laisse son emprise sur cet objet. À la fin de la procédure, soit le
fichier est fermé, soit le fichier n'est plus le fichier actif.

Lorsque l'on inclut une commande du type : Thisworkbook.close True dans la
procédure Workbook_Deactivate, cela oblige à exécuter à nouveau la procédure
Workbook_BeforeClose qui a son tour relance la procédure Workbook_deactivate
qui dans les faits n'a jamais pu finir de s'exécuter complètement une
première fois. Au moment où elle devrait avoir perdu le focus (à la fin de la
procédure), on tente de lui imposer à nouveau ce focus avant que la procédure
ait fini de s'exécuter.

Si tu exécutes la procédure pas à pas, tu n'auras aucun message d'erreur.
Comme l'objet (vba) a forcément le focus lors de l'exécution pas à pas, tout
fonctionne correctement.

C'est une tentative d'explication, il y a peut-être quelqu'un qui a une
meilleure compréhension sur le "Handle" des fenêtres lors d'exécution de
procédure événementielle.


MichD
--------------------------------------------
1 2