Vba : gestion de version d'office pour les références (ms word xx.x object library)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 119 fois - Téléchargée 25 fois

Contenu du snippet

Ce tout petit bout de code permet de régler des problèmes de portabilité d'un ordinateur à un autre avec un environnement Office différent, quant il est fait appelle à une reference MS xxxxxxx Object library

Il est adapté pour pouvoir piloter Word depuis Excel, pour les différentes versions de Word de 97 à 2003, mais le principe doit pouvoir être étendu à Excel, Access, etc.

N'ayant pas trouvé de code me convenant jusque là, je vous laisse celui-ci, si vous êtes intéressés

J'y fait appel au lancement de mon application (ici Excel dans WorkBook_Open())

Attention, pour que celà marche, il faut cocher l'option "Faire confiance au projet visual basic" dans Outils -> Macro -> Sécurité -> deuxième onglet, sinon plantage (sécurité qui empêche d'utiliser VBProject).

Voilà, c'est pas du haut niveau mais ça peut éventuellement servir à d'autres grands débutants comme moi

Source / Exemple :


Private Sub gestion_ref()
On Error Resume Next 'Si la référence est déjà installée évite l'erreur qui suit
Dim x As Object
Dim word_object As Object

'Efface les references "Broken"
For Each x In ThisWorkbook.VBProject.References
    If x.IsBroken = True Then ThisWorkbook.VBProject.References.Remove x
Next x

Set x = ThisWorkbook.VBProject.References

Set word_object = CreateObject("word.application") 'On recherche la version de Word installée
If word_object.Version = "8.0" Then 'Word 97
    x.AddFromFile word_object.Path & "\MSWORD8.OLB"
ElseIf word_object.Version = "9.0" Then 'Word 2000
    x.AddFromFile word_object.Path & "\MSWORD9.OLB"
ElseIf word_object.Version = "10.0" Then 'Word XP
    x.AddFromFile word_object.Path & "\MSWORD" & ".OLB"
ElseIf word_object.Version = "11.0" Then 'Word 2003
     x.AddFromFile word_object.Path & "\MSWORD" & ".OLB"
End If

Set x = Nothing
Set word_object = Nothing
  
End Sub

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
9 avril 2008

Merci pour la source proposé j'avais demandé il y a un momment(plusieurs mois) si il y avait une possibilité de choisir la version du fichier "*.OLB".tu viens de proposer une solution je vais essayer.

merci encore.

thierrydkk
Messages postés
4
Date d'inscription
lundi 18 décembre 2006
Statut
Membre
Dernière intervention
22 décembre 2006

J'ai fait une brève recherche sur le net et il semble que le niveau de controle sur la manipulation du VBE soit apparue avec Excel 2002 (XP?).
La manipulation de VBE (VBProject) est possible depuis EXCEL 97, mais pas avant (EXCEL 95 et antérieures). Donc il ne devrait pas y avoir de problème.

Source : http://www.cpearson.com/excel/vbe.htm
Messages postés
4
Date d'inscription
lundi 18 décembre 2006
Statut
Membre
Dernière intervention
22 décembre 2006

Merci pour tes remarques, j'ai corrigé les Trim, le Sub et pour ce qui est des dossiers pouvant être différents, Application.Path est remplacé par word_object.Path.

Je n'ai effectivement pas testé sur toutes les versions pour le VBProject.References. Il se peut que celà bug (97?). Sinon, ne pas oublier de cocher l'option "Faire confiance au projet visual basic" dans Outils -> Macro -> Sécurité -> deuxième onglet (ou quelquechose de similaire suivant la version, ici Excel 2003)
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
21
Salut,

Pas grand chose à dire si ce n'est ceci :
As tu vérifié que "Set x = ThisWorkbook.VBProject.References" était accessible depuis toutes les versions d'Excel ? C'est possible ... et même souhaitable. N'ayant pas pu faire le test, je demande ...
Ce code ne fonctionnera que si Word et Excel ont été installés dans le même répertoire (C:\Program Files ... ). Dans 99% des cas, c'est fait ainsi. Pas de problème en soit.

Trim("8") = "8"
Trim("9") = "9"
Donc pas besoin d'utiliser Trim()

Enfin, tu as écrit une procédure (Sub), pas une fonction (Function). Aucun paramètre n'est retourné.

Bon p'tit prog dans l'ensemble. Surement utile.
Messages postés
4
Date d'inscription
lundi 18 décembre 2006
Statut
Membre
Dernière intervention
22 décembre 2006

N'exitez pas a le dire si sa marche chez vous ou non.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.