Bouton qui s'auto-détruit

Résolu/Fermé
siamens_duj Messages postés 192 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 - Modifié par siamens_duj le 3/11/2015 à 15:28
siamens_duj Messages postés 192 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 - 5 nov. 2015 à 12:43
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() ?
A voir également:

3 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
3 nov. 2015 à 16:44
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
3 nov. 2015 à 17:01
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
siamens_duj Messages postés 192 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
4 nov. 2015 à 08:47
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > siamens_duj Messages postés 192 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019
4 nov. 2015 à 09:08
Tel qu'il est ce code fonctionne. Si vous ne voulez pas l'utiliser tel quel, vous devez l'adapter. Tout est expliqué.
0
siamens_duj Messages postés 192 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
4 nov. 2015 à 10:31
Ok merci
0
siamens_duj Messages postés 192 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
4 nov. 2015 à 09:05
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
4 nov. 2015 à 10:48
Voilà un exemple:

http://www.cjoint.com/c/EKejVDCKtmQ
0
siamens_duj Messages postés 192 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
5 nov. 2015 à 12:43
Ca fonctionne très bien.
Merci beaucoup !
0