Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

auto destruction

14 réponses
Avatar
Jacquouille
Bonjour
Après avoir étudié les macros qui se mettent en marche dès l'ouverture du
document, je me pose des questions sur l'inverse.
En Formule 1, on a dit que "ils" avaient programmé leurs mode
d'anti-patinage pour que le logiciel ne garde plus de traces de
programmation dès le départ effectué.
Suite à cela, je me pose la question de savoir comment on peut bricoler une
macro pour qu'elle s'auto-détruise dès que son boulot est terminé (ou
presque, puisque elle doit s'auto-détruire).
Ne me dites pas qu'elle tél à JPS et qu'il envoie un scud sur mon PC, je ne
vous croirai pas ...-)
Un grand merci et bonne fin de fête des Cloches.
--
Jacquouille conseille : http://www.excelabo.net

NoSpam_j.thiernesse@skynet.be

10 réponses

1 2
Avatar
FxM
Bonjour Jacquouille,

As-tu jeté un coup d'oeil sur le site que tu recommandes ?
http://www.excelabo.net/xl/macros.php
Rubriques :
Enregistrer sans les macros
Macro à usage unique
Supprimer une macro par macro

@+
FxM qui espère que tu ne parles pas d'Excel5 :o)





Jacquouille wrote:

Bonjour
Après avoir étudié les macros qui se mettent en marche dès l'ouverture du
document, je me pose des questions sur l'inverse.
En Formule 1, on a dit que "ils" avaient programmé leurs mode
d'anti-patinage pour que le logiciel ne garde plus de traces de
programmation dès le départ effectué.
Suite à cela, je me pose la question de savoir comment on peut bricoler une
macro pour qu'elle s'auto-détruise dès que son boulot est terminé (ou
presque, puisque elle doit s'auto-détruire).
Ne me dites pas qu'elle tél à JPS et qu'il envoie un scud sur mon PC, je ne
vous croirai pas ...-)
Un grand merci et bonne fin de fête des Cloches.
--
Jacquouille conseille : http://www.excelabo.net






Avatar
michdenis
Bonjour Jacquouille,

Feuil1 représente le nom du module et nom de l'onglet de la feuille


'----------------------
Sub EffacerLaMacro()

ExécutionUneFois1 "Feuil1", "LeNomDeLaProcédureàEffacer"

End Sub
'----------------------


à placer dans un module standard.
'-----------------------
Sub ExécutionUneFois(NomModule As String, NomProcedure As String)
Dim A As Integer, B As Integer

With ThisWorkbook.VBProject.VBComponents(NomModule)
With .CodeModule
A = .ProcStartLine(NomProc, 0)
B = .ProcCountLines(NomProc, 0)
.DeleteLines A, B
End With
End With

End Sub
'-----------------------


Salutations!







"Jacquouille" a écrit dans le message de news:
Bonjour
Après avoir étudié les macros qui se mettent en marche dès l'ouverture du
document, je me pose des questions sur l'inverse.
En Formule 1, on a dit que "ils" avaient programmé leurs mode
d'anti-patinage pour que le logiciel ne garde plus de traces de
programmation dès le départ effectué.
Suite à cela, je me pose la question de savoir comment on peut bricoler une
macro pour qu'elle s'auto-détruise dès que son boulot est terminé (ou
presque, puisque elle doit s'auto-détruire).
Ne me dites pas qu'elle tél à JPS et qu'il envoie un scud sur mon PC, je ne
vous croirai pas ...-)
Un grand merci et bonne fin de fête des Cloches.
--
Jacquouille conseille : http://www.excelabo.net


Avatar
Jacquouille
Bonjour
Merci pour vos infos.
Avant de demander, j'ai réfléchi (un peu) et j'ai consulté Mon site de
référence, mais j'en arrive toujours à la même conclusion.
Si on fait une macro pour détruire la première, reste l'autre.
Puis on fait une troisième pour détruire la deuxième....
et on arrive 15 jours plus tard, au Grand Prix suivant avec la 2000ème macro
qui efface la 1999ème ????
Je vous remercie cependant tous deux de vous être penchés sur un problème
existentiel (???-)) )

--
Jacquouille conseille : http://www.excelabo.net


"michdenis" a écrit dans le message news:

Bonjour Jacquouille,

Feuil1 représente le nom du module et nom de l'onglet de la feuille


'----------------------
Sub EffacerLaMacro()

ExécutionUneFois1 "Feuil1", "LeNomDeLaProcédureàEffacer"

End Sub
'----------------------


à placer dans un module standard.
'-----------------------
Sub ExécutionUneFois(NomModule As String, NomProcedure As String)
Dim A As Integer, B As Integer

With ThisWorkbook.VBProject.VBComponents(NomModule)
With .CodeModule
A = .ProcStartLine(NomProc, 0)
B = .ProcCountLines(NomProc, 0)
.DeleteLines A, B
End With
End With

End Sub
'-----------------------


Salutations!







"Jacquouille" a écrit dans le message de
news:

Bonjour
Après avoir étudié les macros qui se mettent en marche dès l'ouverture du
document, je me pose des questions sur l'inverse.
En Formule 1, on a dit que "ils" avaient programmé leurs mode
d'anti-patinage pour que le logiciel ne garde plus de traces de
programmation dès le départ effectué.
Suite à cela, je me pose la question de savoir comment on peut bricoler
une

macro pour qu'elle s'auto-détruise dès que son boulot est terminé (ou
presque, puisque elle doit s'auto-détruire).
Ne me dites pas qu'elle tél à JPS et qu'il envoie un scud sur mon PC, je
ne

vous croirai pas ...-)
Un grand merci et bonne fin de fête des Cloches.
--
Jacquouille conseille : http://www.excelabo.net







Avatar
garnote
Salut Jacquouille,

Peut-être que :

Sub Macro_Éphémère()
Dim A As Integer, B As Integer
'La macro à exécuter :
MsgBox "Adieu veaux, vaches, cochons, couvées."
'Annihile tout :
With ThisWorkbook.VBProject.VBComponents("Module1")
With .CodeModule
A = .ProcStartLine("Macro_Éphémère", 0)
B = .ProcCountLines("Macro_Éphémère", 0)
.DeleteLines A, B
End With
End With
End Sub

Serge

"Jacquouille" a écrit dans le message de
news:
Bonjour
Merci pour vos infos.
Avant de demander, j'ai réfléchi (un peu) et j'ai consulté Mon site de
référence, mais j'en arrive toujours à la même conclusion.
Si on fait une macro pour détruire la première, reste l'autre.
Puis on fait une troisième pour détruire la deuxième....
et on arrive 15 jours plus tard, au Grand Prix suivant avec la 2000ème
macro

qui efface la 1999ème ????
Je vous remercie cependant tous deux de vous être penchés sur un problème
existentiel (???-)) )

--
Jacquouille conseille : http://www.excelabo.net


"michdenis" a écrit dans le message news:

Bonjour Jacquouille,

Feuil1 représente le nom du module et nom de l'onglet de la feuille


'----------------------
Sub EffacerLaMacro()

ExécutionUneFois1 "Feuil1", "LeNomDeLaProcédureàEffacer"

End Sub
'----------------------


à placer dans un module standard.
'-----------------------
Sub ExécutionUneFois(NomModule As String, NomProcedure As String)
Dim A As Integer, B As Integer

With ThisWorkbook.VBProject.VBComponents(NomModule)
With .CodeModule
A = .ProcStartLine(NomProc, 0)
B = .ProcCountLines(NomProc, 0)
.DeleteLines A, B
End With
End With

End Sub
'-----------------------


Salutations!







"Jacquouille" a écrit dans le message de
news:

Bonjour
Après avoir étudié les macros qui se mettent en marche dès l'ouverture
du


document, je me pose des questions sur l'inverse.
En Formule 1, on a dit que "ils" avaient programmé leurs mode
d'anti-patinage pour que le logiciel ne garde plus de traces de
programmation dès le départ effectué.
Suite à cela, je me pose la question de savoir comment on peut bricoler
une

macro pour qu'elle s'auto-détruise dès que son boulot est terminé (ou
presque, puisque elle doit s'auto-détruire).
Ne me dites pas qu'elle tél à JPS et qu'il envoie un scud sur mon PC, je
ne

vous croirai pas ...-)
Un grand merci et bonne fin de fête des Cloches.
--
Jacquouille conseille : http://www.excelabo.net











Avatar
FxM
Meuh non, Jacques :o)

J'avais aussi la même réaction que toi au début. Si tu mets ta macro
auto-destructrice dans le ThisWorkbook et que tu lui demandes de
détruire ThisWorkbook, ne me demande pas pourquoi mais elle le fait.

Le seul détail que j'ai eu l'occasion de rencontrer est un vrai faux
message d'alerte macro alors qu'il n'y a ni macro, ni module vide et ce
message n'apparait qu'à la première ouverture.

Un exemple tiré d'un développement précédent :
Un clic sur une image crée un tarif personnalisé pour un client et
enlève les macros du fichier. Toutes les macros sont dans ThisWorkbook.
Le clic lance transfert_4.

Sub transfert_4()
'plein d'actions diverses et variées telles que sauvegarde du
'fichier original puis ...

Application.Calculation = xlCalculationAutomatic
On Error Resume Next
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.deleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
End Sub

et zou, a pu macro. Je peux t'envoyer l'exemple original si tu le
demandes gentiment :o) (900 ko zippé -> 202 ko)

@+
FxM





Jacquouille wrote:
Bonjour
Merci pour vos infos.
Avant de demander, j'ai réfléchi (un peu) et j'ai consulté Mon site de
référence, mais j'en arrive toujours à la même conclusion.
Si on fait une macro pour détruire la première, reste l'autre.
Puis on fait une troisième pour détruire la deuxième....
et on arrive 15 jours plus tard, au Grand Prix suivant avec la 2000ème macro
qui efface la 1999ème ????
Je vous remercie cependant tous deux de vous être penchés sur un problème
existentiel (???-)) )

--
Jacquouille conseille : http://www.excelabo.net


"michdenis" a écrit dans le message news:


Bonjour Jacquouille,

Feuil1 représente le nom du module et nom de l'onglet de la feuille


'----------------------
Sub EffacerLaMacro()

ExécutionUneFois1 "Feuil1", "LeNomDeLaProcédureàEffacer"

End Sub
'----------------------


à placer dans un module standard.
'-----------------------
Sub ExécutionUneFois(NomModule As String, NomProcedure As String)
Dim A As Integer, B As Integer

With ThisWorkbook.VBProject.VBComponents(NomModule)
With .CodeModule
A = .ProcStartLine(NomProc, 0)
B = .ProcCountLines(NomProc, 0)
.DeleteLines A, B
End With
End With

End Sub
'-----------------------


Salutations!







"Jacquouille" a écrit dans le message de


news:

Bonjour
Après avoir étudié les macros qui se mettent en marche dès l'ouverture du
document, je me pose des questions sur l'inverse.
En Formule 1, on a dit que "ils" avaient programmé leurs mode
d'anti-patinage pour que le logiciel ne garde plus de traces de
programmation dès le départ effectué.
Suite à cela, je me pose la question de savoir comment on peut bricoler


une

macro pour qu'elle s'auto-détruise dès que son boulot est terminé (ou
presque, puisque elle doit s'auto-détruire).
Ne me dites pas qu'elle tél à JPS et qu'il envoie un scud sur mon PC, je


ne

vous croirai pas ...-)
Un grand merci et bonne fin de fête des Cloches.
--
Jacquouille conseille : http://www.excelabo.net












Avatar
Jacquouille
Salut François
Un grand merci pour ta gentillesse qui devient légendaire.
Mais, je t'en supplie, ne me fait pas le coup du Père ....François en
m'envoyant un truc Zippé.
Il déconne à chaque fois.
Si tu sais (ADSL) me l'envoyer en pas zippé?
Un grand merci et encore bonne fête -)

--
Jacquouille conseille : http://www.excelabo.net


"FxM" a écrit dans le message news:

Meuh non, Jacques :o)

J'avais aussi la même réaction que toi au début. Si tu mets ta macro
auto-destructrice dans le ThisWorkbook et que tu lui demandes de
détruire ThisWorkbook, ne me demande pas pourquoi mais elle le fait.

Le seul détail que j'ai eu l'occasion de rencontrer est un vrai faux
message d'alerte macro alors qu'il n'y a ni macro, ni module vide et ce
message n'apparait qu'à la première ouverture.

Un exemple tiré d'un développement précédent :
Un clic sur une image crée un tarif personnalisé pour un client et
enlève les macros du fichier. Toutes les macros sont dans ThisWorkbook.
Le clic lance transfert_4.

Sub transfert_4()
'plein d'actions diverses et variées telles que sauvegarde du
'fichier original puis ...

Application.Calculation = xlCalculationAutomatic
On Error Resume Next
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.deleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
End Sub

et zou, a pu macro. Je peux t'envoyer l'exemple original si tu le
demandes gentiment :o) (900 ko zippé -> 202 ko)

@+
FxM





Jacquouille wrote:
Bonjour
Merci pour vos infos.
Avant de demander, j'ai réfléchi (un peu) et j'ai consulté Mon site de
référence, mais j'en arrive toujours à la même conclusion.
Si on fait une macro pour détruire la première, reste l'autre.
Puis on fait une troisième pour détruire la deuxième....
et on arrive 15 jours plus tard, au Grand Prix suivant avec la 2000ème
macro


qui efface la 1999ème ????
Je vous remercie cependant tous deux de vous être penchés sur un
problème


existentiel (???-)) )

--
Jacquouille conseille : http://www.excelabo.net


"michdenis" a écrit dans le message news:


Bonjour Jacquouille,

Feuil1 représente le nom du module et nom de l'onglet de la feuille


'----------------------
Sub EffacerLaMacro()

ExécutionUneFois1 "Feuil1", "LeNomDeLaProcédureàEffacer"

End Sub
'----------------------


à placer dans un module standard.
'-----------------------
Sub ExécutionUneFois(NomModule As String, NomProcedure As String)
Dim A As Integer, B As Integer

With ThisWorkbook.VBProject.VBComponents(NomModule)
With .CodeModule
A = .ProcStartLine(NomProc, 0)
B = .ProcCountLines(NomProc, 0)
.DeleteLines A, B
End With
End With

End Sub
'-----------------------


Salutations!







"Jacquouille" a écrit dans le message de


news:

Bonjour
Après avoir étudié les macros qui se mettent en marche dès l'ouverture
du



document, je me pose des questions sur l'inverse.
En Formule 1, on a dit que "ils" avaient programmé leurs mode
d'anti-patinage pour que le logiciel ne garde plus de traces de
programmation dès le départ effectué.
Suite à cela, je me pose la question de savoir comment on peut bricoler


une

macro pour qu'elle s'auto-détruise dès que son boulot est terminé (ou
presque, puisque elle doit s'auto-détruire).
Ne me dites pas qu'elle tél à JPS et qu'il envoie un scud sur mon PC, je


ne

vous croirai pas ...-)
Un grand merci et bonne fin de fête des Cloches.
--
Jacquouille conseille : http://www.excelabo.net














Avatar
Jacquouille
que tu lui demandes de détruire ThisWorkbook, ne me demande pas pourquoi
mais elle le fait.

Et il ne reste même pas un peu de fumée ou des cendres?

Jacques.
Avatar
Nicolas B.
Salut à tous,

J'ai essayé toutes vos macros, et aucune ne marche chez moi : elles
s'arrêtent toutes sur la ligne :
thisworkbook.vbproject.vbcomponents("Machin")...
Selon les cas, j'ai deux erreurs différentes :
La méthode 'VBProject' de l'objet '_Workbook' a échoué.
ou
L'accès par programme au projet Visual Basic n'est pas fiable.

Où peut bien être le problème ?


Merci
--
Nicolas B.


Meuh non, Jacques :o)

J'avais aussi la même réaction que toi au début. Si tu mets ta macro
auto-destructrice dans le ThisWorkbook et que tu lui demandes de
détruire ThisWorkbook, ne me demande pas pourquoi mais elle le fait.

Le seul détail que j'ai eu l'occasion de rencontrer est un vrai faux
message d'alerte macro alors qu'il n'y a ni macro, ni module vide et
ce message n'apparait qu'à la première ouverture.

Un exemple tiré d'un développement précédent :
Un clic sur une image crée un tarif personnalisé pour un client et
enlève les macros du fichier. Toutes les macros sont dans
ThisWorkbook.
Le clic lance transfert_4.

Sub transfert_4()
'plein d'actions diverses et variées telles que sauvegarde du
'fichier original puis ...

Application.Calculation = xlCalculationAutomatic
On Error Resume Next
With
ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.deleteLines 1, .CountOfLines .CodePane.Window.Close
End With
End Sub

et zou, a pu macro. Je peux t'envoyer l'exemple original si tu le
demandes gentiment :o) (900 ko zippé -> 202 ko)

@+
FxM





Jacquouille wrote:
Bonjour
Merci pour vos infos.
Avant de demander, j'ai réfléchi (un peu) et j'ai consulté Mon site
de référence, mais j'en arrive toujours à la même conclusion.
Si on fait une macro pour détruire la première, reste l'autre.
Puis on fait une troisième pour détruire la deuxième....
et on arrive 15 jours plus tard, au Grand Prix suivant avec la
2000ème macro qui efface la 1999ème ????
Je vous remercie cependant tous deux de vous être penchés sur un
problème existentiel (???-)) )

--
Jacquouille conseille : http://www.excelabo.net


"michdenis" a écrit dans le message news:


Bonjour Jacquouille,

Feuil1 représente le nom du module et nom de l'onglet de la feuille


'----------------------
Sub EffacerLaMacro()

ExécutionUneFois1 "Feuil1", "LeNomDeLaProcédureàEffacer"

End Sub
'----------------------


à placer dans un module standard.
'-----------------------
Sub ExécutionUneFois(NomModule As String, NomProcedure As String)
Dim A As Integer, B As Integer

With ThisWorkbook.VBProject.VBComponents(NomModule)
With .CodeModule
A = .ProcStartLine(NomProc, 0)
B = .ProcCountLines(NomProc, 0)
.DeleteLines A, B
End With
End With

End Sub
'-----------------------


Salutations!







"Jacquouille" a écrit dans le
message de


news:

Bonjour
Après avoir étudié les macros qui se mettent en marche dès
l'ouverture du document, je me pose des questions sur l'inverse.
En Formule 1, on a dit que "ils" avaient programmé leurs mode
d'anti-patinage pour que le logiciel ne garde plus de traces de
programmation dès le départ effectué.
Suite à cela, je me pose la question de savoir comment on peut
bricoler


une

macro pour qu'elle s'auto-détruise dès que son boulot est terminé
(ou presque, puisque elle doit s'auto-détruire).
Ne me dites pas qu'elle tél à JPS et qu'il envoie un scud sur mon
PC, je


ne

vous croirai pas ...-)
Un grand merci et bonne fin de fête des Cloches.
--
Jacquouille conseille : http://www.excelabo.net








Avatar
FxM
Bonsoir Maître,

C'est parti. Le fichier s'appelle BDD.xls et fait 892 kb. Il ne contient
pas de virus mais tout plein de macros.

Quant au coup du Père François et du 'zip', si je crois percevoir un
sens général à l'expression [ mode faux-cul :o) ], je n'ai aucun
souvenir de ce à quoi tu pourrais envisager de faire référence ... <:oP

@+
FxM




Jacquouille wrote:
Salut François
Un grand merci pour ta gentillesse qui devient légendaire.
Mais, je t'en supplie, ne me fait pas le coup du Père ....François en
m'envoyant un truc Zippé.
Il déconne à chaque fois.
Si tu sais (ADSL) me l'envoyer en pas zippé?
Un grand merci et encore bonne fête -)

--
Jacquouille conseille : http://www.excelabo.net




Avatar
FxM
Bonsoir,

Nicolas B. wrote:
J'ai essayé toutes vos macros, et aucune ne marche chez moi : elles
s'arrêtent toutes sur la ligne :
thisworkbook.vbproject.vbcomponents("Machin")...
Cette ligne enlève le module "ThisWorkbook".


Selon les cas, j'ai deux erreurs différentes :
La méthode 'VBProject' de l'objet '_Workbook' a échoué.
A priori, ce module existe toujours sauf si tu essaies deux fois la

macro à la suite.

ou
L'accès par programme au projet Visual Basic n'est pas fiable.
Ca, c'est plutôt la sécurité d'Excel (2002 ou +?) voire de l'antivirus

qui est tatillonne et hurle sur le .codemodule

Appel donc aux autres contributeurs et conbutrices pour leur expérience.

@+
FxM

1 2