Patrick est en train d’écrire une macro et il souhaite que la macro se supprime une fois qu’une date d’expiration spécifique est atteinte. Cette tâche peut être abordée de plusieurs manières. Tout d’abord, vous pouvez écrire une macro qui ne fonctionnerait qu’avant une date spécifique, de la manière suivante:

Sub MyMacro()



ExpirationDate = #1/1/2020#     If Now() < ExpirationDate Then

'Rest of macro goes here

End if End Sub

L’idée est que si (dans ce cas) la date actuelle est antérieure au 1er janvier 2020, le corps principal de la macro s’exécutera. Si c’est le 1er janvier ou plus tard, la macro ne s’exécutera pas. Cette approche, bien sûr, ne supprime pas réellement la macro; il vérifie simplement que la macro est exécutée avant une certaine date.

Pour réellement vous débarrasser du code de macro, vous devez adopter une approche différente:

Private Sub Workbook_Open()

Dim VBComp As VBIDE.VBComponent     Dim VBComps As VBIDE.VBComponents

'Delete if Past Date     If Date >= #1/1/2020# Then         Set VBComps = ActiveWorkbook.VBProject.VBComponents

For Each VBComp In VBComps             Select Case VBComp.Type                 Case vbext_ct_StdModule, vbext_ct_MSForm, _                   vbext_ct_ClassModule                     VBComps.Remove VBComp                 Case Else                     With VBComp.CodeModule                         .DeleteLines 1, .CountOfLines                     End With             End Select         Next VBComp     End If

Set VBComps = Nothing     Set VBComp = Nothing End Sub

Ce code a été adapté d’une macro écrite à l’origine par Chip Pearson, disponible sur son site à l’adresse suivante:

http://www.cpearson.com/excel/vbe.aspx

Pour que la macro fonctionne, vous devez vous assurer qu’il existe une référence à l’extensibilité de Microsoft Visual Basic pour Applications. (Vous faites cela en choisissant, dans l’éditeur VB, Outils | Références, puis en choisissant Extensibilité de Microsoft Visual Basic pour Applications dans les références disponibles.)

La macro s’exécute lorsque le classeur est ouvert et, si la date est supérieure ou égale au 1er janvier 2020, chaque composant du VBProject est supprimé. Cela signifie que la macro est très puissante, car elle supprime tout, pas seulement une procédure ou un module unique.

Il y a bien sûr plusieurs choses à garder à l’esprit avec cette macro.

Tout d’abord, si l’utilisateur choisit de ne pas activer les macros lorsque le classeur est ouvert, ce code ne s’exécutera jamais et la macro ne sera pas supprimée.

Deuxièmement, la suppression de macros de cette manière introduit évidemment des modifications dans le classeur. Cela signifie que lorsque le classeur est fermé, il sera demandé à l’utilisateur s’il souhaite enregistrer ses modifications. S’ils choisissent de ne pas le faire, les suppressions ne seront pas enregistrées et la macro s’exécutera à nouveau la prochaine fois que le classeur sera ouvert.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (12812) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:

link: / excel-Self-Deleting_Macros [Self-Deleting Macros].