OVH Cloud OVH Cloud

Macro pour MS VB for Applications Extensibility

19 réponses
Avatar
ManBas
Bonjour,
Il y a quelques mois le forum m'a expliqué la solution au problème de
bibliothèque (VBE6EXT.OLB) Microsoft Visual Basic for Applications
Extensibility déplacée dans le dossier VBA6 sur XL2000 (au lieu de VBA sur
XL97):
C:\Program Files\Fichiers communs\Microsoft Shared\VBA\VBA6
J'ai franchi cette étape en orientant le bon chemin, à partir des
références, sur XL97 (le fichier est initialement enregistré sur XL2000).
Mais il est fastidieux de devoir refaire la manoeuvre de temps en temps, car
le "chemin" est parfois conservé, parfois oublié, lorsque je retravaille
dans XL2000. De plus le fichier est téléchargé par le réseau sur des postes
divers, exploitant indifferemment 97 ou 2000.
Il m'avais été suggéré la possibilité d'indiquer ce chemin par macro selon
que le système était XL97 ou XL2000.
Je ne sais pas faire ça.
Est-ce que quelqu'un voudrait bien m'écrire le code et m'expliquer où le
placer?
Merci infiniment pour votre aide.

9 réponses

1 2
Avatar
Clément Marcotte
Bonjour,

J'ai maintenant 2 solutions qui me semblent trés différentes (vues
"de loin"

avec l'oeil d'un non-programmeur).
Peux-tu m'expliquer (sobrement) la différence (sur le principe)?


La solution originale, modifiée par Philippe, permet d'utiliser un
chemin standard, découlant de la version d'office, et plus ou moins
choisi et imposé par Microsoft; compte tenu que peu de particuliers
modifient les paramètres prévus dans les programmes d'installation.

Par contre, je ne sais pas dans quelle mesure les entreprises se
conforment aux choix standards et ne modifient pas ces chemins, en
fonction de leurs politiques ou de leurs besoins.

Par contre, ma solution, permet de retrouver le fichier, et son chemin
d'accès, sur n'importe quel ordinateur, peu importe les choix
d'installation. Par contre, tel qu'il est écrit actuellement, il ne
tient pas compte de la possibilité, bien réelle, que le nom du fichier
change d'une version d'Office à une autre. De plus, dans l'état actuel
des choses, il prend pour acquis que le fichier est sur le disque c:.
Pour être aussi catholiques que le pape, il manquerait un système pour
vérifier sur les autres disques que c:, si jamais le fichier est
ailleurs que sur C:

En fait, il serait possible, je dirais même souhaitable de combiner le
deux solutions. La mienne "passerait" avant celle de Philippe pour
trouver le chemin exact, et le transmettre à la solution de Philippe.

Ensuite, il resterait, à tenir compte des variations de noms d'une
version à l'autre, mais cela, à première vue, me semble un peu plus
ardu.

Avatar
ManBas
Infiniment merci pour ces explications: ça c'est pédagogique!
A bientôt +++

"Clément Marcotte" a écrit dans le message
de news: %
Bonjour,

J'ai maintenant 2 solutions qui me semblent trés différentes (vues
"de loin"

avec l'oeil d'un non-programmeur).
Peux-tu m'expliquer (sobrement) la différence (sur le principe)?


La solution originale, modifiée par Philippe, permet d'utiliser un
chemin standard, découlant de la version d'office, et plus ou moins
choisi et imposé par Microsoft; compte tenu que peu de particuliers
modifient les paramètres prévus dans les programmes d'installation.

Par contre, je ne sais pas dans quelle mesure les entreprises se
conforment aux choix standards et ne modifient pas ces chemins, en
fonction de leurs politiques ou de leurs besoins.

Par contre, ma solution, permet de retrouver le fichier, et son chemin
d'accès, sur n'importe quel ordinateur, peu importe les choix
d'installation. Par contre, tel qu'il est écrit actuellement, il ne
tient pas compte de la possibilité, bien réelle, que le nom du fichier
change d'une version d'Office à une autre. De plus, dans l'état actuel
des choses, il prend pour acquis que le fichier est sur le disque c:.
Pour être aussi catholiques que le pape, il manquerait un système pour
vérifier sur les autres disques que c:, si jamais le fichier est
ailleurs que sur C:

En fait, il serait possible, je dirais même souhaitable de combiner le
deux solutions. La mienne "passerait" avant celle de Philippe pour
trouver le chemin exact, et le transmettre à la solution de Philippe.

Ensuite, il resterait, à tenir compte des variations de noms d'une
version à l'autre, mais cela, à première vue, me semble un peu plus
ardu.





Avatar
Clément Marcotte
Bonjour,

As tu eu l'occasion de vérifier si la bibliothèque "Extensibility"
d'Office 2000 fonctionne avec Excel 97 ?

Entre Excel 97 et Excel 2000, la bibliothèque a été enrichie et elle a
changé de nom et de nom de fichier. Va peut-être falloir que tu
regardes cela de près.


"ManBas" a écrit dans le message de
news:%
Bonjour,
Il y a quelques mois le forum m'a expliqué la solution au problème
de

bibliothèque (VBE6EXT.OLB) Microsoft Visual Basic for Applications
Extensibility déplacée dans le dossier VBA6 sur XL2000 (au lieu de
VBA sur

XL97):
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6
J'ai franchi cette étape en orientant le bon chemin, à partir des
références, sur XL97 (le fichier est initialement enregistré sur
XL2000).

Mais il est fastidieux de devoir refaire la manoeuvre de temps en
temps, car

le "chemin" est parfois conservé, parfois oublié, lorsque je
retravaille

dans XL2000. De plus le fichier est téléchargé par le réseau sur des
postes

divers, exploitant indifferemment 97 ou 2000.
Il m'avais été suggéré la possibilité d'indiquer ce chemin par macro
selon

que le système était XL97 ou XL2000.
Je ne sais pas faire ça.
Est-ce que quelqu'un voudrait bien m'écrire le code et m'expliquer
où le

placer?
Merci infiniment pour votre aide.




Avatar
Clément Marcotte
Bonjour,

Puisque les deux versions (5.3 ==> 2000 +, 5.0 = => 97)de la
bibliothèque ont le même identificateur unique (GUID (Global Unique
IDentifier)), il n'est pas nécessaire de se badrer des noms et des
chemins d'accès. Il suffit de charger la référence en partant du GUID
qui est {0002E157-0000-0000-C000-000000000046}. IL faut aussi tenir
compte des numéros de version de la bibliothèque. Au lieu de tester la
version d'Excel, comme le faisait Philippe, je passe par une procédure
de compilation conditionnelle en fonction de la version de VBA.

Le goto dejafait sert à se débarasser du message d'horreur quand la
référence est déjà cochée.

Sub ajoutereferenceextensibility()
On Error GoTo Dejafait
#If VBA6 Then
'Excel 2000 et +
'Version 5.3
ActiveWorkbook.VBProject.References.AddFromGuid
"{0002E157-0000-0000-C000-000000000046}", 5, 3
#Else
'Excel 97
'Version 5.0
ActiveWorkbook.VBProject.References.AddFromGuid
"{0002E157-0000-0000-C000-000000000046}", 5, 0
#End If
Dejafait:
End Sub

"ManBas" a écrit dans le message de
news:%
Bonjour,
Il y a quelques mois le forum m'a expliqué la solution au problème
de

bibliothèque (VBE6EXT.OLB) Microsoft Visual Basic for Applications
Extensibility déplacée dans le dossier VBA6 sur XL2000 (au lieu de
VBA sur

XL97):
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6
J'ai franchi cette étape en orientant le bon chemin, à partir des
références, sur XL97 (le fichier est initialement enregistré sur
XL2000).

Mais il est fastidieux de devoir refaire la manoeuvre de temps en
temps, car

le "chemin" est parfois conservé, parfois oublié, lorsque je
retravaille

dans XL2000. De plus le fichier est téléchargé par le réseau sur des
postes

divers, exploitant indifferemment 97 ou 2000.
Il m'avais été suggéré la possibilité d'indiquer ce chemin par macro
selon

que le système était XL97 ou XL2000.
Je ne sais pas faire ça.
Est-ce que quelqu'un voudrait bien m'écrire le code et m'expliquer
où le

placer?
Merci infiniment pour votre aide.




Avatar
Michel Pierron
Bonjour Clément;
Il eut été beaucoup plus sioux de se passer de cette référence qui ne sert
pas à grand chose en incorporant directement la valeur des variables
auquelles cette référence fait appel directement dans la ou les procédures.
MP

"Clément Marcotte" a écrit dans le message
de news:
Bonjour,

Puisque les deux versions (5.3 ==> 2000 +, 5.0 = => 97)de la
bibliothèque ont le même identificateur unique (GUID (Global Unique
IDentifier)), il n'est pas nécessaire de se badrer des noms et des
chemins d'accès. Il suffit de charger la référence en partant du GUID
qui est {0002E157-0000-0000-C000-000000000046}. IL faut aussi tenir
compte des numéros de version de la bibliothèque. Au lieu de tester la
version d'Excel, comme le faisait Philippe, je passe par une procédure
de compilation conditionnelle en fonction de la version de VBA.

Le goto dejafait sert à se débarasser du message d'horreur quand la
référence est déjà cochée.

Sub ajoutereferenceextensibility()
On Error GoTo Dejafait
#If VBA6 Then
'Excel 2000 et +
'Version 5.3
ActiveWorkbook.VBProject.References.AddFromGuid
"{0002E157-0000-0000-C000-000000000046}", 5, 3
#Else
'Excel 97
'Version 5.0
ActiveWorkbook.VBProject.References.AddFromGuid
"{0002E157-0000-0000-C000-000000000046}", 5, 0
#End If
Dejafait:
End Sub

"ManBas" a écrit dans le message de
news:%
Bonjour,
Il y a quelques mois le forum m'a expliqué la solution au problème
de

bibliothèque (VBE6EXT.OLB) Microsoft Visual Basic for Applications
Extensibility déplacée dans le dossier VBA6 sur XL2000 (au lieu de
VBA sur

XL97):
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6
J'ai franchi cette étape en orientant le bon chemin, à partir des
références, sur XL97 (le fichier est initialement enregistré sur
XL2000).

Mais il est fastidieux de devoir refaire la manoeuvre de temps en
temps, car

le "chemin" est parfois conservé, parfois oublié, lorsque je
retravaille

dans XL2000. De plus le fichier est téléchargé par le réseau sur des
postes

divers, exploitant indifferemment 97 ou 2000.
Il m'avais été suggéré la possibilité d'indiquer ce chemin par macro
selon

que le système était XL97 ou XL2000.
Je ne sais pas faire ça.
Est-ce que quelqu'un voudrait bien m'écrire le code et m'expliquer
où le

placer?
Merci infiniment pour votre aide.







Avatar
ManBas
Oui, ça y est ça fonctionne sur XL97 à partir d'un fichier crée sur XL2000,
sans que je sois contraint de manipuler les références sur le poste doté de
97.
Comme tu me l'as suggéré j'ai envisagé de chainer les 2 procédures (mais je
ne l'ai pas encore fait, l'urgence n'y étant plus).
Effectivement j'ai traité non pas 1 mais 2 bibliothèques car les noms sont
différents entre 97 et 2000 (VBEEXT1.OLB pour 97).
J'ai aussi supprimé le MsgBox "Fichier non trouvé" qui se présente dans tous
les cas alors le fonctionnement VB est bien établi.
Bon, je dis ce que j'ai vécu, mais j'entraperçois ton message suivant et ...
Oh pu...gg! comme on dit chez nous dans le midi de la France!
A tout de suite.

"Clément Marcotte" a écrit dans le message
de news:
Bonjour,

As tu eu l'occasion de vérifier si la bibliothèque "Extensibility"
d'Office 2000 fonctionne avec Excel 97 ?

Entre Excel 97 et Excel 2000, la bibliothèque a été enrichie et elle a
changé de nom et de nom de fichier. Va peut-être falloir que tu
regardes cela de près.


"ManBas" a écrit dans le message de
news:%
Bonjour,
Il y a quelques mois le forum m'a expliqué la solution au problème
de

bibliothèque (VBE6EXT.OLB) Microsoft Visual Basic for Applications
Extensibility déplacée dans le dossier VBA6 sur XL2000 (au lieu de
VBA sur

XL97):
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6
J'ai franchi cette étape en orientant le bon chemin, à partir des
références, sur XL97 (le fichier est initialement enregistré sur
XL2000).

Mais il est fastidieux de devoir refaire la manoeuvre de temps en
temps, car

le "chemin" est parfois conservé, parfois oublié, lorsque je
retravaille

dans XL2000. De plus le fichier est téléchargé par le réseau sur des
postes

divers, exploitant indifferemment 97 ou 2000.
Il m'avais été suggéré la possibilité d'indiquer ce chemin par macro
selon

que le système était XL97 ou XL2000.
Je ne sais pas faire ça.
Est-ce que quelqu'un voudrait bien m'écrire le code et m'expliquer
où le

placer?
Merci infiniment pour votre aide.







Avatar
ManBas
Je crois que les 2 versions ne cherchent pas le même fichier (voir post
précédent: VBEEXT1.OLB pour 97, VBE6EXT.OLB pour 2000).
Dans une de mes galères pour trouver la solution, j'avais imaginé de copier
un dossier VBA6 et le placer dans le MicrosoftShared/VBA de XL97, mais ça ne
fonctionnait pas.
J'avais omis ce problème dans mon post de demande d'aide.
Puisque les deux versions (5.3 ==> 2000 +, 5.0 = => 97)de la
bibliothèque ont le même identificateur unique...
Est-ce que celà contrarie ta dernière solution ?

Ou je ne comprends pas ce que tu m'explique (car vraiment je n'ai pas le
niveau!)
Merci +++
A bientôt.

"Clément Marcotte" a écrit dans le message
de news:
Bonjour,

Puisque les deux versions (5.3 ==> 2000 +, 5.0 = => 97)de la
bibliothèque ont le même identificateur unique (GUID (Global Unique
IDentifier)), il n'est pas nécessaire de se badrer des noms et des
chemins d'accès. Il suffit de charger la référence en partant du GUID
qui est {0002E157-0000-0000-C000-000000000046}. IL faut aussi tenir
compte des numéros de version de la bibliothèque. Au lieu de tester la
version d'Excel, comme le faisait Philippe, je passe par une procédure
de compilation conditionnelle en fonction de la version de VBA.

Le goto dejafait sert à se débarasser du message d'horreur quand la
référence est déjà cochée.

Sub ajoutereferenceextensibility()
On Error GoTo Dejafait
#If VBA6 Then
'Excel 2000 et +
'Version 5.3
ActiveWorkbook.VBProject.References.AddFromGuid
"{0002E157-0000-0000-C000-000000000046}", 5, 3
#Else
'Excel 97
'Version 5.0
ActiveWorkbook.VBProject.References.AddFromGuid
"{0002E157-0000-0000-C000-000000000046}", 5, 0
#End If
Dejafait:
End Sub

"ManBas" a écrit dans le message de
news:%
Bonjour,
Il y a quelques mois le forum m'a expliqué la solution au problème
de

bibliothèque (VBE6EXT.OLB) Microsoft Visual Basic for Applications
Extensibility déplacée dans le dossier VBA6 sur XL2000 (au lieu de
VBA sur

XL97):
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6
J'ai franchi cette étape en orientant le bon chemin, à partir des
références, sur XL97 (le fichier est initialement enregistré sur
XL2000).

Mais il est fastidieux de devoir refaire la manoeuvre de temps en
temps, car

le "chemin" est parfois conservé, parfois oublié, lorsque je
retravaille

dans XL2000. De plus le fichier est téléchargé par le réseau sur des
postes

divers, exploitant indifferemment 97 ou 2000.
Il m'avais été suggéré la possibilité d'indiquer ce chemin par macro
selon

que le système était XL97 ou XL2000.
Je ne sais pas faire ça.
Est-ce que quelqu'un voudrait bien m'écrire le code et m'expliquer
où le

placer?
Merci infiniment pour votre aide.







Avatar
Clément Marcotte
Bonjour,

Est-ce que celà contrarie ta dernière solution ?


Non

Ou je ne comprends pas ce que tu m'explique (car vraiment je n'ai
pas le

niveau!)


Justement, c'est la "beauté" de la compilation conditionnelle( #if).
Quand on utilise la compilation conditionnelle, on peut lier
l'exécution ou non de certaines intructions à l'existence ou non de
certaines conditions. Dans le cas qui nous préoccupe, la condition de
la compilation est le numéro (la majeure en fait) de la version de VBA
qui est installée. (Version 5 pour Excel 97 et Version 6 pour Excel
2000 et suivants).

Quand c'est la version 6 de VBA qui est installée, c'est cette partie
de la compilation conditionelle qui est réalisée:

#If VBA6 Then
'Excel 2000 et +
'Version 5.3
ActiveWorkbook.VBProject.References.AddFromGuid
"{0002E157-0000-0000-C000-000000000046}", 5, 3



Si la version de VBA est 6, c'est -à-dire que c'est Office 2000, 2002
ou 2003 qui est installé, c'est la version 5.3 (5,3)de la bibliothèque
"Extensibility" qui est sur le système, et qui est chargée.

Si ce n'est pas la version 6 de VBA qui est sur le système, c'est
cette partie de la compilation conditionelle qui est exécutée

#Else
'Excel 97
'Version 5.0
ActiveWorkbook.VBProject.References.AddFromGuid
"{0002E157-0000-0000-C000-000000000046}", 5, 0



Dans ce cas, c'est la version 5.0 de la bibliothèque qui est utilisée
(5, 0 )


Avatar
ManBas
Wow! Trés class!
Mais je te dis que je suis mauvais!
En tout cas j'apprécie +++ tes explications!
Dès que j'aurais un peu de temps (??!) je ferai l'essai avec cette version
et je te tiendrai au courant.
Merci Clément.
A bientôt: mes prochains post seront certainement nunuches devant ta
réponse.

"Clément Marcotte" a écrit dans le message
de news:
Bonjour,

Est-ce que celà contrarie ta dernière solution ?


Non

Ou je ne comprends pas ce que tu m'explique (car vraiment je n'ai
pas le

niveau!)


Justement, c'est la "beauté" de la compilation conditionnelle( #if).
Quand on utilise la compilation conditionnelle, on peut lier
l'exécution ou non de certaines intructions à l'existence ou non de
certaines conditions. Dans le cas qui nous préoccupe, la condition de
la compilation est le numéro (la majeure en fait) de la version de VBA
qui est installée. (Version 5 pour Excel 97 et Version 6 pour Excel
2000 et suivants).

Quand c'est la version 6 de VBA qui est installée, c'est cette partie
de la compilation conditionelle qui est réalisée:

#If VBA6 Then
'Excel 2000 et +
'Version 5.3
ActiveWorkbook.VBProject.References.AddFromGuid
"{0002E157-0000-0000-C000-000000000046}", 5, 3



Si la version de VBA est 6, c'est -à-dire que c'est Office 2000, 2002
ou 2003 qui est installé, c'est la version 5.3 (5,3)de la bibliothèque
"Extensibility" qui est sur le système, et qui est chargée.

Si ce n'est pas la version 6 de VBA qui est sur le système, c'est
cette partie de la compilation conditionelle qui est exécutée

#Else
'Excel 97
'Version 5.0
ActiveWorkbook.VBProject.References.AddFromGuid
"{0002E157-0000-0000-C000-000000000046}", 5, 0



Dans ce cas, c'est la version 5.0 de la bibliothèque qui est utilisée
(5, 0 )






1 2