web-dev-qa-db-fra.com

Comment ajouter un bouton par programme dans VBA à côté de certaines données de cellules en feuille?

J'ai une fonction qui génère des données pour 100 lignes de cellules (et 2 colonnes). Pour chaque ligne (dans la 3ème colonne), je dois ajouter un bouton qui, lorsqu'il est cliqué, ouvre une boîte de dialogue modale personnalisée offrant à l'utilisateur 4 options/boutons parmi lesquels choisir.

Une idée comment faire ça?

/ T

46
tobefound

Je pense que cela suffit pour vous engager sur un chemin de Nice:

Sub a()
  Dim btn As Button
  Application.ScreenUpdating = False
  ActiveSheet.Buttons.Delete
  Dim t As Range
  For i = 2 To 6 Step 2
    Set t = ActiveSheet.Range(Cells(i, 3), Cells(i, 3))
    Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height)
    With btn
      .OnAction = "btnS"
      .Caption = "Btn " & i
      .Name = "Btn" & i
    End With
  Next i
  Application.ScreenUpdating = True
End Sub

Sub btnS()
 MsgBox Application.Caller
End Sub

Il crée les boutons et les lie à butnS (). Dans le sous btnS (), vous devriez montrer votre dialogue, etc.

Mathematica graphics

88
Dr. belisarius

Supposons que votre fonction entre des données dans les colonnes A et B et que vous souhaitiez qu'un formulaire utilisateur personnalisé apparaisse si l'utilisateur sélectionne une cellule dans la colonne C. Une façon de procéder consiste à utiliser l'événement SelectionChange:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim clickRng As Range
    Dim lastRow As Long

    lastRow = Range("A1").End(xlDown).Row
    Set clickRng = Range("C1:C" & lastRow) //Dynamically set cells that can be clicked based on data in column A

    If Not Intersect(Target, clickRng) Is Nothing Then
        MyUserForm.Show //Launch custom userform
    End If

End Sub

Notez que le formulaire apparaîtra lorsqu'un utilisateur sélectionne n'importe quelle cellule de la colonne C et vous pouvez renseigner chaque cellule de la colonne C avec quelque chose comme "sélectionner la cellule pour lancer le formulaire" afin de rendre évident le fait que l'utilisateur doit effectuer une action (avoir un bouton suggère naturellement qu'il faut cliquer dessus)

4
Alex P