Nouveau venu sur le site, je cherche, après avoir longuement remué les archives, à faire fonctionner une macro mais sans succès...
Lors de mes recherches, j'ai trouvé une macro qui teste si mon projet VBA est protégé par mot de passe et si non, lance la macro suicide...
J'ai tourné et retourné le code mais n'arrive à rien. Je dois reconnaitre que mes connaissances en langage VBA sont limitées.
Voici ou j'en suis:
Thisworbook:
Private Sub ThisWorkbook_Activate()
'Si le fichier est déprotégé -> suicide , le fichier disparait totalement
If ThisWorkbook.VBProject.Protection = False Then
Call Module1.Suicide
End Sub
Sub TestUnprotect()
'"toto" représente le mot de passe
UnprotectVBProject ThisWorkbook, "toto"
Call Module1.Suicide
End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~"
Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
End Sub
Module:
Sub Suicide()
Dim FName As String
Dim Ndx As Integer
With ThisWorkbook
.Save
For Ndx = 1 To Application.RecentFiles.Count
If Application.RecentFiles(Ndx).Path = .FullName Then
Application.RecentFiles(Ndx).Delete
Exit For
End If
Next Ndx
.ChangeFileAccess Mode:=xlReadOnly
Kill .FullName
.Close SaveChanges:=False
End With
End Sub
Je n'arrive pas à comprendre le processus et souhaiterais arriver à mes fins.
Quelqu'un aurait-il des suggestions ?
Merci d'avance pour vos réponses et votre contribution.
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String) Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~" Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute End Sub
Module:
Sub Suicide() Dim FName As String Dim Ndx As Integer With ThisWorkbook .Save For Ndx = 1 To Application.RecentFiles.Count If Application.RecentFiles(Ndx).Path = .FullName Then Application.RecentFiles(Ndx).Delete Exit For End If Next Ndx .ChangeFileAccess Mode:=xlReadOnly Kill .FullName .Close SaveChanges:úlse End With End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~"
Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
End Sub
Module:
Sub Suicide()
Dim FName As String
Dim Ndx As Integer
With ThisWorkbook
.Save
For Ndx = 1 To Application.RecentFiles.Count
If Application.RecentFiles(Ndx).Path = .FullName Then
Application.RecentFiles(Ndx).Delete
Exit For
End If
Next Ndx
.ChangeFileAccess Mode:=xlReadOnly
Kill .FullName
.Close SaveChanges:=False
End With
End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String) Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~" Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute End Sub
Module:
Sub Suicide() Dim FName As String Dim Ndx As Integer With ThisWorkbook .Save For Ndx = 1 To Application.RecentFiles.Count If Application.RecentFiles(Ndx).Path = .FullName Then Application.RecentFiles(Ndx).Delete Exit For End If Next Ndx .ChangeFileAccess Mode:=xlReadOnly Kill .FullName .Close SaveChanges:úlse End With End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String) Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~" Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute End Sub
Module:
Sub Suicide() Dim FName As String Dim Ndx As Integer With ThisWorkbook .Save For Ndx = 1 To Application.RecentFiles.Count If Application.RecentFiles(Ndx).Path = .FullName Then Application.RecentFiles(Ndx).Delete Exit For End If Next Ndx .ChangeFileAccess Mode:=xlReadOnly Kill .FullName .Close SaveChanges:úlse End With End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~"
Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
End Sub
Module:
Sub Suicide()
Dim FName As String
Dim Ndx As Integer
With ThisWorkbook
.Save
For Ndx = 1 To Application.RecentFiles.Count
If Application.RecentFiles(Ndx).Path = .FullName Then
Application.RecentFiles(Ndx).Delete
Exit For
End If
Next Ndx
.ChangeFileAccess Mode:=xlReadOnly
Kill .FullName
.Close SaveChanges:=False
End With
End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String) Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~" Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute End Sub
Module:
Sub Suicide() Dim FName As String Dim Ndx As Integer With ThisWorkbook .Save For Ndx = 1 To Application.RecentFiles.Count If Application.RecentFiles(Ndx).Path = .FullName Then Application.RecentFiles(Ndx).Delete Exit For End If Next Ndx .ChangeFileAccess Mode:=xlReadOnly Kill .FullName .Close SaveChanges:úlse End With End Sub
============================ Lorsque je déprotège le projet VB, les codes sont visibles et le fichier ne se détruit qu'à partir du moment ou l'on revient dans excel changer de position. Est-il possible d'avoir le même comportement à partir de la déprotection du projet VB afin d'éviter de voir le code et si cela est possible le même comportement peut-il être reproduit si l'on déprotège ne serais-ce qu'une seule feuille ? ============================ Si tu ouvres toi-même l'éditeur de code du fichier Excel et que tu décides de déprotéger le projetVBA de ce dernier, Il n'y a aucune procédure événementielle que l'on peut utiliser comme "Déclencheur" pour lancer une "macro suicide".
De plus, je te rappelle que tu pourrais faire cela sans que les macros aient été activées à l'ouverture du classeur. Dans ces cas, je ne vois pas comment on pourrait appeler une macro "suicide".
============================ Lorsque je déprotège le projet VB, les codes sont visibles et le fichier ne
se
détruit qu'à partir du moment ou l'on revient dans excel changer de
position.
Est-il possible d'avoir le même comportement à partir de la déprotection du
projet VB afin d'éviter de voir le code et si cela est possible le même
comportement peut-il être reproduit si l'on déprotège ne serais-ce qu'une
seule
feuille ?
============================
Si tu ouvres toi-même l'éditeur de code du fichier Excel et que tu décides
de
déprotéger le projetVBA de ce dernier, Il n'y a aucune procédure
événementielle
que l'on peut utiliser comme "Déclencheur" pour lancer une "macro suicide".
De plus, je te rappelle que tu pourrais faire cela sans que les macros aient
été activées
à l'ouverture du classeur. Dans ces cas, je ne vois pas comment on pourrait
appeler une macro "suicide".
============================ Lorsque je déprotège le projet VB, les codes sont visibles et le fichier ne se détruit qu'à partir du moment ou l'on revient dans excel changer de position. Est-il possible d'avoir le même comportement à partir de la déprotection du projet VB afin d'éviter de voir le code et si cela est possible le même comportement peut-il être reproduit si l'on déprotège ne serais-ce qu'une seule feuille ? ============================ Si tu ouvres toi-même l'éditeur de code du fichier Excel et que tu décides de déprotéger le projetVBA de ce dernier, Il n'y a aucune procédure événementielle que l'on peut utiliser comme "Déclencheur" pour lancer une "macro suicide".
De plus, je te rappelle que tu pourrais faire cela sans que les macros aient été activées à l'ouverture du classeur. Dans ces cas, je ne vois pas comment on pourrait appeler une macro "suicide".
jenesaispaspourquoi
Le mercredi 15 Octobre 2014 Ã 21:37 par jenesaispaspourquoi :
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String) Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~" Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute End Sub
Module:
Sub Suicide() Dim FName As String Dim Ndx As Integer With ThisWorkbook .Save For Ndx = 1 To Application.RecentFiles.Count If Application.RecentFiles(Ndx).Path = .FullName Then Application.RecentFiles(Ndx).Delete Exit For End If Next Ndx .ChangeFileAccess Mode:=xlReadOnly Kill .FullName .Close SaveChanges:úlse End With End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~"
Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
End Sub
Module:
Sub Suicide()
Dim FName As String
Dim Ndx As Integer
With ThisWorkbook
.Save
For Ndx = 1 To Application.RecentFiles.Count
If Application.RecentFiles(Ndx).Path = .FullName Then
Application.RecentFiles(Ndx).Delete
Exit For
End If
Next Ndx
.ChangeFileAccess Mode:=xlReadOnly
Kill .FullName
.Close SaveChanges:=False
End With
End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String) Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~" Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute End Sub
Module:
Sub Suicide() Dim FName As String Dim Ndx As Integer With ThisWorkbook .Save For Ndx = 1 To Application.RecentFiles.Count If Application.RecentFiles(Ndx).Path = .FullName Then Application.RecentFiles(Ndx).Delete Exit For End If Next Ndx .ChangeFileAccess Mode:=xlReadOnly Kill .FullName .Close SaveChanges:úlse End With End Sub
Regarde ce fichier : http://cjoint.com/?DJtnOsmeLTX
Toutes les procédures sont dans le ThisWorkbook sauf une qui doit être dans un module standard.
Observe ce qui se passe si tu ouvres le fichier sans "activer les macros" du fichier. Le seul "HIC", c'est que le classeur s'enregistre automatiquement à la fermeture du classeur!
Regarde ce fichier : http://cjoint.com/?DJtnOsmeLTX
Toutes les procédures sont dans le ThisWorkbook sauf une qui doit être dans
un module standard.
Observe ce qui se passe si tu ouvres le fichier sans "activer les macros" du
fichier.
Le seul "HIC", c'est que le classeur s'enregistre automatiquement à la
fermeture du classeur!
Regarde ce fichier : http://cjoint.com/?DJtnOsmeLTX
Toutes les procédures sont dans le ThisWorkbook sauf une qui doit être dans un module standard.
Observe ce qui se passe si tu ouvres le fichier sans "activer les macros" du fichier. Le seul "HIC", c'est que le classeur s'enregistre automatiquement à la fermeture du classeur!
jenesaispaspourquoi
Le mercredi 15 Octobre 2014 Ã 21:37 par jenesaispaspourquoi :
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String) Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~" Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute End Sub
Module:
Sub Suicide() Dim FName As String Dim Ndx As Integer With ThisWorkbook .Save For Ndx = 1 To Application.RecentFiles.Count If Application.RecentFiles(Ndx).Path = .FullName Then Application.RecentFiles(Ndx).Delete Exit For End If Next Ndx .ChangeFileAccess Mode:=xlReadOnly Kill .FullName .Close SaveChanges:úlse End With End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~"
Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
End Sub
Module:
Sub Suicide()
Dim FName As String
Dim Ndx As Integer
With ThisWorkbook
.Save
For Ndx = 1 To Application.RecentFiles.Count
If Application.RecentFiles(Ndx).Path = .FullName Then
Application.RecentFiles(Ndx).Delete
Exit For
End If
Next Ndx
.ChangeFileAccess Mode:=xlReadOnly
Kill .FullName
.Close SaveChanges:=False
End With
End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String) Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~" Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute End Sub
Module:
Sub Suicide() Dim FName As String Dim Ndx As Integer With ThisWorkbook .Save For Ndx = 1 To Application.RecentFiles.Count If Application.RecentFiles(Ndx).Path = .FullName Then Application.RecentFiles(Ndx).Delete Exit For End If Next Ndx .ChangeFileAccess Mode:=xlReadOnly Kill .FullName .Close SaveChanges:úlse End With End Sub
| Pourquoi le fait que le classeur s'enregistre automatiquement à la fermeture pose problème ?
*** En fait, le seul désavantage que cela amène c'est que l'usager n'a plus la possibilité de fermer le classeur sans faire la sauvegarde des modifications qu'il a apportées s'il le désire s'il constate qu'il a fait une erreur importante durant son travail. Au-delà de cela, il n'y aucun autre souci dont l'usager doit se préoccuper!
Malheureusement, on ne peut pas enlever l'enregistrement automatique à la fermeture, car il pourrait ouvrir alors le fichier sans être obligé d'activer les macros.
| Pourquoi le fait que le classeur s'enregistre automatiquement
à la fermeture pose problème ?
*** En fait, le seul désavantage que cela amène c'est que l'usager n'a
plus la possibilité de fermer le classeur sans faire la sauvegarde des
modifications qu'il a apportées s'il le désire s'il constate qu'il a fait
une erreur importante durant son travail. Au-delà de cela, il n'y aucun
autre souci dont l'usager doit se préoccuper!
Malheureusement, on ne peut pas enlever l'enregistrement automatique
à la fermeture, car il pourrait ouvrir alors le fichier sans être obligé
d'activer
les macros.
| Pourquoi le fait que le classeur s'enregistre automatiquement à la fermeture pose problème ?
*** En fait, le seul désavantage que cela amène c'est que l'usager n'a plus la possibilité de fermer le classeur sans faire la sauvegarde des modifications qu'il a apportées s'il le désire s'il constate qu'il a fait une erreur importante durant son travail. Au-delà de cela, il n'y aucun autre souci dont l'usager doit se préoccuper!
Malheureusement, on ne peut pas enlever l'enregistrement automatique à la fermeture, car il pourrait ouvrir alors le fichier sans être obligé d'activer les macros.
jenesaispaspourquoi
Le mercredi 15 Octobre 2014 Ã 21:37 par jenesaispaspourquoi :
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String) Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~" Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute End Sub
Module:
Sub Suicide() Dim FName As String Dim Ndx As Integer With ThisWorkbook .Save For Ndx = 1 To Application.RecentFiles.Count If Application.RecentFiles(Ndx).Path = .FullName Then Application.RecentFiles(Ndx).Delete Exit For End If Next Ndx .ChangeFileAccess Mode:=xlReadOnly Kill .FullName .Close SaveChanges:úlse End With End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~"
Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
End Sub
Module:
Sub Suicide()
Dim FName As String
Dim Ndx As Integer
With ThisWorkbook
.Save
For Ndx = 1 To Application.RecentFiles.Count
If Application.RecentFiles(Ndx).Path = .FullName Then
Application.RecentFiles(Ndx).Delete
Exit For
End If
Next Ndx
.ChangeFileAccess Mode:=xlReadOnly
Kill .FullName
.Close SaveChanges:=False
End With
End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String) Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~" Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute End Sub
Module:
Sub Suicide() Dim FName As String Dim Ndx As Integer With ThisWorkbook .Save For Ndx = 1 To Application.RecentFiles.Count If Application.RecentFiles(Ndx).Path = .FullName Then Application.RecentFiles(Ndx).Delete Exit For End If Next Ndx .ChangeFileAccess Mode:=xlReadOnly Kill .FullName .Close SaveChanges:úlse End With End Sub