Salut

Voici mon souci :
J'ai un fichier excel avec pas mal de macros, qu'on utilise comme template, quelque-part sur le réseau, pour que différentes personnes téléchargent et éditent leur propre copie sur leur poste de travail.

Lorsque j'ouvre une copie de ce fichier -ma copie locale donc- une macro tente d'ouvrir le template afin de lire ses propriétés parmi lesquelles se trouvent la propriété "version".
La macro vérifie alors que la version de la copie est égale a la version du template, et affiche un gentil message invitant l'utilisateur a utiliser la dernière version du template.

Pour ouvrir le classeur distant j'utilise la méthode workbooks.add de l'objet application.
Il arrive que ça fonctionne très bien, mais certaines fois ça se vautre méchamment jusqu'à m'obliger a redémarrer l'ordinateur complet :
Ca fait comme si le classeur distant est locké, du coup au bout d'une minutes ou deux, une multitudes de messages d'erreur apparaissent toutes les secondes a peu pres. Impossible de killer le processus excell. y'a plus qu'a redémmarer.
Le message dit "Excel is waiting an OLE Object to complete an operation" (a peu de choses près )....

Du coup je me demande comment contourner ce problème.
Existe-t-il un moyen de "protéger" workbooks.add afin qu'en cas de fichier non accessible, je puisse simplement afficher un message d'info et empecher que tout parte en sucette comme c'est le cas actuellement ?
Y'a t il une meilleure façon de lire les propriétés d'un fichier excel ?
Toute autre idée étant la bienvenue.

ps: j'utilise vba7 et excel 2010

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
Public Sub CheckLatestVersion()
' Compare the Version in Custom properties of this workbook
' with the version in Custom properties of the template
' if a newer version exists, a msg is Displayed
 
    Dim app As New Excel.Application
    Dim templateWorkbook As Excel.Workbook
    Dim customProperties As Variant
    Dim currentVersion, newVersion As Variant
 
    ' this has saved me several times
    If (InStr(ThisWorkbook.FullName, "Commercial-Lending-Module\01-Documentation\02-Templates\CTR-CLM") > 0) Then
        MsgInfo ("You are currently editing the Technical Composition Release template document. For this reason, version checking will not be performed")
    Else
        On Error Resume Next
        Set customProperties = ThisWorkbook.CustomDocumentProperties
        If customProperties("Version") Is Nothing Then
            currentVersion = "0.0"
        Else
            Set currentVersion = customProperties("Version")
        End If
 
        ' Reading version information from template
        Set templateWorkbook = app.Workbooks.Add(TemplateCTRFile)
        app.Visible = False
        If templateWorkbook Is Nothing Then
            MsgError ("Unable to open template workbook")
        Else
            Set customProperties = templateWorkbook.CustomDocumentProperties
            Set newVersion = customProperties("Version")
            If newVersion Is Nothing Then
                MsgError ("Error while reading template workbook version")
            Else
                If currentVersion < newVersion Then
                    MsgInfo ("This document version (" & currentVersion & ") is outdated " & vbLf _
                    & "Consider using the newest version template (" & newVersion & ") " & vbLf _
                    & "Location : " & TemplateCTRFile)
                End If
            End If
        templateWorkbook.Close SaveChanges:=False
        End If
    End If
    On Error GoTo 0
End Sub