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

VBA et Références

5 réponses
Avatar
Patrick
Bonjour,

J'ai créé un fichier Excel que j'ai enregistré en XLA dans lequel j'ai mis
une série de classes, de fonctions et de procédures que je souhaite utiliser
dans d'autres fichiers. Donc je mets ce fichier en référence dans les autres
et je peux facilement utiliser les classes, les fonctions et les procédures
comme quand on ajoute n'importe quelle autre référence (Word, Outlook, ADO,
...).

Mon problème est la gestion du fichier XLA car :
1) Si le fichier XLA n'est pas mis en références les macros des autres
fichiers ne peuvent pas être compilées (c'est un peu normal).
2) On ne peut pas fermer un fichier utilisé en référence.
3) Quand un fichier en utilise un autre en référence, le fichier en
référence s'ouvre automatiquement quand le 1er est ouvert. Le fichier XLA
s'ouvre en lecture/écriture alors que, idéalement, il faudrait qu'il soit
ouvert en lecture seule.
4) Si on ferme le fichier qui utilise le fichier XLA en référence, le XLA
reste ouvert alors que j'aimerais pouvoir fermer ce fichier XLA pour ne pas
utiliser des ressources inutilement.

Ma question est donc de savoir si vous pensez que ce soit une bonne idée de
faire comme cela (de mon côté l'intéret est que cela évite d'écrire du code
identique) et si vous avez une idée pour que le tout soit fait de façon
pratique et efficace.

Un grand merci pour votre aide.

--
Patrick

5 réponses

Avatar
Papyjac
Bonjour Patrick,

Personnelement je n'utilise jamais cette technique, sauf :
1. lorsqu'il s'agit d'utiliser des fonctions développée par quelqu'un
d'autre
2. lorsqu'il s'agit d'utiliser des fonctions développée moi-même, et que
livrerai à quelqu'un d'autre de manière unitaire

Je range toutes mes fonctions utilitaires dans un module spécifique, je
l'exporte en lieu sur, et je l'importe dans chaque application qui en a
besoin.

Je distingue cepedant 3 types de Modules utilitaires :
1. Les modules généraux, par exemple, une fonction de gestion des erreurs
2. Les modules spécifiques d'une nature de fonction, par exemple la gestion
des graphes : Je ne le mets que si mon application traite des graphes
3. Les modules de gestion de configuration, c'est la partie la plus
technique, qui participe au clonage des applications, sous différente
version utilisateur

Le module 1 est toujours présent, il peut y avoir plusieurs modules 2 ou
aucun, Le module 3 est présent que si je dois effectuer une livraison à
quelqu'un.

Donc, depuis plus de 10 ans, je n'ai jamais utilisé les références pour
accéder à mes propres fonctions

PS 1 : Je pratique la technique des XLA, dans ce cas j'utilise un module 3,
car je me fais une livraison à moi-même. C'est à dire que je clone le
classeur XLS et XLA

PS 2 : naturellement, pour basculer en XLA, le classeur ne dois contenir
aucune donnée. C'est une norme que j'ai pris, je ne mélange jamais le code
est les données. cela facilement la maintenance des composants que tu
livres.

PS 3 : J'ai buté comme toi au début de ce type de question, et il y a encore
d'autres questions....


--
P a p y j a c




"Patrick" a écrit dans le message de
news:
Bonjour,

J'ai créé un fichier Excel que j'ai enregistré en XLA dans lequel j'ai mis
une série de classes, de fonctions et de procédures que je souhaite
utiliser
dans d'autres fichiers. Donc je mets ce fichier en référence dans les
autres
et je peux facilement utiliser les classes, les fonctions et les
procédures
comme quand on ajoute n'importe quelle autre référence (Word, Outlook,
ADO,
...).

Mon problème est la gestion du fichier XLA car :
1) Si le fichier XLA n'est pas mis en références les macros des autres
fichiers ne peuvent pas être compilées (c'est un peu normal).
2) On ne peut pas fermer un fichier utilisé en référence.
3) Quand un fichier en utilise un autre en référence, le fichier en
référence s'ouvre automatiquement quand le 1er est ouvert. Le fichier XLA
s'ouvre en lecture/écriture alors que, idéalement, il faudrait qu'il soit
ouvert en lecture seule.
4) Si on ferme le fichier qui utilise le fichier XLA en référence, le XLA
reste ouvert alors que j'aimerais pouvoir fermer ce fichier XLA pour ne
pas
utiliser des ressources inutilement.

Ma question est donc de savoir si vous pensez que ce soit une bonne idée
de
faire comme cela (de mon côté l'intéret est que cela évite d'écrire du
code
identique) et si vous avez une idée pour que le tout soit fait de façon
pratique et efficace.

Un grand merci pour votre aide.

--
Patrick


Avatar
LSteph
Bonjour,

Outre ton idée, on pourrait rappeler d'abord que:

Si ce n'est pas pour distribuer on peut plus simplement
mettre les macros communes aux classeurs dans le perso.xls
qui lui est ouvert et fermé par excel, sans avoir à s'en soucier;

sinon au lieu de le passer en référence tu peux aussi
utiliser le
Workbook_open des classeurs concernés et addins
pour charger le xla selon ce qu'il peut être, soit une macro
complémentaire, idem dans le beforeclose décocher le .xla

cela pourrait règler les soucis que tu as évoqués.

pour une référence de même tu peux utiliser le workbook_open
regarde du coté de .references et .addfromfile


> Ma question est donc de savoir si vous pensez que ce soit une bonne idée

C'est très astucieux déjà d'y avoir pensé et de nous faire partager le
fruit de ton expérimentation.

Tu trouveras probablement d'autres pistes à partir de
http://www.excelabo.net


;-)


@+

--
lSteph


Patrick a écrit :
Bonjour,

J'ai créé un fichier Excel que j'ai enregistré en XLA dans lequel j'ai mis
une série de classes, de fonctions et de procédures que je souhaite utiliser
dans d'autres fichiers. Donc je mets ce fichier en référence dans les autres
et je peux facilement utiliser les classes, les fonctions et les procédures
comme quand on ajoute n'importe quelle autre référence (Word, Outlook, ADO,
...).

Mon problème est la gestion du fichier XLA car :
1) Si le fichier XLA n'est pas mis en références les macros des autres
fichiers ne peuvent pas être compilées (c'est un peu normal).
2) On ne peut pas fermer un fichier utilisé en référence.
3) Quand un fichier en utilise un autre en référence, le fichier en
référence s'ouvre automatiquement quand le 1er est ouvert. Le fichier XLA
s'ouvre en lecture/écriture alors que, idéalement, il faudrait qu'il soit
ouvert en lecture seule.
4) Si on ferme le fichier qui utilise le fichier XLA en référence, le XLA
reste ouvert alors que j'aimerais pouvoir fermer ce fichier XLA pour ne pas
utiliser des ressources inutilement.

Ma question est donc de savoir si vous pensez que ce soit une bonne idée de
faire comme cela (de mon côté l'intéret est que cela évite d'écrire du code
identique) et si vous avez une idée pour que le tout soit fait de façon
pratique et efficace.

Un grand merci pour votre aide.



Avatar
LSteph
..petite précision toutefois sur addins.add
tu peux ajouter ainsi à la liste des macrs complémentaires dans le open
en revanche pour le beforeclose
il n'y a pas de propriété .delete ou remove
donc tu devra en fait traiter comme un classeur normal
et fermer avec
workbooks("gnagna.xla").close

'lSteph

LSteph a écrit :
Bonjour,

Outre ton idée, on pourrait rappeler d'abord que:

Si ce n'est pas pour distribuer on peut plus simplement
mettre les macros communes aux classeurs dans le perso.xls
qui lui est ouvert et fermé par excel, sans avoir à s'en soucier;

sinon au lieu de le passer en référence tu peux aussi
utiliser le
Workbook_open des classeurs concernés et addins
pour charger le xla selon ce qu'il peut être, soit une macro
complémentaire, idem dans le beforeclose décocher le .xla

cela pourrait règler les soucis que tu as évoqués.

pour une référence de même tu peux utiliser le workbook_open
regarde du coté de .references et .addfromfile


> Ma question est donc de savoir si vous pensez que ce soit une bonne idée

C'est très astucieux déjà d'y avoir pensé et de nous faire partager le
fruit de ton expérimentation.

Tu trouveras probablement d'autres pistes à partir de
http://www.excelabo.net


;-)


@+

--
lSteph


Patrick a écrit :
Bonjour,

J'ai créé un fichier Excel que j'ai enregistré en XLA dans lequel j'ai
mis une série de classes, de fonctions et de procédures que je
souhaite utiliser dans d'autres fichiers. Donc je mets ce fichier en
référence dans les autres et je peux facilement utiliser les classes,
les fonctions et les procédures comme quand on ajoute n'importe quelle
autre référence (Word, Outlook, ADO, ...).

Mon problème est la gestion du fichier XLA car :
1) Si le fichier XLA n'est pas mis en références les macros des autres
fichiers ne peuvent pas être compilées (c'est un peu normal).
2) On ne peut pas fermer un fichier utilisé en référence.
3) Quand un fichier en utilise un autre en référence, le fichier en
référence s'ouvre automatiquement quand le 1er est ouvert. Le fichier
XLA s'ouvre en lecture/écriture alors que, idéalement, il faudrait
qu'il soit ouvert en lecture seule.
4) Si on ferme le fichier qui utilise le fichier XLA en référence, le
XLA reste ouvert alors que j'aimerais pouvoir fermer ce fichier XLA
pour ne pas utiliser des ressources inutilement.

Ma question est donc de savoir si vous pensez que ce soit une bonne
idée de faire comme cela (de mon côté l'intéret est que cela évite
d'écrire du code identique) et si vous avez une idée pour que le tout
soit fait de façon pratique et efficace.

Un grand merci pour votre aide.





Avatar
Patrick
Bonjour,

Merci pour ton expérience. Je suis tout à fait d'accord avec tout ce que tu
as écrit. Le fichier XLA que j'ai fait ne contient que des macors et aucune
donnée. Ma situation fait que j'utilise très souvent les mêmes macros dans
beaucoup de fichiers (on "adore" Excel à mon boulot, et c'est peu dire) et
parfois je trouve pénible de recopier un à un tous les modules et les classes
dont j'ai besoin, sans parler du besoin de mettre les bonnes références (ADO,
...).

Je vais continuer ma réflexion et mes tests.

--
Patrick


"Papyjac" wrote:

Bonjour Patrick,

Personnelement je n'utilise jamais cette technique, sauf :
1. lorsqu'il s'agit d'utiliser des fonctions développée par quelqu'un
d'autre
2. lorsqu'il s'agit d'utiliser des fonctions développée moi-même, et que
livrerai à quelqu'un d'autre de manière unitaire

Je range toutes mes fonctions utilitaires dans un module spécifique, je
l'exporte en lieu sur, et je l'importe dans chaque application qui en a
besoin.

Je distingue cepedant 3 types de Modules utilitaires :
1. Les modules généraux, par exemple, une fonction de gestion des erreurs
2. Les modules spécifiques d'une nature de fonction, par exemple la gestion
des graphes : Je ne le mets que si mon application traite des graphes
3. Les modules de gestion de configuration, c'est la partie la plus
technique, qui participe au clonage des applications, sous différente
version utilisateur

Le module 1 est toujours présent, il peut y avoir plusieurs modules 2 ou
aucun, Le module 3 est présent que si je dois effectuer une livraison à
quelqu'un.

Donc, depuis plus de 10 ans, je n'ai jamais utilisé les références pour
accéder à mes propres fonctions

PS 1 : Je pratique la technique des XLA, dans ce cas j'utilise un module 3,
car je me fais une livraison à moi-même. C'est à dire que je clone le
classeur XLS et XLA

PS 2 : naturellement, pour basculer en XLA, le classeur ne dois contenir
aucune donnée. C'est une norme que j'ai pris, je ne mélange jamais le code
est les données. cela facilement la maintenance des composants que tu
livres.

PS 3 : J'ai buté comme toi au début de ce type de question, et il y a encore
d'autres questions....


--
P a p y j a c




"Patrick" a écrit dans le message de
news:
> Bonjour,
>
> J'ai créé un fichier Excel que j'ai enregistré en XLA dans lequel j'ai mis
> une série de classes, de fonctions et de procédures que je souhaite
> utiliser
> dans d'autres fichiers. Donc je mets ce fichier en référence dans les
> autres
> et je peux facilement utiliser les classes, les fonctions et les
> procédures
> comme quand on ajoute n'importe quelle autre référence (Word, Outlook,
> ADO,
> ...).
>
> Mon problème est la gestion du fichier XLA car :
> 1) Si le fichier XLA n'est pas mis en références les macros des autres
> fichiers ne peuvent pas être compilées (c'est un peu normal).
> 2) On ne peut pas fermer un fichier utilisé en référence.
> 3) Quand un fichier en utilise un autre en référence, le fichier en
> référence s'ouvre automatiquement quand le 1er est ouvert. Le fichier XLA
> s'ouvre en lecture/écriture alors que, idéalement, il faudrait qu'il soit
> ouvert en lecture seule.
> 4) Si on ferme le fichier qui utilise le fichier XLA en référence, le XLA
> reste ouvert alors que j'aimerais pouvoir fermer ce fichier XLA pour ne
> pas
> utiliser des ressources inutilement.
>
> Ma question est donc de savoir si vous pensez que ce soit une bonne idée
> de
> faire comme cela (de mon côté l'intéret est que cela évite d'écrire du
> code
> identique) et si vous avez une idée pour que le tout soit fait de façon
> pratique et efficace.
>
> Un grand merci pour votre aide.
>
> --
> Patrick



Avatar
Patrick
Bonjour,

Merci pour tes commentaires. Je suis d'accord avec.

En fait la raison pour laquelle j'essaie cette méthode est double :
- Si le fichier XLA contient toutes les références nécessaires (ADO, ...),
en le mettant lui-même comme référence dans un projet VBA, ce projet n'a pas
besoin d'ajouter plein de références aux biliothèques nécessaires. Tout ce
fait dans le XLA, le projet a juste à utiliser les classes, fonctions et
procédures qui se chargeront de l'interface. Donc l'écriture du projet est
allégée et surtout il a accès, avec une seule référence, à plein de
possibilité. En bout de ligne, le projet est moins volumineux puisqu'il
contient moins de code.
- Nous créons beaucoup de fichiers Excel avec des macros identiques, entre
autres pour accéder à la base de données de notre système comptable. Alors,
au bout d'un moment, on recopie souvent les mêmes bouts de code et c'est
lassant.

Enfin... je vais continuer mes tests et expérimentations.

Cordialement.

--
Patrick


"LSteph" wrote:

Bonjour,

Outre ton idée, on pourrait rappeler d'abord que:

Si ce n'est pas pour distribuer on peut plus simplement
mettre les macros communes aux classeurs dans le perso.xls
qui lui est ouvert et fermé par excel, sans avoir à s'en soucier;

sinon au lieu de le passer en référence tu peux aussi
utiliser le
Workbook_open des classeurs concernés et addins
pour charger le xla selon ce qu'il peut être, soit une macro
complémentaire, idem dans le beforeclose décocher le .xla

cela pourrait règler les soucis que tu as évoqués.

pour une référence de même tu peux utiliser le workbook_open
regarde du coté de .references et .addfromfile


> Ma question est donc de savoir si vous pensez que ce soit une bonne idée

C'est très astucieux déjà d'y avoir pensé et de nous faire partager le
fruit de ton expérimentation.

Tu trouveras probablement d'autres pistes à partir de
http://www.excelabo.net


;-)


@+

--
lSteph


Patrick a écrit :
> Bonjour,
>
> J'ai créé un fichier Excel que j'ai enregistré en XLA dans lequel j'ai mis
> une série de classes, de fonctions et de procédures que je souhaite utiliser
> dans d'autres fichiers. Donc je mets ce fichier en référence dans les autres
> et je peux facilement utiliser les classes, les fonctions et les procédures
> comme quand on ajoute n'importe quelle autre référence (Word, Outlook, ADO,
> ...).
>
> Mon problème est la gestion du fichier XLA car :
> 1) Si le fichier XLA n'est pas mis en références les macros des autres
> fichiers ne peuvent pas être compilées (c'est un peu normal).
> 2) On ne peut pas fermer un fichier utilisé en référence.
> 3) Quand un fichier en utilise un autre en référence, le fichier en
> référence s'ouvre automatiquement quand le 1er est ouvert. Le fichier XLA
> s'ouvre en lecture/écriture alors que, idéalement, il faudrait qu'il soit
> ouvert en lecture seule.
> 4) Si on ferme le fichier qui utilise le fichier XLA en référence, le XLA
> reste ouvert alors que j'aimerais pouvoir fermer ce fichier XLA pour ne pas
> utiliser des ressources inutilement.
>
> Ma question est donc de savoir si vous pensez que ce soit une bonne idée de
> faire comme cela (de mon côté l'intéret est que cela évite d'écrire du code
> identique) et si vous avez une idée pour que le tout soit fait de façon
> pratique et efficace.
>
> Un grand merci pour votre aide.
>