ç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.
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.
ç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.
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 ?
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 ?
ç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 ?
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.
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.
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.
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.
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.
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.
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...
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...
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...
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)))
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...
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...
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...
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.
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.
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.
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.
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.
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.