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

VBA- Insérer à l'aide d'une macro du code dans un autre classeur

2 réponses
Avatar
Informatique_LIDV
Bonjour,

Est-il possible à partir d'une macro existante d'un classeur 1 d'insérer du
code dans ThisWorkbook et dans une feuille module d'un classeur 2 qui vient
d'être créé.

Si cela est possible, une solution me serait d'un grand secours et j'espère
que cela est possible.

Merci par avance pour vos réponses.

Julien

2 réponses

Avatar
ClémentMarcotte
Bonjour,

Jette un oeil sur cette page:

http://frederic.sigonneau.free.fr/VBE.htm


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

Est-il possible à partir d'une macro existante d'un classeur 1 d'insérer
du

code dans ThisWorkbook et dans une feuille module d'un classeur 2 qui
vient

d'être créé.

Si cela est possible, une solution me serait d'un grand secours et
j'espère

que cela est possible.

Merci par avance pour vos réponses.

Julien




Avatar
anonymousA
bonjour,

des codes tout faits sont disponibles sur le site de Frédéric Sigonneau
(sous la rubrique VBE.zip ) et Excelabo. Je t'invite à y aller.
PAr ailleurs, je te communique ci-dessous un exemple de destruction de
code, de construction de code avec une petite variante particulière
interessante: la destruction de code du programme lui-même lors de
l'ouverture du fichier et la reconstruction d'un workbook_open apr le
programme lui-même. Au cas où !
Ah, j'oubliais, il te faut mettre une référence dans Outils/Références de
VBE à la bibilothèque Microsoft Visual Basic Extensibility 3.5.

'les 2 procédures isn et workbook_open sont indissociables, la sub isn
devant être placée
'impérativement dans un module standard

'Private Sub Workbook_Open()
'
'Dim vb As VBComponent
'
''on détruit toutes les macros contenues dans le présent fichier. même la
sub workbook_open
''qui lance la destruction sera éffacée. Cependant, comme le compilateur a
monté en mémoire
''les instructions, cette macro sera exécutée jusqu'au bout permettant donc
l'appel à la sub isn
''qui reconstruira un workbook_open
'
'For Each vb In ThisWorkbook.VBProject.VBComponents
' If vb.Name <> "Module2" Then 'Module2 est le nom du module dans lequel
se trouve la sub isn
' With vb.CodeModule
' .DeleteLines 1, .CountOfLines
' End With
' End If
'Next
'
''on est contraint de passer par une sub dans un module standard pour
déclencher l'insertion des lignes
''que ce soit par insertlines ou par addfromstring. Cette insertion de lignes
''est evidemment necessaire pour recréer un workbook_open. Si on laisse les
instructions
''insertlines ou par addfromstring dans le workbook_open, il y a
déclenchement de la détection
''de virus et effacement immédiat de la sub workbook_open à l'enregistrement
du fichier
'
'isn 'on fait appel à la sub de reconstruction d'un workbook_open
'
'With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
' .DeleteLines 1, .CountOfLines
'End With
'
'Application.VBE.MainWindow.Visible = False
'
'End Sub

Sub isn()

Dim cd As CodeModule

'ici on déclare un objet de type codemodule sur le VBComponents(1) qui est
toujours
'le thisworkbook car celui-ci a l'indice 1 quelque soit son codename

Set cd = ThisWorkbook.VBProject.VBComponents(1).CodeModule

'on crée la procédure evenementielle workbook_open

With cd
.CreateEventProc "Open", "Workbook"

'on repère la ligne du début de la la macro workbook_open
LiDeb = .ProcBodyLine("Workbook_Open", 0)

'on prépare le texte de la macro workbook_open
s = s & "If Range(""A1"").Value@ Then" & vbLf
s = s & "Msgbox ""40 an A1 !""" & vbLf
s = s & "End If"
'on insére le texte préparé dans la macro workbook_open
.InsertLines LiDeb + 1, s

End With

End Sub



Bonjour,

Est-il possible à partir d'une macro existante d'un classeur 1 d'insérer du
code dans ThisWorkbook et dans une feuille module d'un classeur 2 qui vient
d'être créé.

Si cela est possible, une solution me serait d'un grand secours et j'espère
que cela est possible.

Merci par avance pour vos réponses.

Julien