Option Explicit
Dim cls() As New UserForm1 '1 => nombre d'OptionButtons - 1 (base 0)
Public WithEvents OB As MSForms.OptionButton
Private Sub OB_Change()
If OB Then MsgBox OB.Caption
End Sub
Private Sub UserForm_Activate()
Dim n As Byte, c As Control
Dim CaptionX, couleurX
CaptionX = Array("bleu", "rouge", "vert", "jaune")
couleurX = Array(vbBlue, vbRed, vbGreen, vbYellow)
For n = 0 To UBound(CaptionX)
Set c = Frame1.Controls.Add("Forms.OptionButton.1", "OB" & n + 1)
c.Top = 8 + 18 * n
c.Left = 10
c.Caption = CaptionX(n)
c.ForeColor = couleurX(n)
ReDim Preserve cls(1 To n + 1): Set cls(n + 1).OB = c
Next n
End Sub