Bonjour à tous.
J'ai une boucle VBA pour l'alimentation d'une combobox. Quand je définit à la main la plage d'alimentation de O2 à Ox tout fonctionne.
Au début de mon code je demande par une inputbox la première cellule de recherche (au lieu que ce soit O2)... Mais l'adaptation ne fonctionne pas. Pouvez vous me dire qu'est-ce qui bloque dans les syntaxes svp?
Code qui marche :
a = ws.Range("O2:O" & ws.[O65000].End(xlUp).Row)
Via l'inputbox, si je mets O2 je sors l'info avec
Res.Address(0, 0)
Soit théoriquement (et c'est là que ça bloque) :
a = ws.Range(Res.Address(0, 0) & ":" & Res.Column & ws.[ & Res.Column & 65000].End(xlUp).Row)
Mais non...
Si quelqu'un a la correction de la syntaxe voire une ligne plus "courte" je suis preneur
Merciii
Code complet ici : A mettre dans un module et lancer, pas besoin d'avoir un fichier
Sub CreateCombBox1()
'Déclaration variables
Dim ws As Worksheet
Dim oTB As Object
'Définition variables
Set ws = Worksheets("Feuil1")
Set Ras = Application.InputBox("Indiquez sur quelle cellule la liste doit être" & vbLf & "intégrée.", "Saisir une cellule" & vbLf & vbLf & "(Ex: N20)", "N20", Type:=8)
Rass = Ras.Address
Set Res = Application.InputBox("Indiquez la Cellule à partir de laquelle la liste" & vbLf & "doit commencer.", "Saisir une cellule" & vbLf & vbLf & "(Ex: Si de A5 à A(x), tapez A5)", "N20", Type:=8)
Ress = Res.Address(0, 0)
Set oTB = ws.OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
Link:=False, DisplayAsIcon:=False, Width:=150, Height:=18)
'Positionnement Combobox
With oTB
.LinkedCell = Rass
.Left = ws.Range(Rass).Left
.Top = ws.Range(Rass).Top
.Object.BackColor = RGB(255, 255, 255)
.Object.ForeColor = RGB(0, 0, 0)
End With
'Alimentation Dico Combobox
Set mondico = CreateObject("Scripting.Dictionary")
a = ws.Range("O2:O" & ws.[O65000].End(xlUp).Row)
For i = LBound(a) To UBound(a)
If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
Next i
'Tri des données Combobox Alpha + Alimentation
temp = mondico.keys
Call Tri(temp, LBound(temp), UBound(temp))
oTB.Object.List = temp
oTB.Object.Text = "Saisir un nom"
End Sub
Sub Tri(a, gauc, droi)
ref = a((gauc + droi) \ 2)
g = gauc: D = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(D): D = D - 1: Loop
If g <= D Then
temp = a(g): a(g) = a(D): a(D) = temp
g = g + 1: D = D - 1
End If
Loop While g <= D
If g < droi Then Call Tri(a, g, droi)
If gauc < D Then Call Tri(a, gauc, D)
End Sub