Código relativamente simples e que não precisa de explicação complementar.
Colar esses dois "sub" em um módulo geral (Módulo 1, por exemplo).
Option Explicit
Sub CréerCombo(Ligar As Range, Optional Sh As Worksheet, Optional Emplacement As Range)
Dim Obj As Object
Dim code As String
Dim Ix As Integer, Num As String
If Sh Is Nothing Then
Set Sh = ActiveSheet
End If
Sh.Select
Ix = ActiveSheet.OLEObjects.Count + 1
Num = "0" & Ix: Num = Right(Num, 2) 'Pour jusque 99 boutons
If Emplacement Is Nothing Then
'localização padrão
Set Emplacement = ActiveCell
End If
'criar o botão
With Emplacement
Set Obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Combobox.1", _
Link:=False, DisplayAsIcon:=False, Left:=.Left, Top:=.Top, Width:=.ColumnWidth * 5.65, Height:=.RowHeight)
Obj.Name = "ComboB_" & Num
End With
'propriedades do combo
With ActiveSheet.OLEObjects(Ix)
.Placement = xlMoveAndSize
.PrintObject = True
.ListFillRange = Lier.Address
End With
'O texto do macro
code = vbCrLf & "Private Sub ComboB_" & Num & "_Change()" & vbCrLf
code = code & " MsgBox ""Vous avez sélectionner la ligne "" & ComboB_" & Num & ".Text , ,""ComboB_" & Num & """" & vbCrLf
code = code & "End Sub"
'Adicione o macro no final do módulo da planilha
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
.insertlines .CountOfLines + 1, code
End With
End Sub
Baixe m exemplo no Excel 2007 ou >
Adicionar Combo et código.xlsm (em francês)