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)