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
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.
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)