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
 

patricktoulon

XLDnaute Barbatruc
tiens un autre exemple pour toi @fanch55
je vais lancer 10 fois le même vbs qui luimême va afficher un msgbox (donc bloquant puisque modal)
et bien tu va voir que les 10 sont lancés sans attendre la fin de l'instance précédente
comme j'injecte un argument j'utiliserais ici le shell.automation
et oui !! on peut l'appeler avec arguments
VB:
Sub test()
    Dim x&, codevbs$, vbsfile$
    vbsfile = ThisWorkbook.Path & "\destructeur.vbs"
    codevbs = "fself = WScript.ScriptFullName" & vbCrLf
    'codevbs = codevbs & "msgbox wscript.arguments.Count" & vbCrLf
    codevbs = codevbs & "msgbox ""lancement N° "" & WScript.Arguments(0)" & vbCrLf
    codevbs = codevbs & "if WScript.Arguments(0) = 10 then" & vbCrLf
    codevbs = codevbs & "Set objFSO = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf
    codevbs = codevbs & "objFSO.deletefile fself" & vbCrLf
    codevbs = codevbs & "end if" & vbCrLf
    x = FreeFile
    Open vbsfile For Output As #x: Print #x, codevbs: Close #x
    For i = 1 To 10
        Set oWsh = CreateObject("Shell.Application")
        oWsh.ShellExecute vbsfile, i
    Next
End Sub
ça me ramène a pas mal d'années en arrière ça 🤣 🤣;)
 

TooFatBoy

XLDnaute Barbatruc
je vais lancer 10 fois le même vbs qui luimême va afficher un msgbox (donc bloquant puisque modal)
et bien tu va voir que les 10 sont lancés sans attendre la fin de l'instance précédente
C'est portnawak ma poule !
Comment pourrait-il en être autrement ???
Tu lances 10 instances, certes d'un même script, mais 10 instances donc autonomes et du coup comment pourraient-elles influer les unes sur les autres ?


Enfin j'dis ça mais j'y connais rien...
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour @TooFatBoy
c'est bien ce que je dis chaque instance n'a rien a voir avec l'autre
c'est ce que j'essaie d'expliquer a @fanch55 qui se demande pourquoi je peux supprimer le fichier vbs lui même dans son propre code
en fait on voit bien dans la gestion de tache que ce n'est pas les vbs qui sont en route mais seulement le wscript.exe qui exécute les commande du vbs
1710569909722.png
 

Efgé

XLDnaute Barbatruc
Bonjour à tous
Une autre approche de l'ami @Staple1600 :
https://excel-downloads.com/threads/macro-autodestruction.100505/post-571194
Et une de @Dranreb

Cordialement
 

fanch55

XLDnaute Barbatruc
c'est ce que j'essaie d'expliquer a @fanch55 qui se demande pourquoi je peux supprimer le fichier vbs lui même dans son propre code
OK, je sais qu'on n’exécute jamais un fichier source mais ce dernier chargé en mémoire .
Je pensai toutefois que le système mettait un flag indiquant que la source était en utilisation exclusive .
Le Vbscript ou le Vb sait faire mais pas le Vba .... C'est noté . 😶
 

dysorthographie

XLDnaute Accro
Bonjour,
Ce n'est pas une affaire de VB ou de VBA c'est le logiciel qui manipule le fichier qui verrouille le fichier en l'occurrence excel.

j'i vais de ma touche!
VB:
Sub AutoDestruction()
    Dim fso As Object
    Dim f As Object
    Dim cheminScript As String
    Dim scriptContent As String
    
    ' Chemin où le script VBScript sera enregistré
    cheminScript = ThisWorkbook.Path & "\SupprimerClasseur.vbs"
    
    ' Créer le contenu du script VBScript
    scriptContent = "fself = WScript.ScriptFullName" & vbCrLf & _
                    "Set objExcel = getobject(,""Excel.Application"")" & vbCrLf & _
                    "Set objWorkbook = objExcel.Workbooks(""" & ThisWorkbook.Name & """)" & vbCrLf & _
                    "objWorkbook.Close False" & vbCrLf & _
                    "Set objFSO = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf & _
                    "objFSO.DeleteFile """ & ThisWorkbook.FullName & """" & vbCrLf & _
                    "objExcel.Quit" & vbCrLf & _
                    "objFSO.deletefile fself"
    
    ' Écrire le contenu du script VBScript dans un fichier
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.CreateTextFile(cheminScript, True)
    f.Write scriptContent
    f.Close
    
    ' Exécuter le script VBScript
    Shell "wscript """ & cheminScript & """", vbNormalFocus
End Sub
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
167

Statistiques des forums

Discussions
315 096
Messages
2 116 174
Membres
112 677
dernier inscrit
Justine11