Voici une méthode pour permettre la mise à jour automatique d'un Add-In distribué sur un réseau local d'entreprise.
On peut imaginer le même fonctionnement avec un Add-In sur le net.
Fonctionnement :
- vous mettez votre add-in a distribuer à un emplacement fixe
- vous devez gérer un fichier *.ini qui vérifie toutes les semaines la version.
- si la version sur le réseau est plus récente le programme propose la mise à jour
- la mise à jour consiste à archiver l'actuel add-in avant de copier la nouvelle version.
les fonctions de lecture/écriture de fichier INI
sur l'événement Workbook_Open de la macro-complémentaire
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 Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _ "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _ ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, _ ByVal lpFileName As String) As Long Private Declare Function WritePrivateProfileString Lib "kernel32" Alias _ "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _ ByVal lpString As Any, ByVal lpFileName As String) As Long Function EcrireINI(Entete As String, Variable As String, Valeur As String) As String Dim Fichier As String Fichier = "C:\temp\MyAddin.ini" WriteINI = WritePrivateProfileString(Entete, Variable, Valeur, Fichier) End Function Function LireINI(Entete As String, Variable As String) As String Dim Retour As String Dim Fichier As String Fichier = "C:\temp\MyAddin.ini" Retour = String(255, Chr(0)) LireINI = Left$(Retour, GetPrivateProfileString(Entete, ByVal Variable, "", Retour, Len(Retour), Fichier)) End Function
puis un module de code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Private Sub Workbook_Open() ' check UPDATE If LireINI("Main", "lastCheckUpdate") & "" = "" Then CheckVersion EcrireINI "Main", "lastCheckUpdate", Format(Now, "dd/mm/yyyy hh:nn:ss") Else If CDate(LireINI("Main", "lastCheckUpdate")) + 7 < Now Then CheckVersion EcrireINI "Main", "lastCheckUpdate", Format(Now, "dd/mm/yyyy hh:nn:ss") End If End If End Sub
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 Sub CheckVersion() Dim fso As FileSystemObject Dim ad As AddIn Set fso = New FileSystemObject For Each ad In application.AddIns If ad.FullName Like "*MyAddin.xla" Then If fso.GetFile(ad.FullName).DateLastModified < _ fso.GetFile("\\LecteurReseau\...\Divers\MyAddin.xla").DateLastModified Then rep = MsgBox("Votre version de l'Add-in n'est plus à jour." & vbCrLf & _ "Voulez-vous mettre à jour votre Add-in ?", vbInformation + vbYesNo, "MyAddin") If rep = vbYes Then ' il faut mettre à jour On Error Resume Next Kill Left(ad.FullName, Len(ad.FullName) - 4) & "(old).xla" ThisWorkbook.SaveAs Left(ad.FullName, Len(ad.FullName) - 4) & "(old).xla" FileCopy _ "\\LecteurReseau\...\Divers\MyAddin.xla", _ ad.FullName MsgBox "La mise à jour de votre Add-in a été effectuée." & vbCrLf & _ "Redémarrez Excel pour qu'elle soit effective", vbInformation + vbOKOnly, _ "MyAddin" Else MsgBox "La prochaine vérification aura lieu dans une semaine !", _ vbCritical + vbOKOnly, _ "MyAddin" End If End If End If Next ad Set fso = Nothing Set ad = Nothing End Sub
Partager