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
| Sub Insertion_Code_Alinéa_Automatique() '(Feuille As Worksheet)
Dim Début As Long, Fin As Long, l As Long
Dim Code_Existant As Boolean
Dim x As String
'-> Ajout de la référence " Microsoft Visual Basic for Applications Extensibility 5.3" nécessaire pour manipuler l'éditeur de macros Excel
x = "C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
On Error GoTo Ligne_Suivante '-> Permet de traiter l'erreur générée dans le cas où la référence est déjà chargée
ThisWorkbook.VBProject.References.AddFromFile x
Ligne_Suivante:
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
Début = 0
'-> Pour traiter l'erreur générée dans le cas où la procédure "Worksheet_Change" n'existe pas
On Error Resume Next
Début = .ProcStartLine("Worksheet_Change", vbext_pk_Proc)
On Error GoTo 0
If Début = 0 Then '-> La procédure "Worksheet_Change" n'existe pas
Début = .CountOfLines
.InsertLines Début + 1, ""
.InsertLines Début + 2, "Private Sub Worksheet_Change(ByVal Target As Range)"
.InsertLines Début + 3, ""
.InsertLines Début + 4, "'-> Mise en forme automatique - énumération avec alinéa :"
.InsertLines Début + 5, " Application.Run " & """" & "PERSONAL.XLSB!Alinéa_automatique""" & ", Target, 2, 4, 6, , False"
.InsertLines Début + 6, ""
.InsertLines Début + 7, "End sub"
Else '-> La procédure "Worksheet_Change" existe
Fin = Début + .ProcCountLines("Worksheet_Change", vbext_pk_Proc)
Code_Existant = .Find("Application.Run " & """" & "PERSONAL.XLSB!Alinéa_automatique" & "", Début, 1, Fin, -1)
If Code_Existant = False Then
' -> On recherche d'abord le numéro de ligne où est écrit "Private Sub Worksheet_Change", car la propriété "ProcCountLines" renvoie à la première ligne de la procédure,
' c'est-à-dire la ligne après le trait horizontal de fin de procédure précédente
For l = Début To Fin
If .Find("Private Sub Worksheet_Change", Début, 1, Fin, -1) Then l = Début: Exit For
Next l
.InsertLines Début + 1, ""
.InsertLines Début + 2, "'-> Mise en forme automatique - énumération avec alinéa :"
.InsertLines Début + 3, " Application.Run " & """" & "PERSONAL.XLSB!Alinéa_automatique""" & ", Target, 2, 4, 6, , False"
End If
End If
End With
End Sub |
Partager