OVH Cloud OVH Cloud

Ecrire du VBA avec du VBA

2 réponses
Avatar
Pounet95
Bonjour à toutes et à tous, et tant qu'il est encore temps
BONNE ANNEE

XL2000 / Windows2000 Pro et XL2000 / XP Pro
A partir d'une procédure dans un premier classeur, j'en créé un second
dans lequel je voudrais incorporer un module standard avec une procédure.
La procédure en question est un peu longue et je voudrais savoir :
1) s'il est possible de la stocker dans un fichier texte ( .txt, ou .bas par
export)
2) comment créer le module standard dans le nouveau classeur (par VBA ),
3) comment importer le dit fichier dans ce module ( toujours par VBA )

Je ne maitrise pas du tout la syntaxe VBProject.VBComponents
Merci de vos réponses

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/

2 réponses

Avatar
anomymousA
bonjour,

Mes meilleurs voeux à toi et aux autres contributeurs ou lecteurs de ce forum.

Pour répondre à ta question, il me semble qu'un tour sur le site de Frédéric
Sigonneau (p.e) ou sur Excelabo que tu cites devrait t'apporter toutes les
réponses que tu souhaites. Si ce n'est pas le cas, ce dont je doute car ayant
parcouru ces 2 sites , j'y ai à peu près trouvé toutes les réponses à ces
questions, reviens sur ce forum.

Pour t'éclairer cependant sur les concepts eux-mêmes, je te propose les
quelques explications suivants.

1: Pour pouvoir accéder à la programmation par programmation, il te faut
établir une référence à Microsoft Visual Basic for Applications Extensibility
5.3 ce que tu peux faire dans Outils/références.

2: L'objet VBProject
Cet objet contient tous les aspects "programmation" d'un classeur, dont les
userforms, les modules standard, les modules de classe et le code qui
sous-tend chaque feuille de calcul et le classuer lui-même.
Il y a 1 objet VBProject par classeur.

3:l'objet VBComponent
les userforms, les modules standard, les modules de code qui sous-tendent
les feuilles de calcul et le classeur sont tous des objets VBComponent.p.e si
tu veux atteindre le VBComponent pour le code qui sous-tend le classeur (où
du code peut être écrit pour passer dans les evenements du classeur) tu peux
utiliser le code suivant:

Dim obVBC as VBIDE.component

with workbooks("toto.xls")
set obVBC= .VBProject.BVComponents(.codeName)
end with

(ici codename spécifie le nom souvent identifié comme Thisworkbook mais qui
peut avoir un autre nom tout comme une feuille peut avoir un nom d'onglet et
un nom réel différent du nom d'onglet)

Il y a autant de VBComponent que de feuilles ou userforms ou modules de
classe ou standard ou le classeur lui-même.
4:L'objet Codemodule
Tout le code VBA pour un VBComponent est contenu dans l'objet Codemodule. On
peut donc une fois qu'on y a accédé y faire tout ce qu'on veut (effacer,
rajouter, modifier) par programmation.
Il y a 1 seul codemodule par VBComponent , mais il peut y avoir bien sur
plusieurs procédures (Sub, functions, Property) par codemodule.
Tu peux tester la fonction suivante pour te rendre compte de l'existence ou
pas d'une procédure dans un Codemodule.

Function ProcedureExists(ProcedureName As String, ModuleName As String) As
Boolean

On Error Resume Next

ProcedureExists =
ActiveWorkbook.VBProject.VBComponents(ModuleName).CodeModule.Find(ProcedureName, 1, 1, -1, -1, True, False)

End Function

A+


Bonjour à toutes et à tous, et tant qu'il est encore temps
BONNE ANNEE

XL2000 / Windows2000 Pro et XL2000 / XP Pro
A partir d'une procédure dans un premier classeur, j'en créé un second
dans lequel je voudrais incorporer un module standard avec une procédure.
La procédure en question est un peu longue et je voudrais savoir :
1) s'il est possible de la stocker dans un fichier texte ( .txt, ou .bas par
export)
2) comment créer le module standard dans le nouveau classeur (par VBA ),
3) comment importer le dit fichier dans ce module ( toujours par VBA )

Je ne maitrise pas du tout la syntaxe VBProject.VBComponents
Merci de vos réponses

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/




Avatar
Pounet95
Merci,
Effectivement sur le site de Frédéric Sigonneau, j'ai trouvé mon bonheur.
Il suffisait de regarder dans le bon répertoire !
Voilà ce que c'est de lire en diagonale... :o(((
Et comme je ne trouve que rarement le mot juste pour la recherche sur
Excelabo, je n'y suis pas allé voir (mais il ne faut pas le répeter car je
vais me faire gronder par Misange, et quand elle se fâche ......)
S'il n'y a pas de marque déposée, je crois que je vais changer mon pseudo
en un truc du genre iperpadoue, toutafenul, ikonerien, etc ....

Bonne journée
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/

"anomymousA" a écrit dans le message
de news:
bonjour,

Mes meilleurs voeux à toi et aux autres contributeurs ou lecteurs de ce
forum.

Pour répondre à ta question, il me semble qu'un tour sur le site de
Frédéric
Sigonneau (p.e) ou sur Excelabo que tu cites devrait t'apporter toutes les
réponses que tu souhaites. Si ce n'est pas le cas, ce dont je doute car
ayant
parcouru ces 2 sites , j'y ai à peu près trouvé toutes les réponses à ces
questions, reviens sur ce forum.

Pour t'éclairer cependant sur les concepts eux-mêmes, je te propose les
quelques explications suivants.

1: Pour pouvoir accéder à la programmation par programmation, il te faut
établir une référence à Microsoft Visual Basic for Applications
Extensibility
5.3 ce que tu peux faire dans Outils/références.

2: L'objet VBProject
Cet objet contient tous les aspects "programmation" d'un classeur, dont
les
userforms, les modules standard, les modules de classe et le code qui
sous-tend chaque feuille de calcul et le classuer lui-même.
Il y a 1 objet VBProject par classeur.

3:l'objet VBComponent
les userforms, les modules standard, les modules de code qui sous-tendent
les feuilles de calcul et le classeur sont tous des objets VBComponent.p.e
si
tu veux atteindre le VBComponent pour le code qui sous-tend le classeur
(où
du code peut être écrit pour passer dans les evenements du classeur) tu
peux
utiliser le code suivant:

Dim obVBC as VBIDE.component

with workbooks("toto.xls")
set obVBC= .VBProject.BVComponents(.codeName)
end with

(ici codename spécifie le nom souvent identifié comme Thisworkbook mais
qui
peut avoir un autre nom tout comme une feuille peut avoir un nom d'onglet
et
un nom réel différent du nom d'onglet)

Il y a autant de VBComponent que de feuilles ou userforms ou modules de
classe ou standard ou le classeur lui-même.
4:L'objet Codemodule
Tout le code VBA pour un VBComponent est contenu dans l'objet Codemodule.
On
peut donc une fois qu'on y a accédé y faire tout ce qu'on veut (effacer,
rajouter, modifier) par programmation.
Il y a 1 seul codemodule par VBComponent , mais il peut y avoir bien sur
plusieurs procédures (Sub, functions, Property) par codemodule.
Tu peux tester la fonction suivante pour te rendre compte de l'existence
ou
pas d'une procédure dans un Codemodule.

Function ProcedureExists(ProcedureName As String, ModuleName As String) As
Boolean

On Error Resume Next

ProcedureExists > ActiveWorkbook.VBProject.VBComponents(ModuleName).CodeModule.Find(ProcedureName,
1, 1, -1, -1, True, False)

End Function

A+


Bonjour à toutes et à tous, et tant qu'il est encore temps
BONNE ANNEE

XL2000 / Windows2000 Pro et XL2000 / XP Pro
A partir d'une procédure dans un premier classeur, j'en créé un second
dans lequel je voudrais incorporer un module standard avec une procédure.
La procédure en question est un peu longue et je voudrais savoir :
1) s'il est possible de la stocker dans un fichier texte ( .txt, ou .bas
par
export)
2) comment créer le module standard dans le nouveau classeur (par VBA ),
3) comment importer le dit fichier dans ce module ( toujours par VBA )

Je ne maitrise pas du tout la syntaxe VBProject.VBComponents
Merci de vos réponses

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/