Pousser un classeur au suicide ??

P

Philippe

Guest
Bonjour à tous,

je suis à la recherche d'une méthode permettant de demander à un classeur de s'auto-effacer, alors qu'il est encore ouvert bien entendu afin que la commande qu'il contient puisse s'executer.
En clair peut on pousser un classeur au suicide ???

Merci à ceux que ma demande inspirera (et aux autre qui liront ce post...=
 
L

léa

Guest
Bonjour Philippe,

Ouah ! Serais-tu adepte de l'euthanasie ... ?
Comme ta demande m'inspire mais ne trouvant pas de solution "radicale et propre" dans l'immédiat, je préfère me dérider quelques instants avant de me plonger dans les ténèbres excéliennes

A+ si je trouve le bout de code adéquat avant de l'utiliser à mon profit

Bon courage
Léa
 
J

jmps

Guest
Bonjour Philippe, léa, sousou,

J'ai aussi une idée qui m'a semblé fonctionner mais qui me paraît assez hasardeuse. C'est de faire un "save as" dans le chemin qui représente la corbeille ("C:\recycled") sur win98 de façon à ce qu'il ne se reconnaisse plus comme le classeur à tuer et de "killer" le fichier qui porte l'ancien nom. Ensuite on close sans sauvegarder.
Le seul truc c'est que mettre un truc dans la poubelle sans passer par windows résulte dans le fait que celle-ci reste apparement vide. Ce qui ne serait pas trop gênant en soi puisqu'on voulait le supprimer. Mais j'ai peur que ça mette la pagaille car si on refait la manip une deuxième fois, Excel dit que le fichier dans la corbeille existe déjà et demande si on veut le remplacer. Ca ne me paraît donc pas très catholique comme manip d'un point de vue système.

Dans le doute je vous le déconseille donc. Va falloir trouver autre chose les enfants... Mais quoi ?

A+

José
 
P

Papy Novice

Guest
Bonsoir Philippe, Léa, Soussou, et jmps,
Je suis 'tomb"' une fois sur ceci dans ce forum; après adaptation cva pourrait peut-être convenir ? Moi je ne sais pas faire mais quelqu'un ici devrait y parvenir.

Executer une macro à usage unique et s'effacera lors du premier enregistrement de fichier.

Voila une macro que j'ai faite pour effacer les macros se trouvants dans workbook_open

Dim Debut As Integer, Lignes As Integer
On Error GoTo Suite
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").codemodule
Debut = .ProcStartLine("Workbook_Open", 0)
Lignes = .ProcCountLines("Workbook_Open", 0)
.DeleteLines Debut, Lignes
End With

Rien ne se passe Pourquoi ? C'est l'évènement Workbook_BeforeSave que tu dois indiquer
 
J

jmps

Guest
Re le fil, Bonjour Papy Novice,

En fait ce que voudrait Philippe n'est pas d'effacer la macro dans le classeur mais de supprimer le fichier sur le disque. Mais comme il est ouvert par Excel il ne pourra pas se supprimer lui-même. Voilà du moins ce que j'ai compris.

Tiens ça me donne une idée ça.... Je vais y réfléchir ce soir.

A+

José
 
L

léa

Guest
Bonjour à tous,

Je fume ....... et crains abuser de ce code
Attention on a bien parlé d'euthanasie, de suicide, donc ce bout de code à insérer dans le fichier à supprimer, c'est du vitriol
Je l'ai essayé avant de perdre la raison, et oui il m'a donné satisfaction

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

Plus jamais cela Philippe

Allez grosses bises à tous
C'est un plaisir que de se triturer les méninges, surtout quand on trouve (certes avec l'aide de nombreuses recherches sur le Net)

Léa
 
P

philippe

Guest
Salut à tous et merci de vous être penchés sur mon problème.
Léa,
je commence à me débrouiller un peu en VBA mais j'avoue que là j'ai pas tout suivi, je vais étudier ton code pour le comprendre. (si tu avais la patience de le reposter avec qqes explications ce serait super cool de ta part (mais là je sens que j'abuse...)

En fait je suis peut être un peu tordu mais le but de la manoeuvre est de sauvegarder un classeur dont le nom est: nom & " " & prénom (ces 2 variables étant modifiables au sein d'une des feuilles du classeur) à la fermeture il y a une macro qui décèle un changement éventuel d'identité et je veux sauvegarder le classeur sous son nouveau nom (jusque là c'est simple) et supprimer celui avec l'ancien nom (c'est là qu'est le prob.)

Il y a peut être plus simple que de s'autodétruire mais je ne vois pas...

Un GROS merci à tous...
 
B

Bricofire

Guest
Ouah ! Merci léa

De nous laisser l'esprit en paix pour ce week-end, j'étais parti sur des choses incroyablement plus lourdes et pas sur d'aboutir... :)

C'est aussi satisfaisant à savourer qu'à regarder "le super CV", des ondes positives pour un week-end pluvieux annoncé sur ma région... D'ailleurs coder sous la pluie (les portables étanches existent) pourrait-être un moyen d'éviter la fumée...

:)

Bfr
 
L

léa

Guest
mais là je sens que j'abuse...)
Mais non, mais non, je l'ai dit prédemment :
C'est un plaisir que de se triturer les méninges, surtout quand on trouve
et surtout de partager ce que l'on a trouvé, donc :

Dim FName As String
Dim Ndx As Integer
With ThisWorkbook
.Save ' ici c'est simple, tu sauvegardes le fichier
For Ndx = 1 To Application.RecentFiles.Count ' tu fais une boucle de 1 à n nétant le nombre de fichiers récemment sauvegardés
If Application.RecentFiles(Ndx).Path = .FullName Then ' si le chemin d'accès au fichier nouvellement sauvegardé n° Ndx = le nom du fichier que tu utilises actuellement et que tu veux suicider
Application.RecentFiles(Ndx).Delete ' alors tu détruis le nouveau fichier enregistré qui est bien sur celui que tu veux suicider
Exit For ' tu arrêtes la boucle
End If ' sinon
Next Ndx ' tu passes au fichier nouvellement enregistré
.ChangeFileAccess Mode:=xlReadOnly 'tu passes en mode lecture seule sur ton fichier (et c'est là que je butais, j'ai donc trouver cette astuce sur le Net)
Kill .FullName 'tu détruis le fichier en cours
.Close SaveChanges:=False ' et tu quittes tout sans sauvegarde
End With

Finallement je n'ai pas grand mérite car si j'avais l'idée, le maillon essentiel me manquait

Léa
 
L

léa

Guest
C'est encore moi,

Je suis en train de me demander si je ne peux pas sauter toute cette partie de la routine

.Save ' ici c'est simple, tu sauvegardes le fichier
For Ndx = 1 To Application.RecentFiles.Count ' tu fais une boucle de 1 à n nétant le nombre de fichiers récemment sauvegardés
If Application.RecentFiles(Ndx).Path = .FullName Then ' si le chemin d'accès au fichier nouvellement sauvegardé n° Ndx = le nom du fichier que tu utilises actuellement et que tu veux suicider
Application.RecentFiles(Ndx).Delete ' alors tu détruis le nouveau fichier enregistré qui est bien sur celui que tu veux suicider
Exit For ' tu arrêtes la boucle
End If ' sinon
Next Ndx ' tu passes au fichier nouvellement enregistré

car au départ je le sauvegardais, me disant qu'il ne pouvait pas s'autodétruire par l'action d'ue macro lui appartenant
Mais avec l'astuce que j'ai trouvée je me demande si c'est encore nécessaire de le sauvegarder momentanément

Si l'un d'entre vous peut se pencher sur cette question

A+
Léa
 
P

Papy Novice

Guest
Bonsoir à vous tous,
Une question me vient : Peut-on récupérer le fichier ?
Si oui, il serait peut-être judicieux, avant de procéder à l'euthanasie de cet être inoffensif d'y insérer une feuille vierge, supprimer tous les petits qui accompagne cet être et de procéder à l'enregistrement du dit être. Ceci aurait pour effet de "récupérer" une feuille toute blanche permettant d'y exposer sa rancoeur. Non ?
Bon Week-end à chacun et Léa : surtout NE FAIS PAS CA.
Amicalement.
Jean
 
J

jmps

Guest
Re tous,

Bravo léa !
Je ne connaissais pas le .ChangeFileAccess Ceci-dit il y a tant de choses que je ne connais pas ;°). Effectivement ça règle le problème du fichier ouvert.
J'étais parti sur une idée un peu plus compliquée. A savoir de créer un nouveau classeur, de générer la macro tueuse dans celui-ci, de lui passer la main et de fermer le candidat au suicide pour que le nouveau classeur l'éxécute puis se ferme lui même sans s'enregistrer.
J'ai pas du tout pensé à l'anesthésie générale par une piqûre de ChangeFileAccess. Et pour cause, je ne savais pas que ce médicament existait.

Encore bravo et merci léa "The Killer". Lol !

Bon week-end à tous.

José
 
T

Ti

Guest
en fait, Léa, en reprenant ta base, on peut faire encore plus simple :


Sub Euthanasie()
Application.DisplayAlerts = False
With ThisWorkbook
.ChangeFileAccess xlReadOnly
Kill .FullName
Application.DisplayAlerts = True
.Close False
End With
End Sub

Macro à usage unique !
 

Discussions similaires

Statistiques des forums

Discussions
312 092
Messages
2 085 218
Membres
102 826
dernier inscrit
ag amestan