VBA Word, supprimer macro, UserForm et Modules après exécution
5 réponses
ymer.hyseni
Salut tout le monde,
j'ai une macro qui me permet de s'auto supprimer apr=E8s avoir =E9t=E9
ex=E9cut=E9e.
la voici :
Sub deletAll()
Dim awi
Dim awcl As Integer
On Error Resume Next
Set awi =3D ActiveDocument.VBProject.VBComponents.Item(1)
awcl =3D awi.CodeModule.CountOflines
awi.CodeModule.DeleteLines 1, awcl
Set awi =3D Nothing ' Release the object
End Sub
il faut la placer dans "ThisDocument".
Ma demande est, comment faire pour que cette macro, en l'am=E9liorant
biensur, va supprimer =E9galement tous les modules et UserForm
=E9galement?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Circé
Bonsoir,
La première chose à se demander : "c'est quoi le but du jeu ?"
Pourquoi la macro doit s'autodétruire, c'est bizarre quand même... Y a peut être une autre manière de faire...
Circé http://faqword.free.fr
Salut tout le monde,
j'ai une macro qui me permet de s'auto supprimer après avoir été exécutée.
la voici :
Sub deletAll() Dim awi Dim awcl As Integer On Error Resume Next Set awi = ActiveDocument.VBProject.VBComponents.Item(1) awcl = awi.CodeModule.CountOflines awi.CodeModule.DeleteLines 1, awcl Set awi = Nothing ' Release the object End Sub
il faut la placer dans "ThisDocument".
Ma demande est, comment faire pour que cette macro, en l'améliorant biensur, va supprimer également tous les modules et UserForm également?
merci de votre aide, et à bientôt.
Bonsoir,
La première chose à se demander : "c'est quoi le but du jeu ?"
Pourquoi la macro doit s'autodétruire, c'est bizarre quand même... Y a
peut être une autre manière de faire...
Circé
http://faqword.free.fr
Salut tout le monde,
j'ai une macro qui me permet de s'auto supprimer après avoir été
exécutée.
la voici :
Sub deletAll()
Dim awi
Dim awcl As Integer
On Error Resume Next
Set awi = ActiveDocument.VBProject.VBComponents.Item(1)
awcl = awi.CodeModule.CountOflines
awi.CodeModule.DeleteLines 1, awcl
Set awi = Nothing ' Release the object
End Sub
il faut la placer dans "ThisDocument".
Ma demande est, comment faire pour que cette macro, en l'améliorant
biensur, va supprimer également tous les modules et UserForm
également?
La première chose à se demander : "c'est quoi le but du jeu ?"
Pourquoi la macro doit s'autodétruire, c'est bizarre quand même... Y a peut être une autre manière de faire...
Circé http://faqword.free.fr
Salut tout le monde,
j'ai une macro qui me permet de s'auto supprimer après avoir été exécutée.
la voici :
Sub deletAll() Dim awi Dim awcl As Integer On Error Resume Next Set awi = ActiveDocument.VBProject.VBComponents.Item(1) awcl = awi.CodeModule.CountOflines awi.CodeModule.DeleteLines 1, awcl Set awi = Nothing ' Release the object End Sub
il faut la placer dans "ThisDocument".
Ma demande est, comment faire pour que cette macro, en l'améliorant biensur, va supprimer également tous les modules et UserForm également?
merci de votre aide, et à bientôt.
ymer.hyseni
On 13 mar, 22:09, Circé wrote:
Bonsoir,
La première chose à se demander : "c'est quoi le but du jeu ?"
Pourquoi la macro doit s'autodétruire, c'est bizarre quand même... Y a peut être une autre manière de faire...
Circéhttp://faqword.free.fr
Salut tout le monde,
j'ai une macro qui me permet de s'auto supprimer après avoir été exécutée.
la voici :
Sub deletAll() Dim awi Dim awcl As Integer On Error Resume Next Set awi = ActiveDocument.VBProject.VBComponents.Item(1) awcl = awi.CodeModule.CountOflines awi.CodeModule.DeleteLines 1, awcl Set awi = Nothing ' Release the object End Sub
il faut la placer dans "ThisDocument".
Ma demande est, comment faire pour que cette macro, en l'améliorant biensur, va supprimer également tous les modules et UserForm également?
merci de votre aide, et à bientôt.- Masquer le texte des messages pr écédents -
- Afficher le texte des messages précédents -
Salut,
en effet, c'est bizarre, mais c'est comme ca...
je t'explique, c'est un outil web, des documents Word sont déposé dans un serveur par les utilisateurs, et ces mêmes documents Word sont repris automatiquement par l'outil web qui les transforme en PDF... s'il y a des macros, et surtout si ces macros sont en auto-open, il y a une erreur qui se déclanche, et l'outil bloque le document et ne le transforme pas... c'est pourquoi une macro qui se supprime toute seule pour moi c'est la solution.
merci et à bientôt j'espère.
On 13 mar, 22:09, Circé <ci...@aea.gr> wrote:
Bonsoir,
La première chose à se demander : "c'est quoi le but du jeu ?"
Pourquoi la macro doit s'autodétruire, c'est bizarre quand même... Y a
peut être une autre manière de faire...
Circéhttp://faqword.free.fr
Salut tout le monde,
j'ai une macro qui me permet de s'auto supprimer après avoir été
exécutée.
la voici :
Sub deletAll()
Dim awi
Dim awcl As Integer
On Error Resume Next
Set awi = ActiveDocument.VBProject.VBComponents.Item(1)
awcl = awi.CodeModule.CountOflines
awi.CodeModule.DeleteLines 1, awcl
Set awi = Nothing ' Release the object
End Sub
il faut la placer dans "ThisDocument".
Ma demande est, comment faire pour que cette macro, en l'améliorant
biensur, va supprimer également tous les modules et UserForm
également?
merci de votre aide, et à bientôt.- Masquer le texte des messages pr écédents -
- Afficher le texte des messages précédents -
Salut,
en effet, c'est bizarre, mais c'est comme ca...
je t'explique, c'est un outil web, des documents Word sont déposé dans
un serveur par les utilisateurs, et ces mêmes documents Word sont
repris automatiquement par l'outil web qui les transforme en PDF...
s'il y a des macros, et surtout si ces macros sont en auto-open, il y
a une erreur qui se déclanche, et l'outil bloque le document et ne le
transforme pas... c'est pourquoi une macro qui se supprime toute seule
pour moi c'est la solution.
La première chose à se demander : "c'est quoi le but du jeu ?"
Pourquoi la macro doit s'autodétruire, c'est bizarre quand même... Y a peut être une autre manière de faire...
Circéhttp://faqword.free.fr
Salut tout le monde,
j'ai une macro qui me permet de s'auto supprimer après avoir été exécutée.
la voici :
Sub deletAll() Dim awi Dim awcl As Integer On Error Resume Next Set awi = ActiveDocument.VBProject.VBComponents.Item(1) awcl = awi.CodeModule.CountOflines awi.CodeModule.DeleteLines 1, awcl Set awi = Nothing ' Release the object End Sub
il faut la placer dans "ThisDocument".
Ma demande est, comment faire pour que cette macro, en l'améliorant biensur, va supprimer également tous les modules et UserForm également?
merci de votre aide, et à bientôt.- Masquer le texte des messages pr écédents -
- Afficher le texte des messages précédents -
Salut,
en effet, c'est bizarre, mais c'est comme ca...
je t'explique, c'est un outil web, des documents Word sont déposé dans un serveur par les utilisateurs, et ces mêmes documents Word sont repris automatiquement par l'outil web qui les transforme en PDF... s'il y a des macros, et surtout si ces macros sont en auto-open, il y a une erreur qui se déclanche, et l'outil bloque le document et ne le transforme pas... c'est pourquoi une macro qui se supprime toute seule pour moi c'est la solution.
merci et à bientôt j'espère.
Geo
Bonjour à ymer
pour moi c'est la solution.
Il y a quand même la solution d'interdire l'exécution des macros en mettant un niveau de sécurité suffisamment élevé.
Sinon, faites un balayage sur la collection VBComponents en commençant par la fin et en évitant votre macro suicidaire. Sinon le traitement s'arrêtera en cours. Les UserForm sont aussi un VBComponent.
-- A+
Bonjour à ymer
pour moi c'est la solution.
Il y a quand même la solution d'interdire l'exécution des macros en
mettant un niveau de sécurité suffisamment élevé.
Sinon, faites un balayage sur la collection VBComponents en commençant
par la fin et en évitant votre macro suicidaire.
Sinon le traitement s'arrêtera en cours.
Les UserForm sont aussi un VBComponent.
Il y a quand même la solution d'interdire l'exécution des macros en mettant un niveau de sécurité suffisamment élevé.
Sinon, faites un balayage sur la collection VBComponents en commençant par la fin et en évitant votre macro suicidaire. Sinon le traitement s'arrêtera en cours. Les UserForm sont aussi un VBComponent.
-- A+
ymer.hyseni
On 13 mar, 22:41, Geo wrote:
Bonjour à ymer
pour moi c'est la solution.
Il y a quand même la solution d'interdire l'exécution des macros en mettant un niveau de sécurité suffisamment élevé.
Sinon, faites un balayage sur la collection VBComponents en commençant par la fin et en évitant votre macro suicidaire. Sinon le traitement s'arrêtera en cours. Les UserForm sont aussi un VBComponent.
-- A+
Salut,
merci, mais pour la sécurité, il faut pas que j'augmente ceci... par contre, je ne comprenda pas ce que tu dis par "balayage sur la collection VBComponents en commençant par la fin et en évitant votre macro suicidaire" ni d'ailleurs "Les UserForm sont aussi un VBComponent.".
merci pour ton aide... si tu as une piste, n'hésites pas..
ciao
On 13 mar, 22:41, Geo <G...@sans.pub> wrote:
Bonjour à ymer
pour moi c'est la solution.
Il y a quand même la solution d'interdire l'exécution des macros en
mettant un niveau de sécurité suffisamment élevé.
Sinon, faites un balayage sur la collection VBComponents en commençant
par la fin et en évitant votre macro suicidaire.
Sinon le traitement s'arrêtera en cours.
Les UserForm sont aussi un VBComponent.
--
A+
Salut,
merci, mais pour la sécurité, il faut pas que j'augmente ceci... par
contre, je ne comprenda pas ce que tu dis par "balayage sur la
collection VBComponents en commençant par la fin et en évitant votre
macro suicidaire" ni d'ailleurs "Les UserForm sont aussi un
VBComponent.".
merci pour ton aide... si tu as une piste, n'hésites pas..
Il y a quand même la solution d'interdire l'exécution des macros en mettant un niveau de sécurité suffisamment élevé.
Sinon, faites un balayage sur la collection VBComponents en commençant par la fin et en évitant votre macro suicidaire. Sinon le traitement s'arrêtera en cours. Les UserForm sont aussi un VBComponent.
-- A+
Salut,
merci, mais pour la sécurité, il faut pas que j'augmente ceci... par contre, je ne comprenda pas ce que tu dis par "balayage sur la collection VBComponents en commençant par la fin et en évitant votre macro suicidaire" ni d'ailleurs "Les UserForm sont aussi un VBComponent.".
merci pour ton aide... si tu as une piste, n'hésites pas..
ciao
Geo
merci, mais pour la sécurité, il faut pas que j'augmente ceci... par contre, je ne comprenda pas ce que tu dis par "balayage sur la collection VBComponents en commençant par la fin et en évitant votre macro suicidaire" ni d'ailleurs "Les UserForm sont aussi un VBComponent.".
Set awi = ActiveDocument.VBProject.VBComponents.Item(1)
Correspond à l'item 1 des vbcomponents, rien ne dit d'ailleurs que c'est le module en cours. Il faut faire qqch comme :
Sub test() Dim i As Integer Dim Nb As Integer Dim awi As VBComponent Dim awcl As Integer With ActiveDocument Nb = .VBProject.VBComponents.Count On Error Resume Next For i = Nb To 1 Step -1 Set awi = .VBProject.VBComponents.Item(i) Debug.Print i, awi.Type, .VBProject.VBComponents(i).name If awi.Type = vbext_ct_MSForm Then ' UserForm : Effacer .VBProject.VBComponents.Remove awi Else awcl = awi.CodeModule.CountOfLines 'If .VBProject.VBComponents(i).name <> "ModuleDeleteAll" Then awi.CodeModule.DeleteLines 1, awcl 'End If End If Next End With End Sub
Si cette macro est dans un modèle, ça doit marcher, je n'ai pas tout testé, c'est quand même assez risqué pour mes macros. Si elle est dans le document concerné il faut "sauter" le module où se trouve la macro tueuse pour qu'elle se suicide ensuite en utilisant votre macro. Si vous êtes en version 2007 tout ça est inutile, il suffit d'enregistrer les documents en docx.
-- A+
merci, mais pour la sécurité, il faut pas que j'augmente ceci... par
contre, je ne comprenda pas ce que tu dis par "balayage sur la
collection VBComponents en commençant par la fin et en évitant votre
macro suicidaire" ni d'ailleurs "Les UserForm sont aussi un
VBComponent.".
Set awi = ActiveDocument.VBProject.VBComponents.Item(1)
Correspond à l'item 1 des vbcomponents, rien ne dit d'ailleurs que
c'est le module en cours.
Il faut faire qqch comme :
Sub test()
Dim i As Integer
Dim Nb As Integer
Dim awi As VBComponent
Dim awcl As Integer
With ActiveDocument
Nb = .VBProject.VBComponents.Count
On Error Resume Next
For i = Nb To 1 Step -1
Set awi = .VBProject.VBComponents.Item(i)
Debug.Print i, awi.Type, .VBProject.VBComponents(i).name
If awi.Type = vbext_ct_MSForm Then ' UserForm : Effacer
.VBProject.VBComponents.Remove awi
Else
awcl = awi.CodeModule.CountOfLines
'If .VBProject.VBComponents(i).name <> "ModuleDeleteAll" Then
awi.CodeModule.DeleteLines 1, awcl
'End If
End If
Next
End With
End Sub
Si cette macro est dans un modèle, ça doit marcher, je n'ai pas tout
testé, c'est quand même assez risqué pour mes macros.
Si elle est dans le document concerné il faut "sauter" le module où se
trouve la macro tueuse pour qu'elle se suicide ensuite en utilisant
votre macro.
Si vous êtes en version 2007 tout ça est inutile, il suffit
d'enregistrer les documents en docx.
merci, mais pour la sécurité, il faut pas que j'augmente ceci... par contre, je ne comprenda pas ce que tu dis par "balayage sur la collection VBComponents en commençant par la fin et en évitant votre macro suicidaire" ni d'ailleurs "Les UserForm sont aussi un VBComponent.".
Set awi = ActiveDocument.VBProject.VBComponents.Item(1)
Correspond à l'item 1 des vbcomponents, rien ne dit d'ailleurs que c'est le module en cours. Il faut faire qqch comme :
Sub test() Dim i As Integer Dim Nb As Integer Dim awi As VBComponent Dim awcl As Integer With ActiveDocument Nb = .VBProject.VBComponents.Count On Error Resume Next For i = Nb To 1 Step -1 Set awi = .VBProject.VBComponents.Item(i) Debug.Print i, awi.Type, .VBProject.VBComponents(i).name If awi.Type = vbext_ct_MSForm Then ' UserForm : Effacer .VBProject.VBComponents.Remove awi Else awcl = awi.CodeModule.CountOfLines 'If .VBProject.VBComponents(i).name <> "ModuleDeleteAll" Then awi.CodeModule.DeleteLines 1, awcl 'End If End If Next End With End Sub
Si cette macro est dans un modèle, ça doit marcher, je n'ai pas tout testé, c'est quand même assez risqué pour mes macros. Si elle est dans le document concerné il faut "sauter" le module où se trouve la macro tueuse pour qu'elle se suicide ensuite en utilisant votre macro. Si vous êtes en version 2007 tout ça est inutile, il suffit d'enregistrer les documents en docx.