Remplir combobox selon conditon
Résolu
New_VBA_User
Messages postés
82
Date d'inscription
Statut
Membre
Dernière intervention
-
New_VBA_User Messages postés 82 Date d'inscription Statut Membre Dernière intervention -
New_VBA_User Messages postés 82 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
voir la Photo ci-dessous:
Je veux remplir un combobox avec les valeur qui se trouve dans la colonne G selon les valeurs qui se trouve dans la colonne F.
par exemple: pour tous les no qui se trouve dans la colonne F: Test N° "3005", le combobox doit être rempli de valeur de Tag "1,2,3,4" et pour "3062" de "xx, y", et "4244" de "test1, test2"
et aussi le nombre de Test N° dans la colonne F peut augmenter, dans ce cas le combobox doit s'adapter.
la sélection de Test N° se fait via un textbox.
lorsque je selectionne le dernier Test N° ex: 4244, ça plante, je pense que c'est la
Merci de votre aide.

voici le code utilisé:
voir la Photo ci-dessous:
Je veux remplir un combobox avec les valeur qui se trouve dans la colonne G selon les valeurs qui se trouve dans la colonne F.
par exemple: pour tous les no qui se trouve dans la colonne F: Test N° "3005", le combobox doit être rempli de valeur de Tag "1,2,3,4" et pour "3062" de "xx, y", et "4244" de "test1, test2"
et aussi le nombre de Test N° dans la colonne F peut augmenter, dans ce cas le combobox doit s'adapter.
la sélection de Test N° se fait via un textbox.
lorsque je selectionne le dernier Test N° ex: 4244, ça plante, je pense que c'est la
End(xlDownqui pose soucis.
Merci de votre aide.
voici le code utilisé:
Private Sub TextBox_TextN°_Change()
Dim Noms As Range
With ThisWorkbook.Sheets("Feuil1")
.Select
Set Noms = .Columns("F").Find(what:=Me.TextBox_TextN°.Value)
If Not Noms Is Nothing Then
Noms.Offset(0, 0).Select ' Select the active line
Fill_Tag
End If
End With
End Sub
________________________________________________________________________________________________
Private Sub Fill_Tag()
Dim SearchRange As Range
Dim Cell As Range
Me.ComboBox_Find_SiteTag.Clear ' vide le combobox
With ThisWorkbook.Sheets("Feuil1")
Do While ActiveCell.Value <> Empty
Set SearchRange = .Range(Selection.Offset(0, 0), Selection.Offset(1, 0).End(xlDown)) ' recherche la valeur dans la cellule
For Each Cell In SearchRange
If Cell.Offset(0, 1) <> "" Then ' Regarde la valeur de cellule de droite
If Me.ComboBox_Find_SiteTag.ListIndex = -1 Then Me.ComboBox_Find_SiteTag.AddItem Cell.Offset(0, 1)
Else
If Me.ComboBox_Find_SiteTag.ListIndex = -1 Then Me.ComboBox_Find_SiteTag.AddItem Cell.Offset(-1, 1)
End If
Next Cell
Exit Do
Loop
End With
End Sub
Configuration: Windows / Edge 18.17763
3 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour cela plante sur quelle ligne avec quel message d'erreur?
moi j'utiliserais une logique différente: chercher toutes les cellules de la colonne F contenant Me.TextBox_TextN°, et les utiliser directement.Dim bottefoin As Range, Cell As Range, premier As String 'Dim Mee Set bottefoin = ThisWorkbook.Sheets("Feuil1").Columns("F") Set Cell = bottefoin.Find(Mee.TextBox_TextN°.Value) Mee.ComboBox_Find_SiteTag.Clear If Not Cell Is Nothing Then premier = Cell.Address Do If Cell.Offset(0, 1) <> "" Then ' Regarde la valeur de cellule de droite If Mee.ComboBox_Find_SiteTag.ListIndex = -1 Then Mee.ComboBox_Find_SiteTag.AddItem Cell.Offset(0, 1) Else If Mee.ComboBox_Find_SiteTag.ListIndex = -1 Then Mee.ComboBox_Find_SiteTag.AddItem Cell.Offset(-1, 1) End If Set Cell = bottefoin.FindNext(Cell) Loop While premier <> Cell.Address End If
remplace Mee par Me-
ça marche bien pour les valeur de 3005 et 3062 ça plante pour valeur de 4244, Excel ne bouge plus, pas d'erreur.
quand je fais pas à pas, et je sélection les valeur de 4244 dernière dans la colonne F, il plante, et je pense qu'il va jusqu'à la dernière ligne vide alors il devrait s'arrêter juste après 2 ligne de 4244.
Ton idée peut être intéressant: Peux-tu faire un exemple concernant ta proposition..
Merci d'avance. -
-
Bonjour a vous deux,
. ou changer ta logique
Une autre facon de voir:Private Sub TextBox_TextN?_Change() If TextBox_TextN? = "" Then Exit Sub With ThisWorkbook.Sheets("Feuil1") Nb = Application.CountIf(.Columns("F"), CLng(TextBox_TextN?.Value)) If Nb > 0 Then lig = 1 For n = 1 To Nb lig = .Columns("F").Find(CLng(TextBox_TextN?.Value), .Cells(lig, "F"), , xlWhole).Row If .Cells(lig, "F").Offset(0, 1) <> "" Then ' Regarde la valeur de cellule de droite If ComboBox_Find_SiteTag.ListIndex = -1 Then Me.ComboBox_Find_SiteTag.AddItem .Cells(lig, "F").Offset(0, 1) Else If ComboBox_Find_SiteTag.ListIndex = -1 Then Me.ComboBox_Find_SiteTag.AddItem .Cells(lig, "F").Offset(-1, 1) End If Next n Else ComboBox_Find_SiteTag.Clear End If End With End Sub
Pas de recherche inutile et en effet c'est la End(xlDown qui pose soucis. -
-
-
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
c'est la ligne 28 qui devrait être:Set SearchRange = .Range(Selection , Selection.End(xlDown))
le premier offset est inutile, le second nuisible.-
-
Déolé de te déranger, j'ai encore une petite questions,
voilà, maintenant que j'ai rempli le combobox, , j'ai par exemple 2 autres textbox qui me permet d'afficher les valeurs de colonne H et I, selon la valeur sélectionné de Combobox.
par exemple si on sélectionne la valeur 4 de combobox , je veux qu'on affiche les info de cette ligne qui sont dans les colonne H et I dans les Textbox. (descrip 4 et Type 4)
voir photo ci-dessous.
-
-
Bonjour,
Vos 2 solutions marchent bien.
Merci. :)
Bonne journée.