Création d'une macro par un clic sur un bouton

Bonjour,

je souhaiterais automatiser la création d'une macro. Pour cela, lorsque l'on cliquerait sur un bouton il me fasse ceci:

Sub 000000()

With Selection

.Interior.ColorIndex = 111111

.FormulaR1C1 = 000000

.Font.ColorIndex = 333333

.HorizontalAlignment = xlCenter

End With

End Sub

Avec 000000 qui serait le contenu de la cellule sélectionnée,

111111 sui serait la valeur du fond de la cellule sélectionnée,

333333 qui serait la couleur de la police de la cellule sélectionnée,

Pouvez-vous m'aider ?

Bonjour à tous,

J'ai pas bien compris ce que tu voulais faire avec ta macro, donc en attendant un éclaircissement, voici une macro de silkyroad qui permet de créer une macro par macro (!) :

Sub creationModule()
    'Nécéssite d'activer la référence
    '"(Microsoft) Visual basic For Application Extensibility 5.3"
    '
    Dim Wb As Workbook
    Dim VBComp As VBComponent
    Dim X As Integer

    'Définit le classeur cible
    Set Wb = ThisWorkbook

    'Ajoute un module standard dans le classeur
    Set VBComp = Wb.VBProject.VBComponents.Add(1)
    'Renomme le module
    VBComp.Name = "NouveauModule"

    'Ajoute une macro dans le module
    With VBComp.CodeModule
        X = .CountOfLines
        .InsertLines X + 1, "Sub x000000()"
        .InsertLines X + 2, "With Selection"
        .InsertLines X + 3, ".Interior.ColorIndex = 111111"
        .InsertLines X + 4, ".FormulaR1C1 = 000000"
        .InsertLines X + 5, ".Font.ColorIndex = 333333"
        .InsertLines X + 6, ".HorizontalAlignment = xlCenter"
        .InsertLines X + 7, "End With"
        .InsertLines X + 8, "End Sub"
    End With
End Sub

J'ai mis un "x" devant le nom de la macro car le nom ne peut commencer par un chiffre.

Voici deux fonctions qui peuvent t'être utiles :

Une première qui te permet de vérifier l'existence d'un module dans le classeur :

Function VerifierExistenceModule(Wb As Workbook, Mdl As String) As Boolean
    Dim VBComp As VBComponent

    On Error Resume Next
    Set VBComp = Wb.VBProject.VBComponents(Mdl)

    If VBComp Is Nothing Then
        VerifierExistenceModule = False
        Else
        VerifierExistenceModule = True
    End If
End Function

et une autre qui te permet de vérifier l'existence d'une macro :

Function VerifierExistenceMacro(Wb As Workbook, NomMacro As String) As Boolean
    Dim x As Integer
    Dim vbcomp As VBComponent

    For Each vbcomp In Wb.VBProject.VBComponents
        On Error Resume Next
        x = vbcomp.CodeModule.ProcStartLine(NomMacro, 0)

        If x > 0 Then Exit For
    Next vbcomp

    If x = 0 Then
        VerifierExistenceMacro = False
        Else
        VerifierExistenceMacro = True
    End If

End Function

La syntaxe pour vérifier l'existence du module "Module2" :

MsgBox VerifierExistenceModule(Workbooks("NomClasseur.xls"), "Module2")

et celle pour vérifier l'existence de la macro "testMacro" :

MsgBox VerifierExistenceMacro(Workbooks("NomClasseur.xls"), "testMacro")

Bonjour TGV6773,

Pas de panique... Tu as déjà le script...il te reste à créer le bouton et à copier-coller le script au bouton.

Alors tu ouvres le menu VBA (affichage - barre d'outils - visual basic) et tu cliques sur le bouton dont les symboles sont le marteau et la clé pour avoir accès à la boîte à outils.

Tu cliques ensuite sur l'outil "bouton de commande" c'est un rectangle plein gris. Tu as un pointeur petit "+" lorsque tu balades la souris sur ta feuille excel. Tu dessines ton bouton ou tu double-cliques dans le feuille pour avoir ton bouton. Enfin le bouton est là !!! ouf ! il a des poignées en forme de rectangles blancs.

Double-clique sur ce bouton tout frais tu arrives dans les scripts des macro liées à ce bouton.

Et alors oh miracle de la progammation, tu peux copier-coller tout ou partie du script que tu as présenté entre sub et end sub... pour qu'à chaque fois que tu cliques sur le bouton la celule sélectionnée prenne la couleur programmée.

J'espère avoir été clair.

Allez au boulot...

Bon courage.

Au plaisir..

Captain SOLO

image2

Bonjour,

vba-new, ta macro me parait pas mal. Maintenant, je souhaiterais que au lieu des 00000 ou 11111 et 33333 il me les remplace par le texte de la cellule sélectionnée.

Il faudrait pouvoir stocker dans des variables la couleur de fond, de police et le contenu, mais comment ?

Si en cliquant sur mon bouton, ayant sélectionné la cellule A3 auparavent et qu'elle est écrite en noir, sur fond vert avec blabla comme texte dedans, il faudraitt qu'il me fasse ceci:

      X = .CountOfLines
        .InsertLines X + 1, "Sub Blabla()"
        .InsertLines X + 2, "With Selection"
        .InsertLines X + 3, ".Interior.ColorIndex = 4"
        .InsertLines X + 4, ".FormulaR1C1 = Blabla"
        .InsertLines X + 5, ".Font.ColorIndex = 1"
        .InsertLines X + 6, ".HorizontalAlignment = xlCenter"
        .InsertLines X + 7, "End With"
        .InsertLines X + 8, "End Sub"

A+ et désolé pour le retard

Ok, essaie avec cette macro :

Sub creationModule()
'Nécéssite d'activer la référence
'"(Microsoft) Visual basic For Application Extensibility 5.3"
'
Dim Wb As Workbook
Dim VBComp As VBComponent
Dim X As Integer

    With Selection
        texte = .Value
        couleurFond = .Interior.ColorIndex
        couleurPolice = .Font.ColorIndex
    End With
    'Définit le classeur cible
    Set Wb = ThisWorkbook

    'Ajoute un module standard dans le classeur
    Set VBComp = Wb.VBProject.VBComponents.Add(1)
    'Renomme le module
    VBComp.Name = "NouveauModule"

    'Ajoute une macro dans le module
    With VBComp.CodeModule
        X = .CountOfLines
        .InsertLines X + 1, "Sub " & texte & "()"
        .InsertLines X + 2, "With Selection"
        .InsertLines X + 3, ".Interior.ColorIndex = " & couleurFond
        .InsertLines X + 4, ".FormulaR1C1 = """ & texte & ""
        .InsertLines X + 5, ".Font.ColorIndex = " & couleurPolice
        .InsertLines X + 6, ".HorizontalAlignment = xlCenter"
        .InsertLines X + 7, "End With"
        .InsertLines X + 8, "End Sub"
    End With
End Sub
3capaja.xlsx (130.56 Ko)
12classeur-a.xlsx (116.11 Ko)

Bonjour,

merci, maintenant, je voudrais savoir s'il est possible de monter cette macro dans un module précis (par exemple: Module2) ?

Cordialement

Re,

Oui c'est possible, remplace :

'Ajoute un module standard dans le classeur
    Set VBComp = Wb.VBProject.VBComponents.Add(1)
    'Renomme le module
    VBComp.Name = "NouveauModule"

par

    'Ajoute un module standard dans le classeur
    Set VBComp = Wb.VBProject.VBComponents("Module2")
    'Renomme le module
    'VBComp.Name = "NouveauModule"
Rechercher des sujets similaires à "creation macro clic bouton"