[R]macro pour supprimer une autre macro

brice59

XLDnaute Occasionnel
Bonjour,

Je recherche une macro pour supprimer une macro sur le même document.

Qui sait comment faire ?

Merci

voici à la réponse....


Code:
Dim awi
Dim awcl As Integer
On Error Resume Next
Set awi = ActiveDocument.VBProject.VBComponents.Item(1)
awcl = awi.CodeModule.CountOflines
awi.CodeModule.DeleteLines A,B   ==> 'il faut remplacer le A par la 1ère ligne et le B par la dernière ligne à supprimer, pensez à supprimer la macro de suppression en même temps <==
Set awi = Nothing ' Release the object
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : macro pour supprimer une autre macro

Bonjour
Cochez la référence "Microsoft Visual Basic for Application Exensibility 5.n"
pour avoir les types de donnéees et l'aide en ligne appropriée à ce genre de manip
Ainsi CoModC ci dessous peut être déclaré As CodeModule. Ça supprime NbLC lignes à partir de la LC:
VB:
CoModC.DeleteLines LC, NbLC
J'ai même dans un truc une fonction qui retourne un CodeModule:
VB:
Function CoModSrc(ByVal Feui As Worksheet) As CodeModule
On Error Resume Next
Set CoModSrc = ClassSrc(Feui).VBProject.VBComponents(Feui.[Module].Value).CodeModule
If Err Then MsgBox "Le module """ & Feui.[Module].Value & """ est introuvable dans """ _
   & Feui.[Class].Value & """.", vbCritical, "Aïe !": End
End Function
Ceci peut aussi vous servir pour trouver la procédure à supprimer, extrait de l'aide:
ProcBodyLine, propriété


Renvoie la première ligne d'une procédure.

Syntaxe

object.ProcBodyLine(procname, prockind) As Long

La syntaxe de la propriété ProcBodyLine comprend les éléments suivants :

Élément Description
object Expression d'objet qui prend la valeur d'un objet figurant dans la liste Application.
procname Valeur de type String contenant le nom de la procédure.
prockind Indique le type de procédure à localiser. Étant donné que les procédures de propriété possèdent des représentations multiples dans le module, vous devez indiquer le type de procédure à localiser. Toutes les procédures autres que les procédures de propriétés (telles que, par exemple, les procédures Sub et Function) utilisent la constante vbext_pk_Proc.



Vous pouvez utiliser l'une des constantes suivantes pour l'argument prockind :

Constante Description
vbext_pk_Get Spécifie une procédure qui renvoie la valeur d'une propriété.
vbext_pk_Let Spécifie une procédure qui affecte une valeur à une propriété.
vbext_pk_Set Spécifie une procédure qui affecte une référence à un objet.
vbext_pk_Proc Spécifie toutes les procédures autres que les procédures de propriétés.
S'applique à un CodeModule
Voir aussi ProcOfLine permettant de vérifier si la ligne spécifiée appartient toujours à la procédure à supprimer (ProcKind à respécifier aussi chaque fois).
Cordialement
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : macro pour supprimer une autre macro

Le nom d'un CodeModule c'est très exactement le nom que porte ce module dans le projet Visual Basic qui le contient. Ça doit être pareil dans Word, même si la philosophie d'implantation diffère un peu. Du moment qu'on peut trouver le module par l'éditeur VBA on peut naviguer de même dans le VBProject.VBComponents avec les mêmes noms. Et un document word a certainement une propriété VBProject qui représente son projet VBA.
 

Dranreb

XLDnaute Barbatruc
Re : macro pour supprimer une autre macro

Le nom de ma macro c'est "sub macro 2()" (classique)
mais je ne comprends pas du tout comment faire.
Il faut isoler le projet VBA puis le module qui la contient : Set CoMod = DocumentWord.VBProject.VBComponents(NomDuModule).CodeModule
Ainsi que vous le feriez en quelque sorte dans l'explorateur de projets VBA en cliquant sur le module: tout comme le code vous est alors présenté dans la fenêtre, il vous sera, là, accessible dans CoMod.
 

brice59

XLDnaute Occasionnel
Re : macro pour supprimer une autre macro

bon, j'ai tenté cette solution , mais rien de fait.


J'ai trouvé un autre code à insérer dans la macro même.


Code:
Dim awi
Dim awcl As Integer
On Error Resume Next
Set awi = ActiveDocument.VBProject.VBComponents.Item(1)
awcl = awi.CodeModule.CountOflines
awi.CodeModule.DeleteLines A,B 'il faut remplacer le A par la 1ère ligne et le B par la dernière ligne à supprimer, pensez à supprimer la macro de suppression en même temps
Set awi = Nothing ' Release the object
 

Discussions similaires

Statistiques des forums

Discussions
312 242
Messages
2 086 532
Membres
103 243
dernier inscrit
SAH