Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Problème de Dll entre 2 versions d'excel

MJ13

XLDnaute Barbatruc
Bonjour à tous

J'utilise un planning en réseau avec Excel 2010. J'ai une référence ouverte dans le VBA qui s'appelle Microsoft Outlook 14.0 Object library.

Depuis peu, certains postes sont passés sous XL2016. Mais si quelqu'un avec la nouvelle version ouvre le planning, il remplace la référence Outlook 14.0 par la référence Outlook 16.0. Et du coup si quelqu'un a un XL2010, il ne peut plus l'ouvrir, vu qu'il manque la référence Outlook 16.0.

Est-il possible de faire cohabiter les 2 versions ou tester à l'ouverture du fichier la version d'Excel pour sélectionner la bonne référence?
 

MJ13

XLDnaute Barbatruc
Bonjour Job, Chris

Merci pour vos réponses.

@job75 : Sauf que le fichier est un planning partagé donc avec 2 versions, cela me paraît assez complexe.

@Chris24: En effet, je pense que cela fait parti de la solution, mais il faut que je retrouve comment ouvrir ou fermer une référence à l'ouverture et à la fermeture du fichier.
 

MJ13

XLDnaute Barbatruc
Re

Merci à vous deux.

En effet, je pense que la solution donnée par Chris sur Excel-Pratique devrait être la voie qu'il faudra que je privilégie.

Pour Job, sur Xl 2010 j'utilise la référence Microsoft Outlook 14.0 Object library pour envoyer des données vers le calendrier d'Outlook et Outlook est ouvert, mais pour Xl2016, c'est la référence Microsoft Outlook 16.0 Object library qui se met à jour en empêchant ensuite ceux de XL2010 de fonctionner (erreur lors du téléchargement de la Dll).

Je regarderai cela quand j'aurais un moment.
 

MJ13

XLDnaute Barbatruc
Bonjour à tous

J'ai finalement fait ce code qui a l'air de fonctionner:

VB:
'A mettre dans ThisWorkbook
'Attention  Cochez Accès Approuvé au modèle d'objet du projet VBA dans les options. Choisir:
'Fichier \Options \Centre Gestion de la confidentialité \Paramètres du centre de la confidentialité \Paramètre des Macros
Private Sub Workbook_BeforeClose(Cancel As Boolean)
EnlèveRéférence_Outlook
End Sub
Private Sub Workbook_Open()
AjouteRéférence_Outlook
End Sub
'A Mettre dans un module standard
Sub AjouteRéférence_Outlook()
On Error Resume Next
'MsgBox Application.Version
'MsgBox Dir("C:\Program Files\Microsoft Office\Office14\MSOUTL.OLB")
'MsgBox Dir("C:\Program Files (x86)\Microsoft Office\Office14\MSOUTL.OLB")
  If Application.Version = "14.0" And Dir("C:\Program Files (x86)\Microsoft Office\Office14\MSOUTL.OLB") = "MSOUTL.OLB" Then ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files (x86)\Microsoft Office\Office14\MSOUTL.OLB"
  If Application.Version = "14.0" And Dir("C:\Program Files\Microsoft Office\Office14\MSOUTL.OLB") = "MSOUTL.OLB" Then ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files\Microsoft Office\Office14\MSOUTL.OLB"
  If Application.Version = "15.0" And Dir("C:\Program Files(x86)\Microsoft Office\Office15\MSOUTL.OLB") = "MSOUTL.OLB" Then ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files (x86)\Microsoft Office\Office15\MSOUTL.OLB"
  If Application.Version = "15.0" And Dir("C:\Program Files\Microsoft Office\Office15\MSOUTL.OLB") = "MSOUTL.OLB" Then ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files\Microsoft Office\Office15\MSOUTL.OLB"
  If Application.Version = "16.0" And Dir("C:\Program Files (x86)\Microsoft Office\Office16\MSOUTL.OLB") = "MSOUTL.OLB" Then ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files (x86)\Microsoft Office\Office16\MSOUTL.OLB"
  If Application.Version = "16.0" And Dir("C:\Program Files\Microsoft Office\Office16\MSOUTL.OLB") = "MSOUTL.OLB" Then ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files\Microsoft Office\Office16\MSOUTL.OLB"
End Sub
Sub EnlèveRéférence_Outlook()
Dim Ref As Object
'Efface la Référence Outlook
For Each Ref In ThisWorkbook.VBProject.References
  'If Ref.IsBroken = True Then ThisWorkbook.VBProject.References.Remove Ref
  If Ref.Name = "Outlook" Then ThisWorkbook.VBProject.References.Remove Ref
  'MsgBox Ref.Name
Next Ref
End Sub
Sub TestRefBroken()
Dim Ref As Object
'Efface les références "Broken" ou "Manquantes"
For Each Ref In ThisWorkbook.VBProject.References
  If Ref.IsBroken = True Then ThisWorkbook.VBProject.References.Remove Ref
  'MsgBox Ref.Name
Next Ref
End Sub
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…