DropDowns VBA
Robin
-
lermite222 Messages postés 9042 Statut Contributeur -
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour à toutes et tous,
Je travaille sous excel et je tente vainement de créer une liste DropDowns et de la mettre à jour à chaque utilisation de cette même liste.
Voici ma procédure de création du DropDown :
Et ma procédure de MAJ via DropButtonClick :
Un des problèmes c'est que je n'arrive pas à attribuer de "nom" à mon DropDowns, je ne peux pas y faire référence dans la suite du code. Comment alors attribuer la procédure de MAJ de ma liste au bon DropDowns (mon fichier comportera plusieurs DropDowns par la suite).
Je vous remercie par avance pour votre aide !
Robin
Je travaille sous excel et je tente vainement de créer une liste DropDowns et de la mettre à jour à chaque utilisation de cette même liste.
Voici ma procédure de création du DropDown :
Sub AddDropDown(T() As String, Tbis() As String, col As Integer, Target As Range)
Worksheets("Feuil1").DropDowns.Add(Target.Left, Target.Top, Target.Width, Target.Height).Select
With Selection
.LinkedCell = T_graph(col)
End With
End Sub
Et ma procédure de MAJ via DropButtonClick :
Sub DropDowns1_DropButtonClick(T() As String, Tbis() As String, col As Integer)
Dim i As Long, j As Integer
Dim fin As Long
Call liste(T(), Tbis(), col) 'procédure remplissant le tableau Tbis() utilisé ici
fin = Worksheets("Feuil1").DropDowns1.ListCount
For i = fin - 1 To 0 Step -1
Worksheets("Feuil1").DropDowns1.RemoveItem i
Next i
For j = 1 To T_liste(col)
Worksheets("Feuil1").DropDowns1.AddItem Tbis(j)
Next j
End Sub
Un des problèmes c'est que je n'arrive pas à attribuer de "nom" à mon DropDowns, je ne peux pas y faire référence dans la suite du code. Comment alors attribuer la procédure de MAJ de ma liste au bon DropDowns (mon fichier comportera plusieurs DropDowns par la suite).
Je vous remercie par avance pour votre aide !
Robin
6 réponses
Ton lien c'est pour du VB.Net (pas VBA)
Créer le combo...(je vais aussi le mettre en Tuto)
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Créer le combo...(je vais aussi le mettre en Tuto)
Public Sub CreeC()
CréerCombo Range("B3:B11"), Sheets("Feuil2"), Range("D8")
End Sub
Sub CréerCombo(Lier 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
'emplacement par défaut
Set Emplacement = ActiveCell
End If
'crée le ComboBox
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
'propriétés du combo Box
With ActiveSheet.OLEObjects(Ix)
.Placement = xlMoveAndSize
.PrintObject = True
.ListFillRange = Lier.Address
End With
'Le texte de la macro
code = "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"
'Ajoute la macro en fin de module feuille
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
.insertlines .CountOfLines + 1, code
End With
End Sub
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Bonjour,
Je ne connais pas cet événement (Excel 2007 ou > je suppose)
Mais essaye..
En mettant une variable Nom, public ou au moins visible dans le module
A+
Edit : Bon, j'ai tester et ça fonctionne, mais je pense que ce serais plus facile avec des combobox.
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Je ne connais pas cet événement (Excel 2007 ou > je suppose)
Mais essaye..
With Selection
.Name = Nom
.LinkedCell = T_graph(col)
End With
En mettant une variable Nom, public ou au moins visible dans le module
A+
Edit : Bon, j'ai tester et ça fonctionne, mais je pense que ce serais plus facile avec des combobox.
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Ok, merci.
J'ai donc écouté ton conseil et tente maintenant de me dépatouiller avec un ComboBox (toujours sous excel 2007). Cependant voici qu'avec le code suivant, j'ai le droit à une erreur '438' :
L'erreur se situe au niveau de la ligne
Je pense que je ne gère pas bien la création d'une ComboBox en VBA.
Est-ce que quelqu'un pense pouvoir m'aider ?
En vous remerciant par avance !
J'ai donc écouté ton conseil et tente maintenant de me dépatouiller avec un ComboBox (toujours sous excel 2007). Cependant voici qu'avec le code suivant, j'ai le droit à une erreur '438' :
Sub AddDropDown(T() As String, Tbis() As String, col As Integer, Target As Range)
Dim ddBox As ComboBox
'Dim i As Integer
Set ddBox = Worksheets("Feuil1").Controls.AddComboBox(Target, "box")
With ddBox
.ControlSource = T_graph(col)
.Style = fmStyleDropDownList
End With
End Sub
L'erreur se situe au niveau de la ligne
Set ddbox = ....
Je pense que je ne gère pas bien la création d'une ComboBox en VBA.
Est-ce que quelqu'un pense pouvoir m'aider ?
En vous remerciant par avance !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour le tuto, il m'aide pas mal pour comprendre comment mettre à jour ma liste à chaque utilisation/click.
Cependant je ne saisis toujours pas comment créer cette box.
J'essaie de suivre le canevas suivant :
https://www.microsoft.com/en-us/download/details.aspx?id=55984
Sans succès apparemment. Je crois que je ne pige pas très bien ce qu'est un "ControlCollection" ou "Controls"... dans le cas de ton bouton ce doit être un "OLEObjects".
Merci pour ton aide en tout cas, si tu as de nouvelles idées,n'hésites pas :)
Cependant je ne saisis toujours pas comment créer cette box.
J'essaie de suivre le canevas suivant :
https://www.microsoft.com/en-us/download/details.aspx?id=55984
Sans succès apparemment. Je crois que je ne pige pas très bien ce qu'est un "ControlCollection" ou "Controls"... dans le cas de ton bouton ce doit être un "OLEObjects".
Merci pour ton aide en tout cas, si tu as de nouvelles idées,n'hésites pas :)
Que veux-tu dire par..
mettre à jour à chaque utilisation de cette même liste.
Et est-ce nécessaire de créer le combo par code, tu peu pas le mettre directement sur la feuille ?
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
mettre à jour à chaque utilisation de cette même liste.
Et est-ce nécessaire de créer le combo par code, tu peu pas le mettre directement sur la feuille ?
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.