OVH Cloud OVH Cloud

generer une macro avec une macro

8 réponses
Avatar
Oliv
Salut à tous

J'ai une fiche excel qui me génère environ une centaine de fichiers Excel à
l'aide d'une macro, les fiches excel générées doivent toutes contenir une
même macro de controle (Private Sub WorkSheet_Change(ByVal Target As Range)),
comment puis générer la macro WorkSheet_Change sans avoir à la recopier à la
main ?

Merci Oliv

8 réponses

Avatar
Pierre Fauconnier
Bonjour

Le plus simple, à mon avis, est de générer tes classeurs sur base d'un
modèle xlt contenant la macro évènementielle...

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"Oliv" a écrit dans le message de news:

Salut à tous

J'ai une fiche excel qui me génère environ une centaine de fichiers Excel
à
l'aide d'une macro, les fiches excel générées doivent toutes contenir une
même macro de controle (Private Sub WorkSheet_Change(ByVal Target As
Range)),
comment puis générer la macro WorkSheet_Change sans avoir à la recopier à
la
main ?

Merci Oliv


Avatar
Oliv
Oui, ca marche aussi, mais ce n'est pas vraiment dynamique
enfin si on ne me demande pas de changement, ca devrait marcher
Merci pour ton aide


Bonjour

Le plus simple, à mon avis, est de générer tes classeurs sur base d'un
modèle xlt contenant la macro évènementielle...

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"Oliv" a écrit dans le message de news:

Salut à tous

J'ai une fiche excel qui me génère environ une centaine de fichiers Excel
à
l'aide d'une macro, les fiches excel générées doivent toutes contenir une
même macro de controle (Private Sub WorkSheet_Change(ByVal Target As
Range)),
comment puis générer la macro WorkSheet_Change sans avoir à la recopier à
la
main ?

Merci Oliv







Avatar
Pierre Fauconnier
Si on te demande des modifs, tu modifies dans le modèle.

Cela étant, il y a possibilité via vba, mais je suis à la bourre sur un
autre travail pour l'instant. J'y reviendrai tout à l'heure

Pierre

"Oliv" a écrit dans le message de news:

Oui, ca marche aussi, mais ce n'est pas vraiment dynamique
enfin si on ne me demande pas de changement, ca devrait marcher
Merci pour ton aide


Bonjour

Le plus simple, à mon avis, est de générer tes classeurs sur base d'un
modèle xlt contenant la macro évènementielle...

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin (
proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"Oliv" a écrit dans le message de news:

Salut à tous

J'ai une fiche excel qui me génère environ une centaine de fichiers
Excel
à
l'aide d'une macro, les fiches excel générées doivent toutes contenir
une
même macro de controle (Private Sub WorkSheet_Change(ByVal Target As
Range)),
comment puis générer la macro WorkSheet_Change sans avoir à la recopier
à
la
main ?

Merci Oliv









Avatar
OnE
Salut à tous

J'ai une fiche excel qui me génère environ une centaine de fichiers Excel à
l'aide d'une macro, les fiches excel générées doivent toutes contenir une
même macro de controle (Private Sub WorkSheet_Change(ByVal Target As Range)),
comment puis générer la macro WorkSheet_Change sans avoir à la recopier à la
main ?

Merci Oliv


Bonjour,

Rajoute dans ton fichier excel les lignes suivantes

Workbooks.Open ("Toto.xls")
Workbooks("Toto.xls").VBProject.VBComponents("ThisWorkbook").CodeModule.AddFromFile
("C:code.txt")
Workbooks("Toto.xls").Close savechanges:=True

En changeant, bien évidemment les noms de fichiers et en mettant dans
ton fichier texte le code de ta procédure Private Sub
WorkSheet_Change(ByVal Target As Range)

Avatar
Pierre Fauconnier
Salut.

C'est une très bonne technique...

Mais attention à la mise à jour des macros, car il ne suffit pas de
réinjecter un nouveau fichier texte, puisque le nom de la macro
évènementielle existera déjà, entraînant un plantage d'Excel à
l'exécution...

Cela étant, Oliv peut voir que c'est l'objet vbproject qui est utilisé. A
partir de là, il y a déjà moyen de s'en tirer pour apporter une modif à la
macro...


Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"OnE" a écrit dans le message de news:
%
Salut à tous

J'ai une fiche excel qui me génère environ une centaine de fichiers Excel
à l'aide d'une macro, les fiches excel générées doivent toutes contenir
une même macro de controle (Private Sub WorkSheet_Change(ByVal Target As
Range)), comment puis générer la macro WorkSheet_Change sans avoir à la
recopier à la main ?

Merci Oliv


Bonjour,

Rajoute dans ton fichier excel les lignes suivantes

Workbooks.Open ("Toto.xls")
Workbooks("Toto.xls").VBProject.VBComponents("ThisWorkbook").CodeModule.AddFromFile
("C:code.txt")
Workbooks("Toto.xls").Close savechanges:=True

En changeant, bien évidemment les noms de fichiers et en mettant dans ton
fichier texte le code de ta procédure Private Sub WorkSheet_Change(ByVal
Target As Range)



Avatar
Oliv
Merci,

Ca ! Ca me plait
Oliv.


Salut à tous

J'ai une fiche excel qui me génère environ une centaine de fichiers Excel à
l'aide d'une macro, les fiches excel générées doivent toutes contenir une
même macro de controle (Private Sub WorkSheet_Change(ByVal Target As Range)),
comment puis générer la macro WorkSheet_Change sans avoir à la recopier à la
main ?

Merci Oliv


Bonjour,

Rajoute dans ton fichier excel les lignes suivantes

Workbooks.Open ("Toto.xls")
Workbooks("Toto.xls").VBProject.VBComponents("ThisWorkbook").CodeModule.AddFromFile
("C:code.txt")
Workbooks("Toto.xls").Close savechanges:=True

En changeant, bien évidemment les noms de fichiers et en mettant dans
ton fichier texte le code de ta procédure Private Sub
WorkSheet_Change(ByVal Target As Range)




Avatar
OnE
Re,

Dans ce cas faire une procédure de modification en rappelant les
fichiers générés et utiliser la methode
DeleteLines ligne_de_debut, nombre_de_lignes_à_supprimer
avant de réutiliser la méthode AddFromFile

Mais je crois surtout qu'Oliv cherchait une bidouille pour ne pas avoir
à faire un copier collé sur plus de cent fichiers, ce que je comprends
volontiers :)

Salut.

C'est une très bonne technique...

Mais attention à la mise à jour des macros, car il ne suffit pas de
réinjecter un nouveau fichier texte, puisque le nom de la macro
évènementielle existera déjà, entraînant un plantage d'Excel à
l'exécution...

Cela étant, Oliv peut voir que c'est l'objet vbproject qui est utilisé. A
partir de là, il y a déjà moyen de s'en tirer pour apporter une modif à la
macro...


Ok?




Avatar
Pierre Fauconnier
Mais je crois surtout qu'Oliv cherchait une bidouille pour ne pas avoir à
faire un copier collé sur plus de cent fichiers, ce que je comprends
volontiers :)


Je comprends aussi.
Mais ta méthode d'injecter le fichier texte est une bonne idée pour injecter
de nouvelles procédures. Plus simples que la mienne qui consistait à mettre
les lignes du code à injecter en dur dans le code de la macro...

Bonne soirée

Pierre

"OnE" a écrit dans le message de news:
%
Re,

Dans ce cas faire une procédure de modification en rappelant les fichiers
générés et utiliser la methode
DeleteLines ligne_de_debut, nombre_de_lignes_à_supprimer
avant de réutiliser la méthode AddFromFile

Mais je crois surtout qu'Oliv cherchait une bidouille pour ne pas avoir à
faire un copier collé sur plus de cent fichiers, ce que je comprends
volontiers :)

Salut.

C'est une très bonne technique...

Mais attention à la mise à jour des macros, car il ne suffit pas de
réinjecter un nouveau fichier texte, puisque le nom de la macro
évènementielle existera déjà, entraînant un plantage d'Excel à
l'exécution...

Cela étant, Oliv peut voir que c'est l'objet vbproject qui est utilisé. A
partir de là, il y a déjà moyen de s'en tirer pour apporter une modif à
la macro...


Ok?