Méthode "Late Binding"

Bien le bonjour à tout le monde sur le forum,

J'aurais besoin d'un coup de main avec un code que j'ai créé avec la méthode "Early binding". La problématique que je rencontre présentement avec ce classeur excel est qu'elle est utilisée par plusieurs personnes et que celles-ci n'utilisent pas tous la même version de microsoft Excel. Quelques-uns utilisent 2007, d'autres 2010 et certains 2013. ça crée un problème "can't load DLL" pour les utilisateurs de 2007 après que le fichier ait été édité par quelqu'un utilisant une version plus récente. Je suis allé voir dans le référencement et il y a effectivement une référence manquante pour "Office 15.0 Object Library". même après l'avoir décoché et enregistré le classeur, l'erreur revient. Durant mes recherches, j'ai découvert que si j'utilise la méthode "Late Binding", le problème serait réglé. Malheureusement, je ne m'y connait pas assez pour créer un code fonctionnel encore et je vous demande donc de l'aide.

Voici mon code original utilisant la méthode "Early binding".

Sub Journee_Absence_2013()
ActiveSheet.Unprotect
     ActiveWindow.ActiveCell = "JA"
     ActiveCell.Interior.ColorIndex = 46
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End Sub

Maintenant, j'ai essayé et je dis bien essayé de recréer ce code en utilisant la méthode "Late binding" mais ça ne fonctionne malheureusement pas. Voici ce que ça m'a donné :

Option Explicit

Sub Journee_Absence_2013()
Dim xlObj As Object
Set xlObj = CreateObject("Excel.Application")
With xlObj.ActiveSheet
            .Unptotect
            .ActiveCell = "JA"
            .ActiveCell.Interior.ColorIndex = 46
            .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End With
Set xlObj = Nothing
End Sub

Je vous remercie d'avance pour le coup de main.

Bonjour,

Je ne suis pas spécialiste dans tes Early et laste, toutefois j'ai bien un tite idée..

Et n'ayant pas les versions 2010 et 2013,

Tout d'abord j'essayerais de supprimer les paramètres de Protect, il y à peut-être un paramètre qui n'est pas supporter par une ou l'autre des versions.

Ensuite pour ton Laste, j'essayerais..

Dim xlObj As Excel.Application
Set xlObj = New Excel.Application

C'est qu'une piste de recherche...

A+

PS: Ce qui me semble anormal c'est que le fait d'ouvrir le classeur sur un poste, par exemple avec 2010, peu modifier les accès dll?

La dll dont tu parle est partie intégrante de la version de l'Excel "en cour"

Si j'ouvre le 2007, c'est V12, 2010 c'est V14 et je suppose que 2013 c'est V15. (beh oui, MS est superstitieux)

Et je ne vois vraiment pas ce qui pourrait modifier cela.

Explique...

Merci de m'avoir répondu

J'ai essayé après avoir enlevé le "ActiveSheet.Unprotect" et le "ActiveSheet.Protect", avec le code suivant :

Option Explicit

Sub Journee_Absence_2013()

Dim xlObj As Excel.Application
Set xlObj = New Excel.Application
With xlObj.ActiveSheet
     .ActiveCell = "JA"
     .ActiveCell.Interior.ColorIndex = 46
End With
Set xlObj = Nothing
End Sub

ça me donne maintenant l'erreur suivante : "Variable objet ou variable de bloc non définie" ... Je vais continuer de fouiller en espérant trouver Si jamais tu as d'autres idées, n'hésite pas !

Pour ce qui est de l'erreur originale qui est causé par une référence "Manquante", j'ai fouillé un peu partout sur internet et il y a cet article (En anglais par contre ... je pourrais te le traduire si jamais tu en as besoin) qui est intéressant.

http://www.cpearson.com/excel/missingreferences.aspx

Tout ce que je sais, c'est que je dois trouver une solution hahaha

Merci encore et à bientôt je l'espère.

Re,

"Variable objet ou variable de bloc non définie"

1°) quand tu crée une nouvelle application Excel --> elle est VIDE, tu dois y ajouter un classeur.

2°) Mais en réfléchissant un peu je pense que c'est normale que tu ai cette erreur, j'ai les Versions 2000 et 2007, si je sauve un classeur 2000 sur Excel 2007 je ne pourrais plus l'ouvrir sur le 2000 je dois spécifié que je veux l’enregistrer au format compatible avec le 2000. C'est probablement la cause de tes soucis.

Essaye avec un classeur qui fonctionne sur 2007 de le modifier sur une autre version (2010 ou 2013) et de le sauver avec un format compatible 2007.

Autre remarque, tant que ça doit tourner sur 2007 développe sur une version 2007, sur le 2010 il y a des fonctions/propriétés qui n'existe pas sur le 2007.

A+

Effectivement c'est développé pour 2007, avec 2007. Le seule problème que je rencontre, c'est quand quelqu'un d'autre que moi, par exemple un novice utilisant Excel 2013, l'ouvre et le modifie pour ensuite l'enregistrer. Je me retrouve avec le problème "can't load DLL" ... (Non seulement avec ce fichier mais avec tout les fichiers excel qui utilisent ces macros, il y en a un par employé) les fichier originaux se trouvent sur un disque dur réseau et tout les superviseurs ont accès. J'ai créé un fichier semblable à celui qu'on utilise parce que je n'ai pas accès au fichier original les fin de semaines. Je te le place en fichier joint. si tu as d'autres idées fais moi signe.

Merci encore de prendre le temps !

Frank_

29calendrier.xlsm (17.45 Ko)

Essaye en mettant ce code dans le module du classeur (ThisWorkBook)

Option Explicit

Dim OffAction As Boolean

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim TB, File As String
    If OffAction Then Exit Sub ' éviter la récursivité
    TB = Split(Application.Version, ".")
    If Val(TB(0)) > 12 Then
        Cancel = True
        OffAction = True
        Application.DisplayAlerts = False
        File = ThisWorkbook.FullName
        ActiveWorkbook.SaveAs Filename:=File, FileFormat:=xlExcel12
        OffAction = False
        Application.DisplayAlerts = True
        'Eventuellement fermer le classeur
        'ThisWorkbook.Close
    End If
End Sub

Tu dis..

A+

Woah Merci, j'essaie ça dès que j'arrive au travail Lundi !

Je te redonne des nouvelles si ça fonctionne ou non.

Merci énormément.

@ bientôt

Rechercher des sujets similaires à "methode late binding"