Modifier le code d'un bouton de commande VBA

Bonjour,

Je voulais savoir s'il est possible de modifier du code avec une macro ?

Je m'explique :
Je souhaite que lorsque l'on clique sur un bouton de commande (bouton1), un autre bouton de commande (bouton2) se crée dans une cellule définie (jusque là ça va).
Mais en plus je sais déjà ce que je veux mettre comme code dans ce bouton2, j'aimerai donc qu'il se génère automatiquement lorsque l'on clique sur bouton1.

Merci pour votre aide, prévenez moi si c'est pas clair !

6 réponses

  1. Bonjour,

    Tu trouveras ici : https://www.excel-downloads.com/resources/categories/utilitaires.18/

    un fichier Excel de mon cru [ VizioXLA ] qui te fourniras
    des exemples pour manipuler du code VBA.

    Je ne prétends pas que celui-ci soit de haut niveau, mais
    il fournit quand même des exemples pour manipuler plusieurs
    objets faisant partie d'Excel.

    Cdt

    Lupin
    0
    1. Dsl mais je crains que ton code ne puisse pas m'aider bcp :S
      0
  2. re:

    Voici l'exemple du bouquin dont je me suis inspiré :

    Sub AddSheetAndButton() 
        Dim NewSheet As Worksheet 
        Dim NewButton As OLEObject 
         
    '   Add the sheet 
        Set NewSheet = Sheets.Add 
         
    '   Add a CommandButton 
        Set NewButton = NewSheet.OLEObjects.Add _ 
          ("Forms.CommandButton.1") 
        With NewButton 
            .Left = 4 
            .Top = 4 
            .Width = 100 
            .Height = 24 
            .Object.Caption = "Return to Sheet1" 
        End With 
         
    '   Add the event handler code 
        Code = "Sub CommandButton1_Click()" & vbCrLf 
        Code = Code & "    On Error Resume Next" & vbCrLf 
        Code = Code & "    Sheets(""Sheet1"").Activate" & vbCrLf 
        Code = Code & "    If Err <> 0 Then" & vbCrLf 
        Code = Code & "      MsgBox ""Cannot activate Sheet1.""" & vbCrLf 
        Code = Code & "    End If" & vbCrLf 
        Code = Code & "End Sub" 
         
        With ThisWorkbook.VBProject. _ 
          VBComponents(NewSheet.Name).CodeModule 
            NextLine = .CountOfLines + 1 
            .InsertLines NextLine, Code 
        End With 
    End Sub 
    ' 
    


    Il parait plus simple que ça ne l'ai :-)

    n.b. Il faut ajouter la référence : [ Microsoft Visual Basic x.y Extensibility ]

    Cdt

    Lupin
    0
  3. Merci Lupin !

    J'ai bien suivi ton exemple mais j'ai toujours l'erreur 1004 qui s'affiche, on dirait qu'il ne connait pas VBproject. Est ce que ce serait dû au besoin d'ajouter cette référence [ Microsoft Visual Basic x.y Extensibility ] ??? Je ne sais pas ce que c'est, mais si c'est qqchose à installer, ça risque d'être compliqué, c'est mon ordi de travail et je n'ai pas les droits d'admin.

    Au cas où c'est pas ça l'erreur, voici mon code, peut être tu trouveras ce qui cloche :

    Private Sub CommandButton9_Click()
    
    Dim nom As String
    Dim Code As String
    
    ligne = InputBox("On which line did you add the new supplier ?", "Add supplier")
    
        ActiveSheet.Shapes("CommandButton1").Select
        Selection.Copy
        Cells(ligne, 4).Select
        ActiveSheet.Paste
        nom = Selection.Name
        Code = " Sub " + nom + "_Click()" & vbCrLf & vbCrLf & _
        nom + ".TopLeftCell.Select" & vbCrLf & vbCrLf & _
        "Call Codefct" & vbCrLf
        
         With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
            NextLine = .CountOfLines + 1
            .InsertLines NextLine, Code
        End With
    
    End Sub
    


    Tout va bien jusqu'au With où ça bug !
    En tout cas merci beaucoup pour ton aide!
    0
    1. Ah ok, c'est effectivement bien un problème de référence. J'ai essayé de changer ça, mais quand je vais dans Outils/Référence, j'ai un message "Erreur d'accès à la base de registration".

      C'est grave docteur?

      Je crois que c'est foutu pour ajouter des lignes de code automatiquement :S
      0
      1. re:

        Effectivement, c'est du à la référence.

        Sans la référence, tu peux essayer le code sans avoir
        l'instruction [ Option Explicit ] en début de code.

        En théorie, cela devrait fonctionner.

        Cdt

        Lupin
        0
        1. re,

          Je n'ai pas l'instruction [Option Explicit] en début de code par défaut.

          C'est peut-être parce que j'utilise Excel 2003 ?

          Merci Lupin.
          0
          1. J'ai enlevé l'obligation de déclarer les variables, mais ça ne marche pas non plus...

            Sans compte admin ca semble compromis.
            0
          2. re:

            En effet, le tout semble voué à l'échec. Je ne vois pas comment
            faire fonctionner le code sans avoir la référence.

            Désolé, mais il faudra sans doute trouver une autre solution.

            Cdt

            Lupin
            0
          3. Pas de soucis, c'est ma config qui est merdique. En tout cas merci bcp pour ton aide Lupin !
            0