XL 2010 Supprimer les modules d'un projet VBA protegé par mdp

fattah_5791

XLDnaute Occasionnel
Salut tt le monde,
J'ai realisé un petit applicatif me permettant d'effectuer des taches bien precises, mias je voulais que les modules de CODE VBA s'effacent automatiquement apres une date precise que je dois declarer dans le module ThisWorkbook.

ci joint le code trouvé qlq part sur le net, il marche mais sans protection par mdp du ProjetVBA.
je voulais inserer un mot de passe (exemple: 0000) dans le code ci joint.

le mdp (0000) est celui utilisé pour protege le projet VBA

merci infiniment.

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

   Set Wkb = ThisWorkbook
   EndJob = DateSerial(2017, 9, 1)  'Choisir la date de 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 'penser à fermer tous les fichiers ouverts avant
                  SendKeys "%O"
Else
Exit Sub
  End If
  Application.DisplayAlerts = False
Wkb.Save
End Sub
 

ChTi160

XLDnaute Barbatruc
Bonjour fattah_5791
Bonjour Le Fil ,Le Forum

sans fichier pas évident voir si tu peux tester et adapter ce qui suit (pas sur d'avoir compris)
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Wkb As Workbook, EndJob As Date, VBC As Object
  Set Wkb = ThisWorkbook
   EndJob = DateSerial(2017, 9, 1)  'Choisir la date de fin applicatif   
If Date >= EndJob Then
'******************   
  UnprotectVBProject Wkb, "0000" 'Ici
'******************
  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 'penser à fermer tous les fichiers ouverts avant
  SendKeys "%O"
Else
Exit Sub
  End If
  Application.DisplayAlerts = False
Wkb.Save
End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
  Dim vbProj As Object
Application.ScreenUpdating = False
  Set vbProj = WB.VBProject
  If vbProj.Protection <> 1 Then Exit Sub 'Voir si utile
  Set Application.VBE.ActiveVBProject = vbProj
  SendKeys Password & "~~"
  Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
Application.ScreenUpdating = True
End Sub
Bonne fin de journée
Amicalement
Jean marie
 

fattah_5791

XLDnaute Occasionnel
bonjour CHTi160,

Le code genere un msg d'erreur!!!
upload_2017-9-12_14-54-4.png


merci
 

fattah_5791

XLDnaute Occasionnel
bonjour Yurperqod,

mon idée est d'avoir un CODE vba sur l'ancien fichier (.xlsm), une fois une date arrivée et en manipulant l'ancien fichier le code VBA doit faire ceci:
- copier l"ancien fichier (xlsm) sous format (xlsx);
- en mm temps raser l'ancien fichier (xlsm)
et donc qlq soit l'endroit (cle usb, partition, carte memoire,...) l'ancien fichier est supprimé!!!

le Code vba sera inserer soit dans ThisWorkbook, ou proprietes d'une feuille du classeur ou tt simplement à la fin de l'une des macros du fichier xlsm.

(cordialement, je suis un peu gourmand et debutant en vba)
 

job75

XLDnaute Barbatruc
Bonjour à tous,

Compléter la macro Workbook_Open comme suit :
Code:
Private Sub Workbook_Open()
If Date >= DateSerial(2017, 9, 1) Then  'Choisir la date de fin applicatif
  Dim fn$
  Application.DisplayAlerts = False
  fn = Me.FullName
  Me.SaveAs Left(fn, InStrRev(fn, ".") - 1), 51
  Kill fn
  Workbooks.Open Me.FullName
End If
'suite du code
End Sub
A+
 

Yurperqod

XLDnaute Occasionnel
Bonjour à tous

Avec Excel 2010, je n'ai pas de message d'erreur.
Si je double-clique dans l'explorateur Windows pour ouvrir le classeur, la transformation en *.xlsx se fait bien.

Si j'ai d'autres classeurs ouverts et que j'ouvre le classeur par Fichier/Ouvrir, le fichier reste en *.xlsm

J'ai bien activé les macros.

Ajout EDITION
En fait, ca fait pareil sur un classeur quand on l'ouvre par Fichier/Ouvrir
la macro WorkBook_Open se lance pas

j'ai testé sur un classeur vierge avec cette macro
Private Sub Workbook_Open()
MsgBox Me.FullName
End Sub

Quand on ouvre par un double-clic la macro se lance sinon non.
 
Dernière édition:

Statistiques des forums

Discussions
312 194
Messages
2 086 068
Membres
103 110
dernier inscrit
Privé