ClearContents ne fonctionne pas dans Workbook_BeforeClose

Bonjour,

Je vous écris car je n'arrive pas à faire fonctionner un ClearContents dans une Sub Workbook_BeforeClose. Je travaille sur Mac donc j'aimerais savoir si vous rencontrez le même problème que moi. J'explique dans un premier temps mon problème puis vous propose de tester avec les fichiers mis en exemple. Je vous serrais infiniment reconnaissant si vous pouviez me donner un retour

J'utilise plusieurs classeurs. Un classeur peut appeler la fermeture d'un autre par du code VBA. Dans chacun de mes classeurs, j'utilise une Sub Workbook_BeforeClose qui vient entre autres choses effacer certaines de leurs cellules à leur fermeture.

A priori pas de problème avec la Sub Workbook_BeforeClose, car lorsque je ferme manuellement mes classeurs, mes cellules sont bien effacées.

Cependant, lorsqu'un classeur appelle la fermeture d'un autre, je remarque que les lignes de code avec du .ClearContents ne fonctionnent pas. Le code ne renvoie pas d'erreur, et il est bien lu (j'ai pris soin de créer une ligne de code indiquant dans une cellule de mes classeurs que la Sub Workbook_BeforeClose a bien été lue), mais tout se passe comme si les .ClearContents étaient sautés.

Pour vous illustrer simplement le problème voici en lien 2 fichiers:

  • le fichier 1 contient une macro pour fermer le fichier 2
  • le fichier 2 contient en A1 une cellule qui doit-être effacée à la fermeture par Sub Workbook_BeforeClose. En A2, cette-même Sub indique par un message qu'elle a bien été lue.
6fichier2.xlsm (14.05 Ko)
9fichier1.xlsm (15.89 Ko)

Merci d'essayer:

1. Ouvrez le fichier 2, inscrivez quelque chose en A1. Fermez le fichier 2, ouvrez le à nouveau. Si vous avez comme moi, alors la Sub de fermeture a bien été lue comme indiquée en A2 et le contenu d'A1 a été effacé.

2. Ouvrez le fichier 2 et inscrivez à nouveau quelque chose en A1. Ouvrez le fichier 1. Cliquer la macro demandant la fermeture du fichier 2. Après fermeture sa fermeture, ouvrez à nouveau le fichier 2. Si vous avez comme moi, alors la cellule grisée n'a pas été effacée alors qu'il est pourtant bien indiqué en A2 que Sub Workbook_BeforeClose a bien été lue (.ClearContents inopérant????)

Merci infiniment

Hugo

Bonjour Hugo88,

Le W_BC est un événement propre à un classeur avant que l'utilisateur fait effectivement la fermeture du classeur.

Là c'est une macro d'un classeur externe qui demande la clôture d'un autre. Pourquoi en lançant cette macro n'appellerait tu pas une macro de l'autre classeur qui effacerait les cellules souhaitées. Puis ensuite viendrait le code de clôture?

Bonjour X Cellus,

Merci beaucoup pour ta réponse. Elle vient de m'aider à trouver une solution

En fait si le Fichier 1 appelle une Sub du fichier 2 qui elle-même appelle la fermeture du fichier 2, alors les .ClearContents du Workbook_BeforeClose du fichier 2 sont réalisés sans accroc

Il était compliqué pour moi d'externaliser le travail fait par Workbook_BeforeClose car:

  • si j'externalisais le code (i.e. je sortais le code de Workbook_BeforeClose), alors le code n'était plus réalisé dans le cas d'une fermeture manuelle de mon classeur
  • si je dupliquais le code (i.e. je l'avais en double, une fois dans Workbook_BeforeClose et une fois dans une autre Sub), alors le code était fait deux fois, ce qui me déclenchais des erreurs (.ClearContents n'était qu'une partie d'une procédure plus complexe).

Ci-dessous les nouveaux fichiers obtenus pour ceux qui pourraient avoir ce genre de problème.

7fichier2.xlsm (15.03 Ko)
4fichier1.xlsm (16.62 Ko)

Merci pour ton aide

A nouveau,

Ravi que cela t'a permis d'avancer. Je n'avais pas mon ordi sous la main quand je t'ai répondu. Donc n'ai pu télécharger tes fichiers.

Mais c'était l'objectif. Laisser faire l'effacement par le fichier 2 par l'appel d'une macro présente dans son programme. Avec un code de fermeture à la suite. J'avais déjà eu à le faire mais c'était pour des copies de données.

Je vais télécharger tes derniers fichiers et c'est très bien de le proposer pour aider ceux qui auraient le même besoin. Merci pour ton appréciation.

Bonne continuation.

Et bien avec plaisir, mais à vrai dire j'ai à nouveau le problème

Du coup j'ai peut-être mal analysé le résultat d'un de mes tests, ou alors il y a dans certains cas un état dans lequel Excel engendre l'erreur, et d'autres non.

J'ai réussi à contourner le problème dans ma procédure d'appel de fermeture avec du code, mais bon c'est un peu une béquille pour mieux marcher. Je vais avancer pour ne pas rester coincé. Si l'un de vous voit l'astuce, je suis toujours preneur

A nouveau,

J'ai téléchargé tes fichiers et regardes en fin de pause déjeuner.

A suivre...

Suite,

Voici tes fichiers modifiés.

Bons tests, bonne continuation.

7fichier1modif.xlsm (15.88 Ko)
7fichier2modif.xlsm (13.96 Ko)

Merci X Cellus,

Je n'ai pas réussi à ouvrir le Fichier 1.

Mais finalement j'ai trouvé la solution. Il suffisait de remplacer .Clearcontents par un bon vieux .Value = VbNullString

Et là ça marche

Merci encore et très bonne soirée à toi.

Hugo

A nouveau,

Voici le code pour le module 1 du fichier2 dans le cas d'un ClearContents.

Sub FermetureFichier2()
Workbooks("Fichier2Modif.xlsm").Activate
Range("Feuil1!A1").ClearContents
ThisWorkbook.Close True
End Sub

Mais je retiens aussi ta solution vintage.

Comme dit le dicton "Avec de vieux pots on fait des bonnes soupes".

Bonne soirée à toi aussi.

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