Tout effacer si déprotection projet VBA

GUY rrr

XLDnaute Occasionnel
Bonjour le forum,

Je souhaite savoir si il est possible de faire une macro qui vérifie que le projet VBA soit bien protégé et si non, qui efface toute les données du fichier en prenant soin d'enregistrer dans la foulée.

Merci aux personnes qui voudront bien se pencher sur ma demande.
 
Dernière édition:

GUY rrr

XLDnaute Occasionnel
Bonsoir dysorthographie, Patrice33740, le forum,

Je me permets de faire remonter cette discussion (que j'avais mis en statut résolu), car à l'épreuve, je me suis rendu compte que si je déprotège et efface dans la foulée la macro située dans ThisWorkbook, et en restant dans le VBA, il ne se passe rien au niveau des feuilles. Vous allez me dire que c'est normal car il n'y a plus de macro :cool:. Du coup, ma question est la suivante:
Est-il possible d'avoir la même action que précédemment à la seconde ou la déprotection est active (sans forcément retourner sur le tableur) ?

Je joins mon classeur test (mdp:GUY)

Merci pour votre retour
 

Pièces jointes

  • Test déprotection projet3.xlsm
    17.8 KB · Affichages: 5

dysorthographie

XLDnaute Accro
Bonsoir,
Je t'invites à demander aux internautes de ce forum te tester ton fichier en l'état sans activer le centre de gestion de la confidentialité {poste#10}!

Cette option doit être activé sur la machine qui exécute la macro pour que ça fonctionne.

Cette option n'est jamais activé par défaut et le SI de quasiment toutes les entreprise l'interdisent!

Nous connaissons le mot de passe il sera facile de vérifier !
 

job75

XLDnaute Barbatruc
Bonjour,

Voyez le fichier joint et cette macro dans Module1 :
VB:
Sub Test()
Static t 'mémorise la variable
Dim i%
Application.DisplayAlerts = False
With ThisWorkbook
    If .VBProject.Protection = 0 Then
        For i = .Sheets.Count To 2 Step -1
            .Sheets(i).Delete
        Next
        .Sheets(1).Cells.Delete
    End If
End With
On Error Resume Next
Application.OnTime t, "Test", , False 'sécurité
t = Now + 1 / 86400
Application.OnTime t, "Test" 'relance le processus
End Sub
Et dans ThisWorkbook, pour lancer le processus :
VB:
Private Sub Workbook_Open()
Test
End Sub
Bien sûr comme cela a été déjà dit il faut avoir coché l'option :

- sur Excel 2003 et versions antérieures Faire confiance au projet Visual Basic (menu Outils-Macro-Sécurité-Editeurs approuvés)

- sur Excel 2007 et versions suivantes Accès approuvé au modèle d'objet du projet VBA (onglet Fichier-Options-Centre de gestion de la confidentialité-Paramètres...-Paramètres des macros).

A+
 

Pièces jointes

  • Protection VBA(1).xlsm
    19.3 KB · Affichages: 11

GUY rrr

XLDnaute Occasionnel
Bonsoir job75, dysorthographie, Patrice33740, le forum,

@dysorthographie, votre macro du post 14 fonctionne très bien,
- Sauf lorsque je lève la protection (sans retourner directement sur le tableur) et efface ensuite la macro située dans ThisWorkbook.

Après cette étape,

- Lorsque je retourne sur le tableur, les feuilles ne sont pas effacées ... :(

Malgré que l'option Accès approuvé au modèle d'objet du projet VBA soit cochée depuis le post 10.

@job75, votre macro effectue correctement le travail demandé :).

D'après ma compréhension, la macro tourne cycliquement et indéfiniment en boucle o_O.
2 questions se posent à moi:

- Le fait que cette macro tourne continuellement ne risque pas d'interférer avec le programme qui comporte d'autres macros et formules multiples ou de le ralentir ?

- Est-il possible, si pas d'autre solution, de ralentir le cycle de la macro afin de "laisser respirer" le programme ?

Merci pour vos retours et vos propositions ;)
 
Dernière édition:

dysorthographie

XLDnaute Accro
Bonsoir,
Bien sûr comme cela a été déjà dit il faut avoir coché l'option :

- sur Excel 2003 et versions antérieures Faire confiance au projet Visual Basic (menu Outils-Macro-Sécurité-Editeurs approuvés)

- sur Excel 2007 et versions suivantes Accès approuvé au modèle d'objet du projet VBA (onglet Fichier-Options-Centre de gestion de la confidentialité-Paramètres...-Paramètres des macros).
bien sur et c'est ce que je m'évertue à dire à GUY rrr!

personne n'a l'obligation d'activé cette option et personne ne peut obliger le détenteur de la machine à l'activer même par macros car c'est une directive qui relève de la sécurité de l'ordinateur!

avant de ce lancer dans une véritable cours à l'armement, soyons certain de l'efficacité
 

dysorthographie

XLDnaute Accro
Retour au début Post #2 :
le VBA ne s'exécute que si l'utilisateur l'autorise : Protection vs Sécurité !
Bonjour,
Oui c'est ce que je n'arrête pas de dire poste#10

Qui va activer cette option, déjà qui la connait, qui voudrait pirater le mot de passe et voir le fichier ce dileter comme dans mission impossible !

L'entreprise de notre ami est voué à l'échec dans la mesure ou les utilisateurs soit ignorent cette option soit ne veulent pas, et c'est mon cas, activer cette option !

Soit je suis incapable de faire sauter la sécurité et il n'y a pas de problème, soit je suis capable et faut pas me prendre pour un idiot !
 
Dernière édition:

job75

XLDnaute Barbatruc
Qui va activer cette option, déjà qui la connait
En ajoutant On Error Resume Next tout se passera comme si la protection n'existait pas :
VB:
Sub Test()
Static t 'mémorise la variable
Dim i%
Application.DisplayAlerts = False
On Error Resume Next 'si n'est pas cochée l'option "Accès approuvé au modèle d'objet du projet VBA"
With ThisWorkbook
    If .VBProject.Protection = 0 Then
        For i = .Sheets.Count To 2 Step -1
            .Sheets(i).Delete
        Next
        .Sheets(1).Cells.Delete
    End If
End With
On Error Resume Next
Application.OnTime t, "Test", , False 'sécurité
t = Now + 1 / 86400
Application.OnTime t, "Test" 'relance le processus
End Sub
Testez ce fichier (2) en décochant l'option "Accès approuvé au modèle d'objet du projet VBA".
 

Pièces jointes

  • Protection VBA(2).xlsm
    19.5 KB · Affichages: 13

GUY rrr

XLDnaute Occasionnel
Bonsoir job75, dysorthographie, Patrice33740, le forum,


personne n'a l'obligation d'activé cette option et personne ne peut obliger le détenteur de la machine à l'activer

le VBA ne s'exécute que si l'utilisateur l'autorise : Protection vs Sécurité !

Qui va activer cette option,

J'activerai cette option lorsque j'aurai installé le fichier sur l'appareil ...

déjà qui la connait,

Au moins moi, grâce à vous ;)...

L'entreprise de notre ami est voué à l'échec dans la mesure ou les utilisateurs soit ignorent cette option soit ne veulent pas, et c'est mon cas, activer cette option !
Sauf erreur de ma part, job75 pare à cette éventualité ...
En ajoutant On Error Resume Next tout se passera comme si la protection n'existait pas :


Donc on supprime tous à l'ouverture car l'utilisateur ne le sait pas?

A priori, non, sauf si l'utilisateur (basique comme moi ...) commence à forcer pour ouvrir le pot de confiture

C'est absurde et heureusement que je n'aurais pas besoin de ce fichier !

...

Si tu ne connais pas VBA reste couché?
Ça part en vrille je quitte

Dommage, la discussion me semble intéressante :confused:

@job75,

Votre astuce me parait pertinente et appropriée.
Au risque de me répéter, le fait que cette macro tourne continuellement ne risque pas d'interférer avec le programme qui comporte d'autres macros et formules multiples ou de le ralentir ?


Merci pour votre réponse et un GRAND MERCI à tous les intervenants

Bonne soirée
 

job75

XLDnaute Barbatruc
Au risque de me répéter, le fait que cette macro tourne continuellement ne risque pas d'interférer avec le programme qui comporte d'autres macros et formules multiples ou de le ralentir ?
C'est vous qui avez le fichier et les macros...

Mais bien voir que ma macro ne prend qu'un millionième de seconde chaque seconde, c'est peanuts.

Et il y a bien d'autres programmes qui tournent en arrière-plan sur Excel.
 

Patrice33740

XLDnaute Impliqué
J'apprécie votre point de vue (ainsi que celui de beaucoup d'autres dans ce domaine) et le partage ... Cependant ma question était de savoir si il est possible de faire une macro qui vérifie que le projet VBA soit bien protégé et si non, qui efface toute les données du fichier en prenant soin d'enregistrer dans la foulée, ....
Il sera toujours possible :
1) d'interdire l'exécution des macro
2) de déprotéger le VBA (et donc sans que la macro s'exécute).
3) supprimer cette macro.
 

akil

XLDnaute Nouveau
Private Sub Workbook_Open()
Dim Feuille As Worksheet
Application.DisplayAlerts = False ' Désactiver les alertes
For Each Feuille In ThisWorkbook.Worksheets
If Feuille.Name <> ActiveSheet.Name Then
Feuille.Delete
End If
Next Feuille
Application.DisplayAlerts = True ' Réactiver les alertes
ActiveSheet.Cells.Delete Shift:=xlUp
ThisWorkbook.Save
End Sub

efface toutes les feuilles du classeur, sauf la feuille active
 

Discussions similaires

Réponses
2
Affichages
553
Réponses
26
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette