OVH Cloud OVH Cloud

Macro inopérante

33 réponses
Avatar
jenesaispaspourquoi
Bonjour à toutes et tous,

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.

3 réponses

1 2 3 4
Avatar
MichD
Bonjour,

Peux-tu infirmer ou confirmer si l'ouverture des dernières versions d'Excel
à partir de 2007 est aussi facile à déprotéger les projetVBA que l'étaient
les versions précédentes?

Pour ce qui est de l'astuce, je ne peux pas la publier par respect aux
"vrais" développeurs qui ont peu d'avenues de protéger leurs droits d'auteur
et leur gagne-pain. Cela fait au moins 15 ans que je participe à différents
forums et je n'ai vu qu'une fois où l'auteur du message y a fait une légère
allusion sans donner le code...

Le mieux que je peux t'offrir, tu envoies ton FICHIER FINAL avec le mot de
passe avec lequel tu veux protéger le projetVBA. J'organiserai moi-même la
touche finale de ton fichier quant à la protection. Évidemment, tu conserves
une version non protégée si un jour tu veux apporter des modifications. Je
ne ferai ça qu'UNE fois. Assure-toi que ton fichier est "parfait" avant de
me l'envoyer.

Utilise cette adresse : "MichDenis" et le @ pour finir par
Hotmail.com. Inscris dans l'objet de Message mon pseudonyme sinon ton
message ne me sera pas accessible!

Si ton fichier contient des informations personnelles, tu devras te
contenter des explications déjà données.
Avatar
MichD
Bonjour Jacquoille,

Tu utilises encore le "Pot" à ton âge? ;-))
Avatar
jenesaispaspourquoi
Le mercredi 15 Octobre 2014 à 21:37 par jenesaispaspourquoi :
Bonjour à toutes et tous,

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:%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

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.


MichD,

La déprotection jusqu'à 2007 inclus ne pose aucune problème (feuilles et projet VBA). Ensuite je ne sais pas car je tourne sous 2007.
Dommage pour l'astuce, je comprends qu'il soit évité qu'elle soit diffusée aux quatre vents.
Quoiqu'il en soit, on sent vraiment "la patte du professionnel" qui sait de quoi il parle.

Merci encore pour tout.
Cordialement
1 2 3 4