Pour ma part je vérifierais dans le gestionnaire de noms si tout est OKce problème est apparu dès que j'ai voulus déplacer le champs "habilitation" sur une autre feuille, bizarre !!
Private Sub Workbook_Open()
n = Environ("username")
x = Application.IfError(Application.Match(n, [listUser], 0), 0)
If x = 0 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
Bonjour le fil,re
le même avec une liste dans un tableau structuré
VB:Private Sub Workbook_Open() n = Environ("username") x = Application.IfError(Application.Match(n, [listUser], 0), 0) If x = 0 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
Private Sub Workbook_Open()
n = Environ("username")
x = Application.IfError(Application.Match(n, [listUser], 0), 0)
If x = 0 Then
Application.OnKey "{ESCAPE}", "a"
On Error Resume Next
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"
Err.Clear
autoDestruction
End If
End Sub
Sub autoDestruction()
Dim x&, codevbs$, vbsfile$
Application.OnKey "{ESCAPE}", ""
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
Private Sub Workbook_Open()
n = Environ("username")
x = Application.IfError(Application.Match(n, [listUser], 0), 0)
If x = 0 Then
Application.OnKey "{ESCAPE}", "a"
On Error Resume Next
msgbox "Bonjour" & vbcrlf & "ce fichier ne vous ai pas autorisé"
Err.Clear
autoDestruction
End If
End Sub
Sub autoDestruction()
Dim x&, codevbs$, vbsfile$
Application.OnKey "{ESCAPE}", ""
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
Sub AutoDestruction()
Dim FName As String: FName = """""" & ThisWorkbook.FullName & """"""
Dim TName As String: TName = Application.UserName & "_Kill_File"
Dim Command As String: Command = "Schtasks" & _
" /Create /F " & _
" /Tn " & TName & _
" /Sc Once" & _
" /St " & DateAdd("s", 20, Time) & _
" /Tr ""PowerShell Remove-Item -Force " & FName & """"
Debug.Print Command
CreateObject("WScript.Shell").Run Command
ThisWorkbook.Close False
End Sub
Si l'utilisateur est assez rapide pour ré-ouvrir le classeur, on ne pourra pas le détruire .Bonjour @fanch55
je n'ai pas testé mais mais je me demande si
même en ligne de commande on peut détruire un fichier ouvert puisque tu le close après le shell???
Private Sub Workbook_Open()
n = Environ("username")
x = Application.IfError(Application.Match(n, [listUser], 0), 0)
If x = 0 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 niera 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 FName As String
Dim Ndx As Integer
With ThisWorkbook
.Save
For Ndx = 1 To Application.RecentFiles.Count
If Application.RecentFiles(Ndx).Path = .Name Then
Application.RecentFiles(Ndx).Delete
Exit For
End If
Next Ndx
.ChangeFileAccess Mode:=xlReadOnly
Kill .FullName
.Close SaveChanges:=False
End With
End Sub
J'ai testé la version de @patricktoulon et la votre ,pour l'autodestruction, j'ai testé cette solution et çà a l'air de fonctionner
Votre code qui fonctionne correctement peut être réduit à celui-ci :Code:Sub autoDestruction() Dim FName As String Dim Ndx As Integer With ThisWorkbook .Save For Ndx = 1 To Application.RecentFiles.Count If Application.RecentFiles(Ndx).Path = .Name Then Application.RecentFiles(Ndx).Delete Exit For End If Next Ndx .ChangeFileAccess Mode:=xlReadOnly Kill .FullName .Close SaveChanges:=False End With End Sub
Sub autoDestruction()
Application.DisplayAlerts = False
With ThisWorkbook
.ChangeFileAccess Mode:=xlReadOnly
Kill .FullName
.Close SaveChanges:=False
End With
End Sub
reJ'ai testé la version de @patricktoulon et la votre ,
Tout fonctionne .
@patricktoulon : je suis bluffé qu'un script puisse détruire son contenant ....