OVH Cloud OVH Cloud

Macro modifie macro

2 réponses
Avatar
Beabou
Bonjour,

J'ai besoin de faire une macro qui modifie une macro dans un autre classeur.
Je dois rajouter une ligne dans une procédure qui est liée à un userform.

Merci de votre aide.
Beabou.

2 réponses

Avatar
anonymousA
bonjour,

si tu connais le N° de la ligne où insérer ton code. 2 possibilités ,
soit tu remplaces le code existant, soit tu insères dans le code de ton
module ( il te faudra désigner précisément le module mais un UF étant un
module de classe , tu y arriveras ).

Exemple ci-dessous, on insère ou on remplace dans le Module appelé TOTO
à la ligne 2 du code l'instruction Msgbox "tata est là".
Pour que le code ci-dessus soit compilable, il te faut une référence à
Microsoft Visual Basic Extensibility 5.3 dans OUtils/Références de
l'éditeur VBE.

Dim cd As CodeModule
Set cd = ThisWorkbook.VBProject.VBComponents("TOTO").CodeModule

cd.InsertLines 2, "Msgbox" & """tata est là"""
ou
cd.ReplaceLine 2, "Msgbox" & """tata est là"""

Il y a bien sur plus compliqué et on peut faire beaucoup d'amusements
différents

A+

Bonjour,

J'ai besoin de faire une macro qui modifie une macro dans un autre classeur.
Je dois rajouter une ligne dans une procédure qui est liée à un userform.

Merci de votre aide.
Beabou.


Avatar
michdenis
Bonjour Beaubou,

A ) Pour les procédures suivantes, aucune bibliothèque supplémentaire à ajouter:

B ) Copie ces 2 procédures dans un module standard en les adaptant à ton application.

C ) Il faut faire "attention" pour gérer adéquatement ce type de procédure

'---------------------------------------------
Sub AjouterUneLigneDeCode()

Dim Comp As Object, NoLigne As Integer, Ajout As Variant
Ajout = "Msgbox ""ça marche!"""

'Attention : Remplace Module2 par le nom du module
'où se trouve ta procédure
Set Comp = ThisWorkbook.VBProject.VBComponents("module2").CodeModule
'indique à quelle ligne la procédure "Trouver" débute.

NoLigne = Comp.ProcBodyLine("Trouver", 0)
'Ajoute à la deuxième ligne de la procédure "Trouver
'le code désiré
Comp.InsertLines NoLigne + 3, Ajout

End Sub
'---------------------------------------------
Sub effacerLigneDeCode()

Dim Comp As Object, NoLigne As Integer

'Attention : Remplace Module2 par le nom du module
'où se trouve ta procédure
Set Comp = ThisWorkbook.VBProject.VBComponents("module2").CodeModule
'indique à quelle ligne la procédure "Trouver" débute.
NoLigne = Comp.ProcBodyLine("Trouver", 0)
'Détruit la ligne de code indiquée
Comp.DeleteLines NoLigne + 3, 1
Set Comp = Nothing
End Sub
'---------------------------------------------


Salutations!





"Beabou" a écrit dans le message de news:
Bonjour,

J'ai besoin de faire une macro qui modifie une macro dans un autre classeur.
Je dois rajouter une ligne dans une procédure qui est liée à un userform.

Merci de votre aide.
Beabou.