OVH Cloud OVH Cloud

comment éditer le code d'un module VBA via un autre module VBA ?

34 réponses
Avatar
ewts
Je souhaiterais écrire un module VBA qui soit capable de modifier (par
exemple via recherche/remplacement) le code d'un autre module VBA

4 réponses

1 2 3 4
Avatar
JièL
Bonjoir(c) Paul V

t'as pété une durit aujourd'hui je vois ;-)

Bon, j'ai été confronté à ce soucis de modifier du code avec du code, pas
pour Excel mais pour Word... le problème est quasiment le même.

en fait, quelqu'un avait écrit des tonnes de macros avec les pieds et ces
macros là étaient reprise dans un tas de doc et de modèle. Suite à une
réorganisation du bo*** en place, il FAUT modifier TOOOOUUUUUTES les
macros afin que ça puisse continuer à fonctionner avec l'existant ET la
nouvelle organisation. Voila le soucis.
La réalisation ; faire une macro qui va modifier toooooouuuuuutes les
macros de tous les doc et de tous les modèles... Quasi impossible de faire
ça manuellement et impossible aussi de faire comme tu le suggères un
export et un import car le bouzin est écrit avec les pieds et a avancé
(j'exclus le terme "évolué" volontairement :-D) sans la moindre
documentation d'année en année. Bref, il fallait que je retrouve dans les
macros un bout de code que je devais modifier

Voila une des explications, il y en a peut-être d'autres, mais la je te
parle de ma propre expérience

Pour changer de chapitre, je suis parfaitement d'accord avec toi sur le
mode de fonctionnement du forum qui à largement dévié et je suis aussi
parfaitement d'accord avec FxM sur le fait que ce n'est pas une hotline
gratuite. J'arrête là sinon je vais en faire un roman ;-)

--
JièL / Jean-Louis GOUBERT
Là bas mieux qu'en face ;-) http://forums.offices.free.fr/
La FAQ Outlook est là : http://faq.outlook.free.fr/
Les stats de CDO : http://faq.outlook.free.fr/cdo/



Le 06/10/2006 18:24 vous avez écrit ceci :
Tu as raison, laissons tomber.
Pour les autres, quelqu'un à une réponse à ma petite question?

A+

Paul V

"MichDenis" a écrit dans le message de news:
%
| A propos, tu penses que notre demandeur a créé un modèle et veut
modifier le
| code de tous les classeurs qui existent dejà, ( je blague, bien sur)


Pourquoi tiens-tu tant que cela à te mettre à la place (dans la peau) du
demandeur ?
À ce que je sache, il n'est pas limité quant aux nombres de questions
qu'il peut
adresser au forum...ni des compléments d'informations qu'il peut demander
à la
(les) solution proposée ...Laissons lui l'initiative.... Non ?









Avatar
Patrick Penet
Bonjour tous,

Ben ça discute ferme là-dedans !

J'ai été confronté au pb que décrit JièL et je
m'en suis sorti exportant TOUT le code dans
Word, puis en utilisant la fonction Rechercher-
Remplacer.

C'est fastidieux et petit-bras, mais ça a marché.

Cordialement.
PP
Avatar
Ange Ounis
Peut-être avec ce genre de code (sous réserve d'utiliser Excel 2000 ou version
plus récente) ?

'''''''''''''''''''''
Sub essai()
''''''''à adapter
Wbk = "Perso.xls"
Avant = "LineStyle:=xlDouble"
Apres = "LineStyle:=xlAutomatic"
'''''''''''''''''
ModifierCodeVBA Wbk, Avant, Apres
End Sub

Sub ModifierCodeVBA(NomClasseur, AvantModif, ApresModif)
Dim VBComp, S$

With Workbooks(NomClasseur).VBProject
For Each VBComp In .VBComponents
With VBComp.CodeModule
On Error Resume Next
S = .Lines(1, .CountOfLines)
.DeleteLines 1, .CountOfLines
On Error GoTo 0
S = Join(Split(S, AvantModif), ApresModif)
.AddFromString S
End With
Next
End With
Workbooks(NomClasseur).Save

End Sub
'''''''''''''''''''''

----------
Ange Ounis
----------

Hello Jacky,

Pas encore au lit?

Dois-je le repeter, je n'ai jamais mis la compétence de Denis en doute, tout
du contraire.
Cela étant dit, je ne crois pas que le demandeur peut résoudre son problème
avec la réponse donnée, mais j'espere pour lui que je me trompe.

A+

PAul V
"Jacky" a écrit dans le message de news:

Paul......
Sans vouloir prendre partie, là, tu exagères,
Je ne vois vraiment pas ce qu'il y a d'inutile ou d'inadapté dans la
réponse de Denis, qui pour le moins que l'on puisse dire est très
compétant en la matière.
Pour moi, eternel débutant, il a parfaitement répondu à la question posée.
--
Salutations
JJ

"Paul V" a écrit dans le message de news:

Tout le monde est le bienvenu.

Je repondrais simplement que c'est quand même mieux quand le demandeur a
aussi une réponse utile et adaptée;-)

A+

Paul V

"Stéphan DuQuébec" a écrit dans
le message de news:
Bonjour messieurs, dames,

Sans vouloir me mêler de ce qui ne me regarde pas, j'ajouterais
simplement
que les codes, soluces, réponses, conseils qui sont fournis par
MicheDenis,
et par tous les autres qui mettent leur grande compétence au service de
la
communauté, ne servent pas qu'à l'initiateur de la question mais à des
centaines (milliers !?!?!?) d'autres lecteurs silencieux qui eux, ne
sont pas
tous débutants. Ne perdons pas ça de vue.....c'est ce qui fait la
richesse,
je crois, d'un site comme le mpfe.

Amicalement.












Avatar
ewts
Merci à tous pour les exemples, remarques, commentaires,..
Le problème est bien de modifier certains "paramètres" dans un grand nombre
de procédures existantes (écrites par d'autres, non documentées et utilisées
depuis un certain temps).
J'espérais trouver une solution plus élégante que celle qui consiste à
ouvrir chaque classeur et à aller corriger manuellement le code concerné.

Encore merci et à +


Peut-être avec ce genre de code (sous réserve d'utiliser Excel 2000 ou version
plus récente) ?

'''''''''''''''''''''
Sub essai()
''''''''à adapter
Wbk = "Perso.xls"
Avant = "LineStyle:=xlDouble"
Apres = "LineStyle:=xlAutomatic"
'''''''''''''''''
ModifierCodeVBA Wbk, Avant, Apres
End Sub

Sub ModifierCodeVBA(NomClasseur, AvantModif, ApresModif)
Dim VBComp, S$

With Workbooks(NomClasseur).VBProject
For Each VBComp In .VBComponents
With VBComp.CodeModule
On Error Resume Next
S = .Lines(1, .CountOfLines)
.DeleteLines 1, .CountOfLines
On Error GoTo 0
S = Join(Split(S, AvantModif), ApresModif)
.AddFromString S
End With
Next
End With
Workbooks(NomClasseur).Save

End Sub
'''''''''''''''''''''

----------
Ange Ounis
----------

Hello Jacky,

Pas encore au lit?

Dois-je le repeter, je n'ai jamais mis la compétence de Denis en doute, tout
du contraire.
Cela étant dit, je ne crois pas que le demandeur peut résoudre son problème
avec la réponse donnée, mais j'espere pour lui que je me trompe.

A+

PAul V
"Jacky" a écrit dans le message de news:

Paul......
Sans vouloir prendre partie, là, tu exagères,
Je ne vois vraiment pas ce qu'il y a d'inutile ou d'inadapté dans la
réponse de Denis, qui pour le moins que l'on puisse dire est très
compétant en la matière.
Pour moi, eternel débutant, il a parfaitement répondu à la question posée.
--
Salutations
JJ

"Paul V" a écrit dans le message de news:

Tout le monde est le bienvenu.

Je repondrais simplement que c'est quand même mieux quand le demandeur a
aussi une réponse utile et adaptée;-)

A+

Paul V

"Stéphan DuQuébec" a écrit dans
le message de news:
Bonjour messieurs, dames,

Sans vouloir me mêler de ce qui ne me regarde pas, j'ajouterais
simplement
que les codes, soluces, réponses, conseils qui sont fournis par
MicheDenis,
et par tous les autres qui mettent leur grande compétence au service de
la
communauté, ne servent pas qu'à l'initiateur de la question mais à des
centaines (milliers !?!?!?) d'autres lecteurs silencieux qui eux, ne
sont pas
tous débutants. Ne perdons pas ça de vue.....c'est ce qui fait la
richesse,
je crois, d'un site comme le mpfe.

Amicalement.















1 2 3 4