Evènement Workbook_BeforeClose ne fonctionne pas

Bonjour,

J'ai réussi à bricoler un fichier avec plusieurs userform. J'ai trouvé un code pour bloquer la fermeture de manière classique d'un fichier excel. Il s'agit de l’événement Workbook_BeforeClose avec Cancel = True. Malheureusement, cela fonctionne qu'une fois. Et bizarrement si j'ouvre un autre fichier depuis mon fichier tout fonctionne. Je ne comprends pas. Je précise que je suis novice en la matière. Je suis juste curieux et persévérant.

Je vous remercie par avance pour votre aide.

Bonne journée

Bonjour,

Vous devriez poster votre code, ce serait plus clair.

Sinon, il faut bien cibler l'objet concerné. Donc si le classeur, dont on veut empêcher la fermeture, est bien le classeur exécutant (celui qui a le fameux code dans le module thisworkbook), il faut y faire référence dans le dit code avec le mot clé Me.

Exemple de code :

private sub workbook_beforeclose(cancel as boolean)
if me.name <> workbooks(workbooks.count).name then cancel = true
end sub

pour empêcher de fermer le classeur si celui-ci a généré l'ouverture d'autres classeurs.

Cdlt,

image

Bonsoir,

Je ne sais pas si cette capture d'écran vous suffit pour mieux comprendre ma demande.

Merci encore pour votre aide.

Cordialement,

En fait, il vaut mieux poster le code à l'aide du bouton </> du ruban d'icônes. C'est plus lisible et ça permet de le copier (on ne peut rien faire d'une image en général).

Pour que je comprenne, il faudrait que vous expliquiez ce que vous cherchez à faire car pour l'instant, ce que je vois, c'est que vous empêchez simplement la fermeture du classeur, sans condition. Peut-être qu'ils y ont pensé chez Microsoft et qu'ils autorisent la fermeture lors de la seconde tentative, je ne sais pas, je n'ai pas essayé.

Cdlt,

Re-Bonsoir,

Je vous remercie pour les astuces. L'idée du projet est relativement simple je ne veux pas que le fichier puisse être fermé via la croix mais uniquement par un bouton dans un userform. Donc je veux bloquer toutes feuilles utilisées. Et c'est donc là, la surprise quand j'ouvre une fichier excel à partir de mon fichier il me permet d'exécuter correctement l'évènement beforeclose. Je ne comprends pas.

Bonne soirée si vous avez d'autres choses à faire

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = True
End Sub
Private Sub Workbook_Open()
UserForm4.Show

End Sub
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Application.DisplayAlerts = False
Sh.Delete
Application.DisplayAlerts = True
End Sub

Merci pour le code .

Mais, le fichier qui est fermé, c'est le fichier avec l'userform ou c'est le fichier ouvert entre temps ? Car ce code ne s'occupe que du fichier avec l'userform, ou plus précisément que du fichier qui détient ce code dans son module thisworkbook.

Je me dis qu'il pourrait être plus simple de masquer la croix de fermeture du fichier ? Voici un lien qui traite de ce sujet : https://www.excel-downloads.com/threads/masquer-croix-rouge-de-fermeture-excel.75760/ (Merci à BrunoM45 s'il nous lit).

J'ai vu ce lien auassi : https://www.excel-downloads.com/threads/interdire-reduire-fermer-in-barre-titre-fenetr.34155/

En tapant masquer croix fermeture excel sur Google.

Bonne soirée à vous aussi !

Bonjour,

Je vous remercie pour votre réponse et je vais explorer cette option. Néanmoins, pour répondre à votre question l'userform concerne effectivement le fichier principal. J'ai ouvert un deuxième pour tester ce code sur une feuille vierge. Et c'est à cette occasion que j'ai pu constater que l’événement beforeclose fonctionnait en continu quand 2 feuilles étaient ouvertes. C'est étrange n'est-ce pas ?

Je vous remercie encore pour votre aide et je vous souhaite une bonne journée.

Cordialement,

Rechercher des sujets similaires à "evenement workbook beforeclose fonctionne pas"