Bonjour superbog
Et par curiosité, quel intérêt à ta demande ?
A+
Et par curiosité également,mais chaque fois il faut manuellement recréer le nom du bouton pour qu'il soit identique à celui de la macro,
Private Sub CommandButton1_Click()
Dim o As Object, i&, t$, liste$(), n&, c As Range
'---liste des procédures Sub---
For Each o In ThisWorkbook.VBProject.VBComponents
With o.CodeModule
For i = 1 To .CountOfLines
t = Trim(.Lines(i, 1))
If t Like "Sub*" Then
t = Mid(t, 5, InStr(t, "(") - 5)
n = n + 1
ReDim Preserve liste(1 To n)
liste(n) = t
End If
Next
End With
Next
'---RAZ---
Application.ScreenUpdating = False
[A2:A65536].ClearContents
For Each o In Me.Shapes
If o.TopLeftCell.Column = 2 Then o.Delete
Next
'---création de la liste et des boutons---
If n Then
With [A2].Resize(UBound(liste))
.Value = Application.Transpose(liste)
.Sort [A2], Header:=xlNo 'tri
For Each c In .Cells
With Me.Buttons.Add(c(1, 2).Left, c.Top, c(1, 2).Width, c.Height)
.Characters.Text = c
.OnAction = c.Text
End With
Next
End With
End If
End Sub
ReDim Preserve liste(1 To 2, 1 To n)
liste(1, n) = o.Name 'nom du module
liste(2, n) = t 'nom de la macro
If t Like "Sub *()" Then
Re,
Si VBA contient beaucoup de lignes, il peut être utile de sauter les lignes à l'intérieur des procédures Sub.
Cela est possible grâce aux propriétés .ProcOfLine et .ProcCountLines.
Mais la référence Microsoft Visual Basic for Applications Extensibility x.x doit être cochée.
Edit : sur Excel 2003 je constate que la macro fonctionne bien si l'on remplace la constante vbext_pk_Proc par 0, ceci même si la référence n'est pas cochée.
Fichier (4).
A+
'Cocher la référence "Microsoft Visual Basic for Applications Extensibility x.x"
Bonsoir superbog,
Dans VBA menu Outils => Références...
A+