Mark se trouve dans un environnement de travail qui utilise deux versions d’Excel? 2002 et 2003. Un problème survient lorsqu’il ouvre un classeur avec une macro dans Excel 2003, qui installe la bibliothèque VB d’Office 11, puis, plus tard, quelqu’un essaie d’ouvrir le même classeur dans Excel 2002, qui génère une erreur lorsque la macro tente de s’exécuter car elle ne trouve pas la référence de bibliothèque VBA correcte. Mark sait qu’il peut corriger manuellement cela en accédant à l’éditeur VB et en effaçant la référence à la bibliothèque VBA manquante, mais il se demande s’il existe un moyen pour que le classeur vérifie automatiquement la version d’Excel et met à jour la référence de la bibliothèque VBA en conséquence.

Une façon de résoudre ce problème consiste à créer et à enregistrer le classeur à l’aide de la version antérieure d’Excel. Lorsqu’il est ouvert dans la dernière version d’Excel, la référence à la bibliothèque VBA sera automatiquement mise à jour.

Excel effectue les mises à jour vers les versions ultérieures, mais il ne les fait pas pour les versions antérieures.

Cela signifie, cependant, que même si le classeur est créé dans la version antérieure d’Excel, une fois qu’il est ouvert puis enregistré dans la version ultérieure d’Excel, les utilisateurs de la version antérieure auront des problèmes pour l’ouvrir.

La solution, selon certaines sources, est de recourir à ce que l’on appelle la «liaison tardive». Cela signifie simplement que la macro est écrite de manière à rechercher des fonctions spécifiques uniquement pendant l’exécution, et non lors de l’enregistrement de la macro. Ceci est un peu référencé dans l’article suivant de la base de connaissances Microsoft:

http://support.microsoft.com/?kbid=244167

Vous pouvez essayer des techniques de liaison tardive en ouvrant l’éditeur VBA et en supprimant toutes les références précédemment établies. Ajoutez ensuite un code similaire au suivant près du début de votre macro:

If Application.Version = "10.0" Then    'Excel 2002     Dim oExcel As Object    'Apply late binding     Set oExcel = CreateObject("Excel.Application")

End If If Application.Version = "11.0" Then    'Excel 2003     '     ' Add whatever references you want for Excel 2003     ' End If

À la fin de la macro, assurez-vous que vous définissez tous les objets définis (tels que oExcel) sur Nothing. Un bon exemple de code plus robuste que ce qui est présenté ici peut être trouvé dans ces articles:

http://www.vbaexpress.com/kb/getarticle.php?kb_id=267 http://www.vbaexpress.com/kb/getarticle.php?kb_id=272

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (3340) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.