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 326 fois - Téléchargée 27 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
thierrydkk Messages postés 3 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 9 avril 2008
22 déc. 2006 à 22:37
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
Gwen8 Messages postés 4 Date d'inscription lundi 18 décembre 2006 Statut Membre Dernière intervention 22 décembre 2006
22 déc. 2006 à 03:00
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
Gwen8 Messages postés 4 Date d'inscription lundi 18 décembre 2006 Statut Membre Dernière intervention 22 décembre 2006
22 déc. 2006 à 02:30
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)
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Modérateur Dernière intervention 23 décembre 2008 23
21 déc. 2006 à 11:50
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.
Gwen8 Messages postés 4 Date d'inscription lundi 18 décembre 2006 Statut Membre Dernière intervention 22 décembre 2006
21 déc. 2006 à 11:16
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.