OVH Cloud OVH Cloud

Macro pour modifier une macro

8 réponses
Avatar
JièL Goubert
Salutatous

bon, ayé, je reviens sur le soucis de passage de données d'une macro qui
est dans un dot à une autre macro dans un dot aussi.

J'ai adopté les variables propriétés de doc car elles sont visibles et
c'est plus simple à manipuler.

Le problème maintenant est de faire une macro qui va modifier les 150
000 000 fichiers.
J'ai téléchargé la BatchMacro magique, mais pas de bol, ce que je veux
enregistrer ne s'enregistre pas :-(

En clair : comment modifier une macro dans 150 000 000 .dot ?

Je voudrais ajouter les instructions qui me permettent de récupérer les
variable "internes" pour les mettre dans les propriétés des documents,
propriétés que je récupères dans le document de base après ça.

Une solution ? merci bôcoup

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

8 réponses

Avatar
Geo

Je voudrais ajouter les instructions qui me permettent de récupérer les variable
"internes" pour les mettre dans les propriétés des documents, propriétés que je
récupères dans le document de base après ça.


Ca dépend si tu veux ajouter un macro complète (facile) ou en modifier
une existante (moins facile)

A titre d'exemple pour ajouter une module :
Sub AjouterUneMacroAuModèleNormal()
Dim MonModèleNormal As Template
Dim NouveauModule As VBComponent
Dim TexteMacro As String

TexteMacro = "'Macro des test pour ajouter du code" & vbCrLf
TexteMacro = TexteMacro & "' ligne commentaire" & vbCrLf
TexteMacro = TexteMacro & "Option explicit" & vbCrLf

Set MonModèleNormal = ActiveDocument.AttachedTemplate
Set NouvelleMacro =
MonModèleNormal.VBProject.VBComponents.Add(vbext_ct_StdModule)
' le nouveau nom ne doit pas exister
NouveauModule.name = "MacroTest"
NouveauModule.CodeModule.AddFromString TexteMacro
' il existe aussi un add from file
End Sub


--
A+

Avatar
JièL Goubert
Bonjoir(c) Geo

Je voudrais ajouter les instructions qui me permettent de récupérer les variable
"internes" pour les mettre dans les propriétés des documents, propriétés que je
récupères dans le document de base après ça.


Ca dépend si tu veux ajouter un macro complète (facile) ou en modifier
une existante (moins facile)


Tu me connais Geo, pourquoi je ferais des choses simples ;-)))
C'est bien une modif de l'existante que je voudrais faire

"normalement" ma macro ressemble actuellement à ça
sub autonews()
var1="machin"
var2="truc"
etc
lancemacrokéailleur
end sub

il faut que je remplace le lancemacrokéailleur par la récupération des
var1 à N dans des docproperties

A titre d'exemple pour ajouter une module :
Sub AjouterUneMacroAuModèleNormal()
...

je prend note, je verrais demain si j'arrive à l'adapter à ma propre macro

' il existe aussi un add from file


Ca aussi ça m'a l'air bien... je zyeute

End Sub


ben oui, même les meilleures choses ont une fin ;-)))

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr


Avatar
JièL Goubert
re Bonjoir(c) Geo

j'ai pris de l'avance sur demain ;-)

Dim NouveauModule As VBComponent


Ca coince sur cette instruction
Erreur de compil
Type défini par l'utilisateur non défini
:-(

quand je la met en remarque et que je lance la macro j'ai
L'accés programmatique (!!!) à Visual Basic Project n'est pas approuvé.

:-(((
Pas glop, pas glop

des idées pour résoudre ce/ces soucis ? merci bôcoup bôcoup

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

Avatar
JièL Goubert
re re Bonjoir(c) Geo

bon, la nuit porte conseil dit-on, hé ben c'est vrai ;-)
Ayé, tout fonctionne nickel chrome, (j'ai ajouté les références
manquantes et corrigé les noms d'objets utilisés) je vais maintenant
m'attaquer à la modif de la macro existante... si je ne reposte pas
d'ici la et si tu as des idées pour cette dernière, ne te gènes pas (les
autres non plus, ne vous gênez pas ;-D)

JièL Man croteur ;-)


Je voudrais ajouter les instructions qui me permettent de récupérer les variable
"internes" pour les mettre dans les propriétés des documents, propriétés que je
récupères dans le document de base après ça.


Ca dépend si tu veux ajouter un macro complète (facile) ou en modifier
une existante (moins facile)

A titre d'exemple pour ajouter une module :
Sub AjouterUneMacroAuModèleNormal()
Dim MonModèleNormal As Template
Dim NouveauModule As VBComponent
Dim TexteMacro As String

TexteMacro = "'Macro des test pour ajouter du code" & vbCrLf
TexteMacro = TexteMacro & "' ligne commentaire" & vbCrLf
TexteMacro = TexteMacro & "Option explicit" & vbCrLf

Set MonModèleNormal = ActiveDocument.AttachedTemplate
Set NouvelleMacro =
MonModèleNormal.VBProject.VBComponents.Add(vbext_ct_StdModule)
' le nouveau nom ne doit pas exister
NouveauModule.name = "MacroTest"
NouveauModule.CodeModule.AddFromString TexteMacro
' il existe aussi un add from file
End Sub



Avatar
Corona
Bonsoir Jièl,
Pour le message d'erreur, j'ai eu le même problème il y a peu (option de
sécurité de XP).
Faire Outils/Macro/Sécurité...
Choisir l'onglet "Editeurs approuvés" cocher la case "Faire confiance au
projet Visual Basic"
Philippe

"JièL Goubert" a écrit dans le
message de news: %
re Bonjoir(c) Geo

j'ai pris de l'avance sur demain ;-)

Dim NouveauModule As VBComponent


Ca coince sur cette instruction
Erreur de compil
Type défini par l'utilisateur non défini
:-(

quand je la met en remarque et que je lance la macro j'ai
L'accés programmatique (!!!) à Visual Basic Project n'est pas approuvé.

:-(((
Pas glop, pas glop

des idées pour résoudre ce/ces soucis ? merci bôcoup bôcoup

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr



Avatar
Geo

re re Bonjoir(c) Geo

bon, la nuit porte conseil dit-on, hé ben c'est vrai ;-)


Oui, mais quand on dort :-)

Bon puisque tu veux faire compliqué, tu as vu qu'il y a une propriété
.CountOfDeclarationLines

et
.CountOfLines

La première te permet d'ajouter du code à la fin des déclarations du
*module*, la deuxième te permet de repérer le End.

Si tu maitrises le contenu de ces modules (et non macro !)le plus
simple serait annule et remplace.


--
A+

Avatar
JièL Goubert
Bonjoir(c) Geo

Le 24/02/2006 14:13 vous avez écrit ceci :

re re Bonjoir(c) Geo

bon, la nuit porte conseil dit-on, hé ben c'est vrai ;-)


Oui, mais quand on dort :-)


Ah bon ? ;-)
Pourquoi on dit pas "la sieste porte conseil" alors ? ;-))))))))

Bon puisque tu veux faire compliqué, tu as vu qu'il y a une propriété
..CountOfDeclarationLines

et
..CountOfLines


Je z'yeute, merci

La première te permet d'ajouter du code à la fin des déclarations du
*module*, la deuxième te permet de repérer le End.


Y'en a pas une qui me permettrait de remplacer l'instruction qui lance
lamacrokéailleurs ?
Ca existe pas le R/R dans les modules ?
Oui, je sais, je suis ch*** ;-)

Au fait, comment je fais pour dire d'ajouter dans le "module" thisdocument
? ou comment dire c'est dans celui la que je voudrais ajouter les
instructions qui mettent les données dans les docproperties ?

Je le redis différement car je ne comprend même pas ce que j'ai ecris
Comment ajouter dans "ThisDocument" du modèle que je voudrais modifier,
les instructions

sub macrokéailleurs
...
end sub

Je voudrais garder les trucs en l'état et tromper le systéme en lui disant
que macrokéailleurs est en fait à la suite de celle qui est sensé
l'appeler pour initialiser les docproterties qui seront récupéré dans la
macro principale qui sera dans le dossier démarre... ouf, c'est clair ?
pas sur...

Si tu maitrises le contenu de ces modules (et non macro !)le plus simple
serait annule et remplace.


Je maîtrise, mais en fait y'a 4 variables qui sont initialisées
différemment selon le modèle, et comme y'a des milliards de modèles je
voulais le faire avec la batchmacro magique à Anacoluthe.

Encore merci pour vos aides si précieuses sur ces soucis macrotesque

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr/


Avatar
Geo

Pourquoi on dit pas "la sieste porte conseil" alors ? ;-))))))))


Tu as raison, on devrait, question de culture sans doute.

Y'en a pas une qui me permettrait de remplacer l'instruction qui lance
lamacrokéailleurs ?
Ca existe pas le R/R dans les modules ?


Tout est possible puisque tu peux récupérer le texte des modules, et le
remplacer.
Donc tu peux recopier le texte dans un document word, tu fais le
rechercher remplacer, tu enregistres le résultat sur un ficier txt et
tu le remplaces dans le module.
mais de base, ce sont des lignes que l'on manipule.
C'est une question d'enjeu.

Au fait, comment je fais pour dire d'ajouter dans le "module" thisdocument ? ou comment
dire c'est dans celui la que je voudrais ajouter les instructions qui mettent les
données dans les docproperties ?

Je le redis différement car je ne comprend même pas ce que j'ai ecris
Comment ajouter dans "ThisDocument" du modèle que je voudrais modifier, les
instructions


Ouh là, je crois que tu es en train de t'embrouiller.
Si tu veux des macros qui marchent sur tous les documents d'un compte,
il suffit de les mettre dans le normal.dot d'un compte ou dans un
modèle placé dans le répertoire de démarrage.

Donc tu fais un module avec un nom que d'autres n'ont pas pu prendre du
genre "7JièlLePluBo"
qui a comme contenu tes nouvelles macros.

Je voudrais garder les trucs en l'état et tromper le systéme en lui disant que
macrokéailleurs est en fait à la suite de celle qui est sensé l'appeler pour
initialiser les docproterties qui seront récupéré dans la macro principale qui sera
dans le dossier démarre... ouf, c'est clair ? pas sur...


ben euh j'arrive plus tout à fait à suivre.

Si tu as déjà des macros dont tu connais les noms des modules et des
contenus, tu ajoutes et supprimes les lignes que tu veux avec des
fonction insertlines et deletelines


exemple :
MonModule contient:

Option explicit
Dim MaVariable as integer

Sub AutoNew
ActiveDocument.BuiltInDocumentProperties("Comments") = _
"Compte-rendu de réunion"
end sub
Sub AutoOpen
'Il n'y a rien à faire pour l'instant
end sub
------------------------------
Et tu veux ajouter des instructions en avant dernière ligne
tu sais que c'est en ligne 10
donc :
NouveauModule.CodeModule.InsertLines Line:, String:=TexteMacro

Si quelqu'un risque d'avoir touché les macros, c'est moins drôle car il
faut analyser le module pour savoir où commence et où finit la macro
concernée.
Mais vu que tu ne dors que pendant la sieste, tu as le temps :-)

reste plus qu'à espérer que tu ne veux pas intervenir sur des macros
d'événements !


--
A+