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

du code qui écrit du code dans un autre classeur

6 réponses
Avatar
pirot
Bonjour,
Est il possible de cr=E9er du code qui =E9crit du code dans un autre
classeur ?
je m'explique:
un coll=E8gue utilise un classeur nomm=E9 VO
je dois lui int=E9grer ou modifier r=E9guli=E8rement du code (dans un
module )

et PARFOIS affecter un raccourci clavier pour une nouvelle macro.
Je peux bien s=FBr exporter le module en .bas, lui transmettre le
fichier .bas par mail
et lui demander d'int=E9grer cela en vba,
et enfin d'affecter un raccourci clavier =E0 la macro.

Je pr=E9f=E8rerais lui transmettre un classeur excel nomm=E9 MAJ par exempl=
e
(car les maj sont nombreuses, et cela est un peu p=E9nible =E0 faire =E0
distance)
qui
1. copie le module dans son classeur VO
2. et qui ajoute =E0 Private Sub Workbook_Open() la
ligne :Application.OnKey "^{F12}", "mef" par exemple
pour avoir le raccourci clavier voulu.
possibilo ???
merci de vos r=E9ponses
pirot

6 réponses

Avatar
Daniel.C
Bonjour.
Un exemple (le classeur cible doit être ouvert) :

Sub AjoutCode()
With
Workbooks("100303.xlsm").VBProject.VBComponents("ThisWorkbook").CodeModule
.insertlines 1, "Private Sub Workbook_Open()"
.insertlines 2, "Msgbox ""toto"""
.insertlines 3, "End Sub"
End With
End Sub

Cordialement.
Daniel

Bonjour,
Est il possible de créer du code qui écrit du code dans un autre
classeur ?
je m'explique:
un collègue utilise un classeur nommé VO
je dois lui intégrer ou modifier régulièrement du code (dans un
module )

et PARFOIS affecter un raccourci clavier pour une nouvelle macro.
Je peux bien sûr exporter le module en .bas, lui transmettre le
fichier .bas par mail
et lui demander d'intégrer cela en vba,
et enfin d'affecter un raccourci clavier à la macro.

Je préfèrerais lui transmettre un classeur excel nommé MAJ par exemple
(car les maj sont nombreuses, et cela est un peu pénible à faire à
distance)
qui
1. copie le module dans son classeur VO
2. et qui ajoute à Private Sub Workbook_Open() la
ligne :Application.OnKey "^{F12}", "mef" par exemple
pour avoir le raccourci clavier voulu.
possibilo ???
merci de vos réponses
pirot


Avatar
michdenis
Bonjour,

Des fois, il est plus facile de copier l'ensemble d'un module que
de modifier seulement certaines procédures !

La macro suivante copie tout le code de tous les modules.
Dans le classeur de destination, elle débute par supprimer
le code déjà existant et ajoute le nouveau code.

Ceci est possible seulement chacun des classeurs ont le
même nombre de modules et que ces derniers ont le
même nom.

'---------------------------------------------------
Sub Copie_Code_De_Ce_Classeur_Vers_Un_Autre()

Dim Texte As String
Dim Wk As Workbook

Set Wk = Workbooks("Classeur2.xls") 'Classeur de destination

For Each vbc In ThisWorkbook.VBProject.VBComponents
With vbc.CodeModule
If .CountOfLines > 0 Then
Texte = .Lines(1, .CountOfLines)
With Wk.VBProject.VBComponents(vbc.Name).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString Texte
End With
End If
End With
Next
End Sub
'---------------------------------------------------




"pirot" a écrit dans le message de groupe de discussion :

Bonjour,
Est il possible de créer du code qui écrit du code dans un autre
classeur ?
je m'explique:
un collègue utilise un classeur nommé VO
je dois lui intégrer ou modifier régulièrement du code (dans un
module )

et PARFOIS affecter un raccourci clavier pour une nouvelle macro.
Je peux bien sûr exporter le module en .bas, lui transmettre le
fichier .bas par mail
et lui demander d'intégrer cela en vba,
et enfin d'affecter un raccourci clavier à la macro.

Je préfèrerais lui transmettre un classeur excel nommé MAJ par exemple
(car les maj sont nombreuses, et cela est un peu pénible à faire à
distance)
qui
1. copie le module dans son classeur VO
2. et qui ajoute à Private Sub Workbook_Open() la
ligne :Application.OnKey "^{F12}", "mef" par exemple
pour avoir le raccourci clavier voulu.
possibilo ???
merci de vos réponses
pirot
Avatar
pirot
bonjour,

j'ai un souci avec le code car j'ai une erreur: 1004 La méthode
'VBProject' de l'objet '_Workbook' a échoué.

alors j'ai essayé:

With ActiveWorkbook
With .VBProject
With .VBComponents("Module1").CodeModule
End With
End With
End With
en mode pas à pas c'est sur .VBProject que j'obtiens l'erreur
dois je activer une option dans vba, ou bien?
merci de vos réponses
cordialement
pirot
Avatar
michdenis
Bonjour,

Ce code ne comporte pas d'erreur.

Dans la fenêtre de l'éditeur de code / barre des menus / outils / références /
as-tu des références cochées marquées "Manquantes" ?





"pirot" a écrit dans le message de groupe de discussion :


bonjour,

j'ai un souci avec le code car j'ai une erreur: 1004 La méthode
'VBProject' de l'objet '_Workbook' a échoué.

alors j'ai essayé:

With ActiveWorkbook
With .VBProject
With .VBComponents("Module1").CodeModule
End With
End With
End With
en mode pas à pas c'est sur .VBProject que j'obtiens l'erreur
dois je activer une option dans vba, ou bien?
merci de vos réponses
cordialement
pirot
Avatar
pirot
bonjour,
effectivement, il faut cocher dans excel dans la sécurité "faire
confiance au projet visual basic.
cela fonctionne à présent.

Dernière question
le code:
.insertlines 1, "Private Sub Workbook_Open()"
.insertlines 2, "Msgbox ""toto"""
.insertlines 3, "End Sub"
fonctionne bien, mais si, plus tard, je veux ajouter une ligne dans
workbook_open() qui existe déjà,
comment faire pour insérer une ligne dans le "sub" existant ?
merci
cordialelement
pirot
Avatar
pirot
bonjour,
Après encore quelques essais,
mon projet est finalisé, grâce à vous (michdenis et daniel)
tout fonctionne bien, et comme voulu
Merci milles fois
la liste est toujours efficace !
@+
pirot