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

VBA Word, supprimer macro, UserForm et Modules après exécution

5 réponses
Avatar
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?

merci de votre aide, et =E0 bient=F4t.

5 réponses

Avatar
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.


Avatar
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.


Avatar
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+

Avatar
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


Avatar
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+