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
Partager