Librairies differentes sur classeur partagé

repcheks

XLDnaute Junior
Bonsoir,

Voici un petit probleme que je n'arrive pas a resoudre:

J'ai mis en place un classeur Excel partagé sur un reseau local, les utilisateurs y effectuent des operations de routine en lancant des macros. VBA+classeur partagé ne font pas bon ménage, mais toutes mes procedures fonctionnent correctement depuis plusieurs mois.

Seulement, si la majorité des utilisateurs sont encore sous Excel 2003, certains d'entre eux utilisent Excel 2010. Et cela pose un probleme, car ce classeur interagit avec Outlook, donc necessite la libraire "Microsoft Outlook 11.0" sous 2003, et "Microsoft Outlook 14.0" sous 2010.

Le probleme etant que si Excel 2010 update automatiquement les references pour un fichier créé sous 2003, Excel 2003 ne sait pas downgrader les references pour un fichier modifié par Excel 2010. Ce qui a donc pour effet chez les utilisateurs de 2003, si le fichier a été enregistre dernierement par un utilisateur de 2010, de referencer une librairie inconnue et donc d'etre incapable de fonctionner.

Je precise que les procedures que j'utilise ne supportent pas le late binding (Gestion de RDV avec envoi d'invitations), et que je suis donc obligé de declarer le tout avant le debut de celles-ci.

Ce qu'il me faudrait, c'est donc qu'au lancement du classeur, la version de Excel (Application.Version) soit verifiée, que la librairie consequente soit chargee, et qu'ensuite la variable "olapp as new outlook.application" soit declarée (car si elle est declarée avant, cela provoquera une erreur des le debut dans le cas ou la librairie n'est pas lancée)

J'espere que tout est clair, si quelqu'un savait comment me depanner...

Merci.
 

fhoest

XLDnaute Accro
Re : Librairies differentes sur classeur partagé

Bonsoir,
moi si cela peut aider j'ai chopper ce code qui n'est pas de moi (malheureusement je ne connait plus l'auteur mais je le remercie encore)
ceci ajoute juste des références si cela peut aider pour au moins modifier la bonne
il faut a mon avis traité ça par un workbook open.
voici ce code a mettre dans un module (bien sur avec les modifs qui vont avec...)
Code:
Private Declare Function GetSystemDirectory Lib "kernel32" _
Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, _
ByVal nSize As Long) As Long
'--------------------------------
Function CheminSystem()


Dim RetVal As Long
Dim SysDir As String

SysDir = Space$(256)
RetVal = GetSystemDirectory(SysDir, Len(SysDir))

If RetVal <> 0 Then
CheminSystem = Left$(SysDir, RetVal)
End If

End Function
'--------------------------------
Sub TesterBibliothequeFormulaire()
'ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files\Microsoft Office\Office12\MSWORD.OLB"
Do
Dim f As Integer
'f = 0

f = f + 1

Dim File As Variant
If f = 1 Then
File = CheminSystem & "\" & ""
End If
If f = 2 Then
File = CheminSystem & "\" & ""
End If
If f = 3 Then
File = CheminSystem & "\" & ""
End If
If f = 4 Then
File = CheminSystem & "\" & "MSWORD.OLB"
End If
If f = 5 Then
File = CheminSystem & "\" & ""
End If
If f = 6 Then
File = CheminSystem & "\" & ""
End If
If f = 7 Then
File = CheminSystem & "\" & ""
End If
If f = 8 Then
File = CheminSystem & "\" & ""
End If
If f = 9 Then
File = CheminSystem & "\" & ""
End If
If f = 10 Then
File = CheminSystem & "\" & ""
End If
On Error Resume Next


'File = "File" & f
ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files\Microsoft Office\Office12\MSWORD.OLB"
ThisWorkbook.VBProject.References.AddFromFile File

Loop Until f = 10

End Sub
encore autre chose le fait d'enregistrer le fichier en version 2003 n'est il pas une solution pour tout le monde car excel 2010 je pense peu sans doute le faire?
A bientôt.
 
Dernière édition:

repcheks

XLDnaute Junior
Re : Librairies differentes sur classeur partagé

Merci de ta reponse.

Du coup je lance la procedure suivante lors de l'ouverture du classeur

Code:
Sub Init()

On Error Resume Next

Select Case Application.Version

    Case "11.0": ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files\Microsoft Office\Office11\MSOUTL.OLB"
    Case "14.0": ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files\Microsoft Office\Office14\MSOUTL.OLB"
    
End Select


End Sub

Mais, d'une part cela requiert un reglage de securite (acces au projet VBA) - ceci dit on regler ceci directement dans la base de registre, donc c'est scriptable, ce n'est pas un gros probleme.

Et d'autre part, et c'est la qu'est mon probleme, l'acces au projet VBA ne peut pas se faire depuis un classeur partagé (on peut seulement l'executer, mais pas le modifier)

Il faudrait dont le departager, faire la modif, puis le remttre en partage, mais ca devient un peu hasardeux, non ?
 

fhoest

XLDnaute Accro
Re : Librairies differentes sur classeur partagé

je ne suis pas sur qu'il faut l'accés au projet pour cette commande car elle doit etre écrit dans un module du projet ,et elle sera exécuter a l'ouverture,
moi mon fichier et partagé et protégé et je n'ai pas ce problème de MDP projet vba
il faut tester mais le code me semble correct (mais je ne suis pas un pro)
A+
 

repcheks

XLDnaute Junior
Re : Librairies differentes sur classeur partagé

Et bien en fait ca a l'air de fonctionner depuis un classeur partagé, du moins en version 2010. je verrai demain si ca fonctionne aussi avec 2003, mais si c'est le cas je n'ai plus qu'a avoir en procedure de lancement :

- Verif de la cle de registre qui permet l'ecriture dans les prjets VBA : si inactif, activer
- verif de la version d'excel, chargement de la librairie consequente
- declaration de la variable outlook.application dans une sous procedure

Et ca devrait rouler.

Merci en tout cas.
 

Discussions similaires

Réponses
3
Affichages
1 K
Compte Supprimé 979
C