créer automatiquement un bouton par macro, portant le nom de la macro

superbog

XLDnaute Occasionnel
Bonjour,

J'ai créé de nombreuses macros. Je souhaiterai sur une même page, mettre un bouton par macro et que ce bouton porte le nom de la macro. Y a t'il un moyen d'automatiser cela?

merci
 

superbog

XLDnaute Occasionnel
Re : créer automatiquement un bouton par macro, portant le nom de la macro

Voilà, depuis des mois j'ai travaillé pour mettre en place un classeur excel avec de nombreuses macro. Aujourd'hui je cherche à mettre sur certaines pages des boutons pour lancer les macros.

mais chaque fois il faut manuellement recréer le nom du bouton pour qu'il soit identique à celui de la macro, c'est épuisant

en outre je souhaiterai avoir une page avec un bouton pour chaque macro et un rangement alphabétique

Bonjour superbog

Et par curiosité, quel intérêt à ta demande ?

A+
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : créer automatiquement un bouton par macro, portant le nom de la macro

Bonjour à tous,
mais chaque fois il faut manuellement recréer le nom du bouton pour qu'il soit identique à celui de la macro,
Et par curiosité également,
une fois que les boutons sont placés sur les pages et que les macros y sont liées, est-il nécessaire de vouloir les réaffecter à chaque utilisation du fichier.

Sans voir le fichier et des explication un peu plus précises, la réponse risque de se faire attendre

à+
Philippe
 

job75

XLDnaute Barbatruc
Re : créer automatiquement un bouton par macro, portant le nom de la macro

Bonjour superbog, Bruno, Philippe,

Le client étant roi (reine) voyez le fichier joint et cette macro :

Code:
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
Sur Excel 2010 il faut avoir coché l'option Accès approuvé au modèle d'objet du projet VBA (onglet Fichier-Options-Centre de gestion de la confidentialité-Paramètres...-Paramètres des macros).

Edit : téléchargez d'abord le fichier sur le bureau pour tester...

A+
 

Pièces jointes

  • Liste macros(1).xls
    51 KB · Affichages: 80
Dernière édition:

job75

XLDnaute Barbatruc
Re : créer automatiquement un bouton par macro, portant le nom de la macro

Re,

Ah oui mais s'il y a des Sub ailleurs que dans un module standard il faut préciser la feuille.

Donc utiliser un tableau à 2 dimensions pour stocker aussi le nom du module :

Code:
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
Fichier (2).

Edit : hum, la suppression des boutons doit se faire en colonne 3...

A+
 

Pièces jointes

  • Liste macros(2).xls
    58 KB · Affichages: 68
Dernière édition:

job75

XLDnaute Barbatruc
Re : créer automatiquement un bouton par macro, portant le nom de la macro

Bonjour Michel, heureux que ça te plaise :)

Le nom d'une variable, donc une ligne de code, peut commencer par Sub, voir Macro5...

Mais a priori Sub suivi d'un espace est toujours le début d'une macro.

Donc pour la recherche il faut un espace avant l'astérisque.

Par ailleurs la macro ne doit pas être paramétrée, donc écrire :

Code:
If t Like "Sub *()" Then
Fichier (3).

A+
 

Pièces jointes

  • Liste macros(3).xls
    56.5 KB · Affichages: 64

job75

XLDnaute Barbatruc
Re : créer automatiquement un bouton par macro, portant le nom de la macro

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+
 

Pièces jointes

  • Liste macros(4).xls
    55 KB · Affichages: 88
Dernière édition:

superbog

XLDnaute Occasionnel
Re : créer automatiquement un bouton par macro, portant le nom de la macro

et avec celle ci j'ai l'erreur
"erreur de compilation variable non définie"
nom = .ProcOfLine(i, vbext_pk_Proc)

donc j'ai remplacé par 0 et cela semble parfaitement fonctionner...sous excel 2010

merci encore job 75


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+
 

job75

XLDnaute Barbatruc
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 166
Messages
2 085 885
Membres
103 018
dernier inscrit
mohcen23