Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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:

JCGL

XLDnaute Barbatruc
Bonjour à tous,
Salut LoneWolf,

Je pense qu'il est préférable de poser :
VB:
If Date >= EndJob Then
car si le fichier n'est pas ouvert le 01/09/2017 la macro ne s'exécutera pas.

A+ à tous
 

DoubleZero

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

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
 

fattah_5791

XLDnaute Occasionnel
merci à vous tous, juste j'ai déjà mon code dans le module1, ce dernier est protegé par un mot de passe.
je veux integrer l'annulation de ce mot de passe pour acceder au module.
merci infiniment
 

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)

======================================
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,...
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…