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.

10 réponses

1 2 3 4
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.


Bonsoir MichD,

Merci pour votre retour, mais à moins que je sois vraiment mauvais il me semble que le fichier est ... vide !!!
Auriez-vous un autre lien ?

Merci pour votre intérêt.
Avatar
MichD
http://cjoint.com/?DJqvjibqwCz
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,

Ce fichier est beaucoup plus explicite en revanche il y a quelque chose que je ne comprends pas à savoir:

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 ?

Merci pour vos réponses
Avatar
MichD
============================ 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".
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.


Bonsoir MichD, le forum,

Merci pour vos précisions et votre aide.
Pourriez-vous me dire si il est possible que la macro ait le même comportement si une ou plusieurs feuilles sont déprotégées ?
Si oui, pourriez-vous me dire qu'elles sont les lignes de code à changer ou à rajouter au code existant (mon but est que la macro suicide se déclenche lorsque une ou plusieurs feuilles et/ou le projet VB est/ sont déprotégées).

Merci pour votre partage de savoir.
Cordialement
Avatar
MichD
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!
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.


Bonsoir MichD,

C'est GENIALISSIME. Votre fichier correspond précisément en partie à ce que je veux faire.
Une dernière question: Pourquoi le fait que le classeur s'enregistre automatiquement à la fermeture pose problème ?
Si réel problème, quelle est la manœuvre à effectuer pour enlever cet enregistrement auto ?
Merci pour votre réponse.
Un très grand MERCI à vous pour votre aide

Cordialement
Avatar
MichD
| 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.
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.


Bonjour MichD, le forum,

Merci pour votre retour.
J'ai néanmoins une requête à vous formuler.
Si vous le voulez bien, et si cela est possible, y aurait-il un moyen, avec les mêmes procédures et macros (en rajoutant du code je présume), de faire en sorte que le mot de passe du projet VB à rentrer soit identique au mot de passe initialement rentré si une déprotection venait à se produire (malheureusement testé et réussi), sinon et si tel n'était pas le cas...destruction du fichier.
Ceci pour clôturer cette partie de protection.

Encore Merci pour votre aide
Cordialement
Avatar
MichD
| que le mot de passe du projet VB à rentrer soit identique au mot de passe
| initialement rentré si une déprotection venait à se produire

Désolé, mais je ne comprends pas ce que tu veux!
Explique-moi ce que tu cherches à faire!
1 2 3 4