Remplir combobox selon conditon [Résolu]

Signaler
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
-
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
-
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
End(xlDown
qui 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

Messages postés
11513
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juillet 2020
659
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
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
>
Messages postés
11513
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juillet 2020

Merci, ça marche.
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020
1 306
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.
Messages postés
11513
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juillet 2020
659 >
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020

bonjour, cela est en effet plus économique, et cela suppose que les données sont bien organisées comme dans l'exemple (ce dont je préfère me méfier, d'où les recherches inutiles).
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020
1 306
Bonjour,
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
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019

Merci.
Messages postés
11513
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juillet 2020
659
c'est la ligne 28 qui devrait être:
Set SearchRange = .Range(Selection , Selection.End(xlDown))

le premier offset est inutile, le second nuisible.
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019

Merci, c'est top.
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019

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.

Messages postés
11513
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juillet 2020
659 >
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019

je ferais donc la même logique de recherche en colonne F.
ensuite, pour chaque ligne utile de la colonne F, vérifier la valeur de la colonne G, et récupérer les valeurs de H et I sur la bonne ligne.
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
>
Messages postés
11513
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juillet 2020

ok, c'est- ce que j'ai fait.
Merci.
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019

Bonjour,

Vos 2 solutions marchent bien.

Merci. :)

Bonne journée.