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
|
Sub ListeReferences()
'Le but de cette macro est de lister les références d'un classeur actif
'sous la forme de plusieurs tableaux.
'On utilisera ensuite c'est tableaux dans la macro "MiseAJourDesReferences"
'par un copier (depuis la fenêtre Exécution) / coller en debut de macro
'
'on liste les référence du classeur actif
Set Awbk = ActiveWorkbook
Dim ref As Reference, GUID As String
Dim majeure As Integer, mineure As Integer
Dim tabVraiRef() As Variant
k = 0
For Each ref In Awbk.VBProject.References
'j'ai mis ces conditions car chez moi elle sont toujours là
If ref.Name = "VBA" Then GoTo Suite
If ref.Name = "Excel" Then GoTo Suite
k = k + 1
'on entre les valeurs utiles dans un tableau
ReDim Preserve tabVraiRef(5, k)
tabVraiRef(0, k) = ref.Name
tabVraiRef(1, k) = ref.GUID
tabVraiRef(2, k) = ref.Major
tabVraiRef(3, k) = ref.Minor
tabVraiRef(4, k) = ref.Type
tabVraiRef(5, k) = ref.FullPath
Suite:
Next
For i = 1 To k
Select Case i
'si c'est le dernier élément, on termine par une parenthèse
Case Is = k: MsgRef = MsgRef & """" & tabVraiRef(0, i) & """)" & vbLf: _
MsgGUID = MsgGUID & """" & tabVraiRef(1, i) & """)" & vbLf: _
MsgMajor = MsgMajor & """" & tabVraiRef(2, i) & """)" & vbLf: _
MsgMinor = MsgMinor & """" & tabVraiRef(3, i) & """)" & vbLf: _
MsgType = MsgType & """" & tabVraiRef(4, i) & """)" & vbLf: _
MsgFullPath = MsgFullPath & """" & tabVraiRef(5, i) & """)" & vbLf
'sinon, une virgule
Case Else: MsgRef = MsgRef & """" & tabVraiRef(0, i) & """, _" & vbLf & vbTab: _
MsgGUID = MsgGUID & """" & tabVraiRef(1, i) & """, _" & vbLf & vbTab: _
MsgMajor = MsgMajor & """" & tabVraiRef(2, i) & """, _" & vbLf & vbTab: _
MsgMinor = MsgMinor & """" & tabVraiRef(3, i) & """, _" & vbLf & vbTab: _
MsgType = MsgType & """" & tabVraiRef(4, i) & """, _" & vbLf & vbTab: _
MsgFullPath = MsgFullPath & """" & tabVraiRef(4, i) & """, _" & vbLf & vbTab
End Select
Next
'on récupère les tableau dans la fenêtre Exécution
Debug.Print "tabRef = array( _" & vbLf & vbTab & MsgRef
Debug.Print "tabGUID = array(" & MsgGUID
Debug.Print "tabMajor = array(" & MsgMajor
Debug.Print "tabMinor = array(" & MsgMinor
Debug.Print "tabType = array(" & MsgType
Debug.Print "tabFullPath = array(" & MsgFullPath
Awbk.Save
Set Awbk = Nothing
End Sub
Sub EnleverReference()
Set Awbk = ActiveWorkbook
Dim ref As Reference
For Each ref In Awbk.VBProject.References
Debug.Print ref.Name: On Error Resume Next: Awbk.VBProject.References.Remove ref
Next
Err.Clear: On Error GoTo 0
Set Awbk = Nothing
End Sub
Sub MiseAJourDesReferences()
Dim tabRef, tabGUID, tabMajor, tabMinor, tabType, tabFullPath As Variant
'Utiliser ListeReferences pour obtenir les valeurs des tableaux
'--------------------------------------
'DÉBUT DE LA ZONE DE COLLAGE
'--------------------------------------
tabRef = Array( _
"stdole", _
"Office", _
"MSForms", _
"VBIDE", _
"Word", _
"Clients")
tabGUID = Array("{00020430-0000-0000-C000-000000000046}", _
"{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}", _
"{0D452EE1-E08F-101A-852E-02608C4D0BB4}", _
"{0002E157-0000-0000-C000-000000000046}", _
"{00020905-0000-0000-C000-000000000046}", _
"")
tabMajor = Array("2", _
"2", _
"2", _
"5", _
"8", _
"0")
tabMinor = Array("0", _
"4", _
"0", _
"3", _
"4", _
"0")
tabType = Array("0", _
"0", _
"0", _
"0", _
"0", _
"1")
tabFullPath = Array("0", _
"0", _
"0", _
"0", _
"0", _
"C:\Users\XXXX\Documents\XXXXX\Clients.xlsm")
'--------------------------------------
'FIN DE LA ZONE DE COLLAGE
'--------------------------------------
'Suppression des références du devis
Application.StatusBar = "Suppression des références du classeur " & Awbk.Name
'ATTENTION ON SUPPRIME TOUT SAUF CELLES QUI SONT EN COURS D'UTILISATION
EnleverReference
' Ajout des références
For i = LBound(tabRef) To UBound(tabRef)
Application.StatusBar = "Ajout de la référence " & tabRef(i)
'on différencie le cas référence à un classeur des autres
If tabType(i) = 0 Then
Awbk.VBProject.References.AddFromGuid tabGUID(i), tabMajor(i), tabMinor(i)
Else
Awbk.VBProject.References.AddFromFile tabFullPath(i)
End If
Next
Application.StatusBar = False
Awbk.Save
Set Awbk = Nothing
End Sub |