Bouton qui s'auto-détruit

Résolu
siamens_duj Messages postés 212 Statut Membre -  
siamens_duj Messages postés 212 Statut Membre -
Bonjour,

J'ai un bouton "Rechercher" qui, quand je clic dessus, m'ouvre une InputBox.
Cette inputBox me pose une question ( par exemple "Entrer un nom"), quand je rentre la réponse (par exemple Dupont), toutes les lignes de mon tableau ayant dans le champ "Nom" le nom "Dupont" se colorie en bleu et un bouton "Arrêter" apparaît.

J'aimerais que ce bouton recolorie en blanc les cases qui se sont mises en bleu et s'auto - détruit une fois que cela est fait.

Ce bouton (un buttons.add) sert en fait à annuler la macro "Rechercher".

Savez - vous comment je pourrais procéder ?

Merci.

Je vous met un extrait de mon code pour mieux comprendre :

If Reference = Cells(i, 4).Value Then 'Reference est le nom de ma variable pour InputBox
Cells(i, 4).EntireRow.Interior.Color = RGB(174, 240, 194)
ActiveSheet.Buttons.Add(BLeft, BTop, BWidth, BHeight).Select
BTop = BTop + 11.25 ' Ajoute le bouton
Buttons.Caption = "Arrêter" 'Renomme le bouton "Arrêter"
End If


Ce qui me pose problème est que je ne sais pas où coder.
Dans la macro où j'ai créé le bouton ou dans une nouvelle macro Private Sub Button1_Click() ?

3 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Inserer un module avec ce code à adapter:

    Option Explicit
    Public Const NomBouton$ = "MonBouton"
    
    Sub CreeBoutonFeuilleEtCode()
    Dim Btn As OLEObject, VbCodeMod As Object
    Dim i&, Code$
      
      'le bouton
      Set Btn = ActiveSheet.OLEObjects.Add _
                          (ClassType:="Forms.CommandButton.1") '
      i = ActiveSheet.OLEObjects.Count
      With Btn
        .Object.Caption = "Test bouton " & i
        .Object.Font.Bold = True
        .Top = ActiveCell(1, 2).Top
        .Left = ActiveCell(1, 2).Left
        .Name = NomBouton & i
        .Visible = True
        .Width = 150
      End With
      
      'son code
      Set VbCodeMod = ActiveWorkbook.VBProject. _
                      VBComponents(Btn.Parent.CodeName).CodeModule
                   
      Code = "Private Sub " & Btn.Name & "_Click()" & vbLf
      Code = Code & "  MsgBox ""Test réussi : " & Btn.Name & "" & vbLf
      Code = Code & "  ActiveCell.Select" & vbLf
      Code = Code & "End Sub"
      
      VbCodeMod.AddFromString Code
      
    End Sub 'fs
    
    Sub NettoieBoutonEtCode()
    Dim NomBtn$, Shp As OLEObject, Sht As Worksheet
     Dim Deb, NbLi As Integer
      For Each Sht In ActiveWorkbook.Sheets
        For Each Shp In Sht.OLEObjects
          NomBtn = Shp.Name
          If Left(NomBtn, 9) = NomBouton Then
            Shp.Delete
            With ActiveWorkbook.VBProject. _
                  VBComponents(Sht.CodeName).CodeModule
              Deb = .ProcStartLine(NomBtn & "_Click", 0)
              NbLi = .ProcCountLines(NomBtn & "_Click", 0)
              .DeleteLines Deb, NbLi
            End With
          End If
        Next Shp
      Next Sht
    End Sub
    
    
    


    Et pour lancer les macros:

    Private Sub CommandButton1_Click()
    CreeBoutonFeuilleEtCode
    End Sub
    
    Private Sub CommandButton2_Click()
    NettoieBoutonEtCode
    End Sub
    

    1
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Si tu veux que le bouton se crée a l'ouverture et se détruise à la fermeture, mettre ceci dans ThisWorkBook:

      Private Sub Workbook_BeforeClose(Cancel As Boolean)
      NettoieBoutonEtCode
      End Sub
      Private Sub Workbook_Open()
      CreeBoutonFeuilleEtCode
      End Sub
      
      0
    2. siamens_duj Messages postés 212 Statut Membre 7
       
      Bonjour,

      Merci pour votre réponse rapide et bien détaillé !

      Cependant, ce code ne détruit pas le bouton lorsqu'il est cliqué ?

      Merci
      0
      1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > siamens_duj Messages postés 212 Statut Membre
         
        Tel qu'il est ce code fonctionne. Si vous ne voulez pas l'utiliser tel quel, vous devez l'adapter. Tout est expliqué.
        0
    3. siamens_duj Messages postés 212 Statut Membre 7
       
      Ok merci
      0
  2. siamens_duj Messages postés 212 Statut Membre 7
     
    Sinon j'avais pensé faire un lien vers le sub du nouveau bouton "Arrêter" dans la création du bouton.
    Comme ceci :

    If Reference = Cells(i, 4).Value Then
    Cells(i, 4).EntireRow.Interior.Color = RGB(174, 240, 194)
    ActiveSheet.Buttons.Add(BLeft, BTop, BWidth, BHeight).Select
    BTop = BTop + 11.25
    Buttons.Caption = "Arrêter"
    'Lien vers le Sub du bouton "Arrêter"
    End If


    Puis dans le Sub du bouton "Arrêter" faire un code du genre :

    Private Sub Button2_click()
    Button2_click.delete
    end sub


    Es-ce possible ?
    0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Voilà un exemple:

    http://www.cjoint.com/c/EKejVDCKtmQ
    0
    1. siamens_duj Messages postés 212 Statut Membre 7
       
      Ca fonctionne très bien.
      Merci beaucoup !
      0