Remplir combobox selon conditon
Résolu
New_VBA_User
Messages postés
84
Statut
Membre
-
New_VBA_User Messages postés 84 Statut Membre -
New_VBA_User Messages postés 84 Statut Membre -
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
A voir également:
- Remplir combobox vba
- Organigramme a remplir word - Guide
- Excel compter cellule couleur sans vba - Guide
- Comment remplir un document pdf - Guide
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
3 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
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.
remplace Mee par Me
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
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
c'est la ligne 28 qui devrait être:
le premier offset est inutile, le second nuisible.
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.

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.
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.
entre-temps, j'ai ajouté un exemple en #1.
. 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 SubPas de recherche inutile et en effet c'est la End(xlDown qui pose soucis.
données sont bien organisées
Non, aucune importance, car recherche dans la colonne les lignes quelque soit leur position.
La boucle permet de limiter au nombre de fois le texte contenu dans la colonne