Remplir combobox selon conditon [Résolu]

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
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
8707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 octobre 2019
435
1
Merci
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

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 63012 internautes nous ont dit merci ce mois-ci

New_VBA_User
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
> yg_be
Messages postés
8707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 octobre 2019
-
Merci, ça marche.
f894009
Messages postés
14789
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 octobre 2019
1177 -
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
8707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 octobre 2019
435 > f894009
Messages postés
14789
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 octobre 2019
-
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).
f894009
Messages postés
14789
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 octobre 2019
1177 -
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
New_VBA_User
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
-
Merci.
Commenter la réponse de yg_be
Messages postés
8707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 octobre 2019
435
1
Merci
c'est la ligne 28 qui devrait être:
Set SearchRange = .Range(Selection , Selection.End(xlDown))

le premier offset est inutile, le second nuisible.

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 63012 internautes nous ont dit merci ce mois-ci

New_VBA_User
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
-
Merci, c'est top.
New_VBA_User
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.

yg_be
Messages postés
8707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 octobre 2019
435 > New_VBA_User
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.
New_VBA_User
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
> yg_be
Messages postés
8707
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 octobre 2019
-
ok, c'est- ce que j'ai fait.
Merci.
Commenter la réponse de yg_be
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
0
Merci
Bonjour,

Vos 2 solutions marchent bien.

Merci. :)

Bonne journée.
Commenter la réponse de New_VBA_User