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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
| Option Explicit
Const nom_court_xlam As String = "MATIK"
Const nom_long_xlam As String = nom_court_xlam & ".xlam"
Dim nom_full_xlam As String
Const Rép_Source As String = "le_répertoire_de_référence"
Public Sub gest_addin()
'https://www.developpez.net/forums/d235993/logiciels/microsoft-office/general-vba/verifier-l-activation-d-reference/
'https://www.developpez.net/forums/newreply.php?p=10506357&noquote=1
nom_full_xlam = Application.UserLibraryPath & nom_long_xlam
'Debug.Print nom_court_xlam
'Debug.Print nom_long_xlam
'Debug.Print nom_full_xlam
'----------------------------------------------------------------------------------------------------------------------
'1 - Désactive (décoche) la référence à l'addin objet de mise à jour
'----------------------------------------------------------------------------------------------------------------------
'ThisWorkbook.VBProject.References.AddFromFile (Application.UserLibraryPath & "cetautomatix.xlam")
Dim liste_réf As Object, I As Byte
Set liste_réf = ActiveWorkbook.VBProject.References
With liste_réf
For I = 1 To .Count
If liste_réf(I).Name = nom_court_xlam Then .Remove liste_réf.Item(liste_réf(I).Name)
Next I
End With
Set liste_réf = Nothing
'-----------------------------------------------------------------------------------------------------------
'2 - Désinstallation de l'addin (suppression de l'éditeur VBE)
'-----------------------------------------------------------------------------------------------------------
Dim addin As Object
For Each addin In Application.AddIns
With addin
If .Name = nom_long_xlam Then
.Installed = False
Exit For
End If
End With
Next
'-------------------------------------------------------------------------------------------------------------------------------------------------------
'3 - Mise à jour de l'addin dernière version dans le répertoire addins du collaborateur
'-------------------------------------------------------------------------------------------------------------------------------------------------------
Call maj_addins
'--------------------------------------------------------------------------------------------------------------------------------------
'4 - Installe la macro complémentaire dans l'environnement utilisateur VBE
'--------------------------------------------------------------------------------------------------------------------------------------
Application.AddIns.Add(nom_full_xlam).Installed = True
'--------------------------------------------------------------------------------------------------------------------------------------
'5 - Active la macro complémentaire
'--------------------------------------------------------------------------------------------------------------------------------------
ThisWorkbook.VBProject.References.AddFromFile (nom_full_xlam)
End Sub
Sub maj_addins()
Application.ScreenUpdating = False
'---------------------------------------------------------------------------------------------------------
'ACTIVER LA REFERENCE MICROSOFT SCRIPTING RUNTIME
'---------------------------------------------------------------------------------------------------------
Dim fichier As String
Dim fso As Scripting.FileSystemObject
Dim fileitem As Scripting.file
Dim SourceFolder As Scripting.Folder
Dim Tableau()
Dim m As Integer, I As Integer, z As Byte
Dim Valeur As Byte
Dim Cible As Variant
'----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'SUPPRESSION .XLAM DANS LES ADDINS DU COLLABORATEUR = APPLICATION.USERLIBRARYPATH
'----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Set fso = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = fso.GetFolder(Application.UserLibraryPath)
For Each fileitem In SourceFolder.Files
With fileitem
'Debug.Print .Name
If .Name = nom_long_xlam Then Kill .Path
End With
Next fileitem
'-------------------------------------------------------------------------------------------------------------------------------------------------------------
'DETERMINE LE CETAUTO.XLAM LE PLUS RECENT DANS LE REPERTOIRE DE REFERENCE
'-------------------------------------------------------------------------------------------------------------------------------------------------------------
fichier = dir(Rép_Source & "\REF*.xlam")
'Boucle sur les fichiers
Do
m = m + 1
ReDim Preserve Tableau(1 To 2, 1 To m)
Tableau(1, m) = fichier
Set fso = CreateObject("Scripting.FileSystemObject")
'On Error Resume Next
If fso.FileExists(Rép_Source & "\" & fichier) = True Then
Set fileitem = fso.GetFile(Rép_Source & "\" & fichier)
Tableau(2, m) = fileitem.DateLastModified
fichier = dir
'Debug.Print Tableau(1, m) & " \ " & Tableau(2, m)
End If
Loop Until fichier = ""
'---Trie les fichiers par ordre décroissant de création ---
Do
Valeur = 0
For I = 1 To m - 1
If CDate(Tableau(2, I)) < CDate(Tableau(2, I + 1)) Then
For z = 1 To 2
Cible = Tableau(z, I)
Tableau(z, I) = Tableau(z, I + 1)
Tableau(z, I + 1) = Cible
Next z
Valeur = 1
End If
Next I
Loop While Valeur = 1
Dim classeur_1 As String
classeur_1 = Rép_Source & "\" & Tableau(LBound(Tableau()), 1)
'------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'COPIE LE CETAUTO.XLAM LE PLUS RECENT DANS DANS LES ADDINS DU COLLABORATEUR = APPLICATION.USERLIBRARYPATH
'-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Dim classeur_2 As String
classeur_2 = Application.UserLibraryPath & "\" & Tableau(LBound(Tableau()), 1)
classeur_2 = Replace(classeur_2, "REF", "")
FileCopy classeur_1, classeur_2
End Sub |
Partager