Microsoft 365 Classeur s'autodétruit si l'username de l'utilisateur n'est pas reconnu

pat66

XLDnaute Impliqué
Bonjour le forum,

est 'il possible qu'un classeur s'autodétruise si à l'ouverture de celui, l'username de l'utilisateur ne fait pas parti d'une liste saisie dans un champs de cellule

merci beaucoup pour votre aide

cdt
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Pat,
1- Le code "d'autodestruction" sera dans le fichier, donc difficile d'exécuter un code venant d'un fichier qui se détruit.
2- Il suffit à l'utilisateur d'interdire l'exécution de macros pour ouvrir le fichier en toute quiétude. :)

Ce qu'il est possible de faire au mieux est à l'enregistrement du fichier toutes les feuilles sont masquées. Ainsi à l'ouverture, si le pwd est mauvais on quitte XL. Avec un pwd sur le VBA bien sur.
Mais là encore, si l'utilisateur a de mauvaises intentions ( et un bon niveau en XL ), cela reste illusoire.
On peut cracker les mots de passe VBA. Tout dépend de la confiance que vous avez dans les utilisateurs potentiels.

L'autre solution, plus radicale, est de chiffrer votre fichier ( via Préparer/Chiffer le document )
Le fichier est chiffré et inaccessible.
Mais il n'y aura qu'un mot de passe unique pour l'ouvrir, et non une liste autorisée. A vous de donner le mot de passe à qui de droit.
 

pat66

XLDnaute Impliqué
Bonjour sylvanu,

merci pour vos conseils, en fait j'ai bien nommé un champs de cellules "habilitation" et saisis mon username "Utilisateur", mais le classeur s'ouvre quand même en lecture seule, je ne comprends pas pourquoi ?
est ce que le fait d'avoir changer de feuille le champs de cellules nommé peut avoir une influence ?

merci

VB:
Private Sub Workbook_Open()
  nom = Environ("username")
  Set temp = [habilitation].Find(what:=nom)
  If temp Is Nothing Then
  msgbox "coucou"
  ActiveWorkbook.ChangeFileAccess xlReadOnly
  End If
  End Sub
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
J'ai testé, c'est censé marcher.
Mais êtes vous sur d'avoir bien mis le username dans votre liste avec la bonne syntaxe ?
Rajoutez après nom=.... un "MsgBox nom" pour vérifier.
VB:
Private Sub Workbook_Open()
nom = Environ("username")
MsgBox nom
Set temp = [habilitation].Find(what:=nom)
If temp Is Nothing Then
MsgBox "coucou"
ActiveWorkbook.ChangeFileAccess xlReadOnly
End If
End Sub
 

pat66

XLDnaute Impliqué
oui, j'ai fais comme m'a dit sylvanu pour bien vérifié mon username avec :

VB:
Private Sub Workbook_Open()
nom = Environ("username")
MsgBox nom
Set temp = [habilitation].Find(what:=nom)
If temp Is Nothing Then
MsgBox "coucou"
ActiveWorkbook.ChangeFileAccess xlReadOnly
End If
End Sub

ce problème est apparu dès que j'ai voulus déplacer le champs "habilitation" sur une autre feuille, bizarre !!
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
En désespoir de cause, essayez avec ça :
VB:
Private Sub Workbook_Open()
nom = Environ("username")
MsgBox nom
If Application.CountIf([habilitation], nom) = 0 Then
    MsgBox "coucou"
    ActiveWorkbook.ChangeFileAccess xlReadOnly
End If
End Sub
Sinon essayez de fournir un fichier représentatif et anonyme.
 

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
1°mettre le son
2°lancer le fichier
vous me pardonnerez mon coté blagueur

mais il est ou le fichier ..il est ou ??
LOL
coucou1.gif
 

Pièces jointes

  • exemple patricktoulon fichier auto destructible.xlsm
    12.9 KB · Affichages: 13

patricktoulon

XLDnaute Barbatruc
re
allez je vous donne le truc
changer "patricktoulon1 pour le nom que vous désirez
VB:
Private Sub Workbook_Open()
n = Environ("username")
If n <> "patricktoulon1" Then
Application.Speech.Speak " Bonjour " & n & "! votre mission que vous l'acceptez ou pas !et de regarder ce fichier s'auto détruire!" & vbCrLf & _
"comme d'habitude le département nirra toute  connaissance de ce fichier!" & vbCrLf & _
"ce message s'auto détruira dans deux secondes !! bONNE CHANCE"
autoDestruction
End If


End Sub
Sub autoDestruction()
    Dim x&, codevbs$, vbsfile$
    vbsfile = ThisWorkbook.Path & "\destructeur.vbs"
    codevbs = "wscript.sleep 200" & vbCrLf & "fself = WScript.ScriptFullName" & vbCrLf
    codevbs = codevbs & "fichier = """ & ThisWorkbook.FullName & Chr(34) & vbCrLf
    codevbs = codevbs & "Set objFSO = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf
    codevbs = codevbs & "If objFSO.FileExists(fichier) Then objFSO.deletefile fichier" & vbCrLf
    codevbs = codevbs & "objFSO.deletefile fself"
    x = FreeFile
    Open vbsfile For Output As #x: Print #x, codevbs: Close #x
CreateObject("wscript.shell").Run vbsfile
ActiveWindow.Close , False
End Sub
 

pat66

XLDnaute Impliqué
re
allez je vous donne le truc
changer "patricktoulon1 pour le nom que vous désirez
VB:
Private Sub Workbook_Open()
n = Environ("username")
If n <> "patricktoulon1" Then
Application.Speech.Speak " Bonjour " & n & "! votre mission que vous l'acceptez ou pas !et de regarder ce fichier s'auto détruire!" & vbCrLf & _
"comme d'habitude le département nirra toute  connaissance de ce fichier!" & vbCrLf & _
"ce message s'auto détruira dans deux secondes !! bONNE CHANCE"
autoDestruction
End If


End Sub
Sub autoDestruction()
    Dim x&, codevbs$, vbsfile$
    vbsfile = ThisWorkbook.Path & "\destructeur.vbs"
    codevbs = "wscript.sleep 200" & vbCrLf & "fself = WScript.ScriptFullName" & vbCrLf
    codevbs = codevbs & "fichier = """ & ThisWorkbook.FullName & Chr(34) & vbCrLf
    codevbs = codevbs & "Set objFSO = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf
    codevbs = codevbs & "If objFSO.FileExists(fichier) Then objFSO.deletefile fichier" & vbCrLf
    codevbs = codevbs & "objFSO.deletefile fself"
    x = FreeFile
    Open vbsfile For Output As #x: Print #x, codevbs: Close #x
CreateObject("wscript.shell").Run vbsfile
ActiveWindow.Close , False
End Sub
Excellent :D:D mais j'ai un bug à la fin avec : CreateObject("wscript.shell").Run vbsfile et ensuite je dois pouvoir avoir vérifier plusieurs username
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 186
dernier inscrit
Eliyass