XL 2010 Raser le code VBA d'un applicatif apes une date precise

fattah_5791

XLDnaute Occasionnel
Salut tout le monde,
je suis arrivé à créer une petite application constituée de plusieurs macros VBA. Elle (application) sera entre les mains de personnes non initiées à manipuler le code.
Je veux, une fois la personne a finalisé le travail voulu (en principe fin mois 08/2017), je veux que le code VBA de l'applicatif sera effacé définitivement sans toucher au résultat (les feuilles créées ainsi que leur résultat ) sous la condition précitée.
Merci infiniment
 

Lone-wolf

XLDnaute Barbatruc
Bonjour fattah :), le Forum :)

Sans savoir l'heure de fin du travail de la date précitée, je pense qu'il est mieux de faire comme ceci

VB:
Option Explicit

Private Sub Workbook_Open()
Dim Wkb As Workbook, EndJob As Date

    Set Wkb = ThisWorkbook
    EndJob = DateSerial(2017, 9, 1)  'ici au 1er Septembre

    If Date = EndJob Then
        With Wkb.VBProject
            .VBComponents.Remove .VBComponents("Module1")
        End With
    Else
        Exit Sub
    End If
End Sub

'OUBIEN

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Wkb As Workbook, EndJob As Date

    Set Wkb = ThisWorkbook
    EndJob = DateSerial(2017, 9, 1)  'ici au 1er Septembre

    If Date = EndJob Then
        With Wkb.VBProject
            .VBComponents.Remove .VBComponents("Module1")
        End With
    Else
        Exit Sub
    End If
                     Application.DisplayAlerts = False
                     Wkb.Save
End Sub
 
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Bonjour à toutes et à tous, bises à JCGL :D,

Autre possibilité :
VB:
Option Explicit
Private Sub Workbook_Open()
' adaptation d'un code de.... J'ai la mémoire qui flanche !
    Dim VBC As Object
    If Now > DateValue("31/08/2017") Then
        With ActiveWorkbook.VBProject
            For Each VBC In .VBComponents
                If VBC.Type = 100 Then
                    With VBC.CodeModule
                        .DeleteLines 1, .CountOfLines
                        .CodePane.Window.Close
                    End With
                Else
                    .VBComponents.Remove VBC
                End If
            Next VBC
        End With
    End If
End Sub
A bientôt :)
 

DoubleZero

XLDnaute Barbatruc
Re-bonjour,
... meme si le module est protegé par un mot de passe, le module sera effacé.

?..

Sur mon poste, je n'obtiens que ceci :

upload_2017-5-6_18-4-43.png

A bientôt :)
 

fattah_5791

XLDnaute Occasionnel
salut Doublezero,
le code que j'ai utilisé est le suivant:
======================================
Attention le code ci-dessous efface tous les modules!!! (chez moi mm si les modules sont proteges par mdp, ils sont detruits !!!
le contenu du module 'ThisWorkbook' sera effacé aussi !!!
Sachant qu'une doit etre cochée en Excel (voir image)
upload_2017-5-6_16-23-59.png

======================================
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Wkb As Workbook, EndJob As Date, VBC As Object

Set Wkb = ThisWorkbook
EndJob = DateSerial(2017, 5, 6) 'Choisir la date fin applicatif
If Date >= EndJob Then
With ActiveWorkbook.VBProject
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC
End With
Application.Quit 'pense à fermer tous les fichiers ouverts avant
SendKeys "%O"
Else
Exit Sub
End If
Application.DisplayAlerts = False
Wkb.Save
End Sub
====================================


A suivre,...
 

Statistiques des forums

Discussions
312 895
Messages
2 093 385
Membres
105 715
dernier inscrit
Yoenai