Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 
C

Compte Supprimé 979

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

Bonjour superbog

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

A+
 

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:

MJ13

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

Bonjour à tous

Merci Job , pour ce petit code très sympa.

Le genre de programmation que je ne me lasse pas .
 

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

merci job 75 mais j'ai un message d'erreur 104 "impossible de définir la propriété OnAction de la classe Button"
la liste se créée mais pas les boutons...
 

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


 

job75

XLDnaute Barbatruc
Dernière édition:

superbog

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

une question bête, job75 tu notes dans ta macro
Code:
'Cocher la référence "Microsoft Visual Basic for Applications Extensibility x.x"
comment fait on????
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…