Remplir combobox selon conditon

Résolu/Fermé
New_VBA_User Messages postés 82 Date d'inscription mardi 27 août 2019 Statut Membre Dernière intervention 3 octobre 2019 - Modifié le 2 oct. 2019 à 16:47
New_VBA_User Messages postés 82 Date d'inscription mardi 27 août 2019 Statut Membre Dernière intervention 3 octobre 2019 - 3 oct. 2019 à 13:35
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

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 2 oct. 2019 à 17:22
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
1
New_VBA_User Messages postés 82 Date d'inscription mardi 27 août 2019 Statut Membre Dernière intervention 3 octobre 2019
Modifié le 2 oct. 2019 à 17:09
ç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.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > New_VBA_User Messages postés 82 Date d'inscription mardi 27 août 2019 Statut Membre Dernière intervention 3 octobre 2019
2 oct. 2019 à 17:28
je pense que tu peux éviter qu'il aille jusqu'à la fin en remplissant la cellule 2 lignes après la dernière valeur utile de la colonne F. ou changer ta logique, et, au lieu du for each, descendre jusqu'à rencontrer une cellule vide.
entre-temps, j'ai ajouté un exemple en #1.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
2 oct. 2019 à 18:23
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.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
2 oct. 2019 à 19:02
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).
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
3 oct. 2019 à 06:44
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
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
2 oct. 2019 à 18:59
c'est la ligne 28 qui devrait être:
Set SearchRange = .Range(Selection , Selection.End(xlDown))

le premier offset est inutile, le second nuisible.
1
New_VBA_User Messages postés 82 Date d'inscription mardi 27 août 2019 Statut Membre Dernière intervention 3 octobre 2019
3 oct. 2019 à 09:33
Merci, c'est top.
0
New_VBA_User Messages postés 82 Date d'inscription mardi 27 août 2019 Statut Membre Dernière intervention 3 octobre 2019
3 oct. 2019 à 11:03
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.

0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > New_VBA_User Messages postés 82 Date d'inscription mardi 27 août 2019 Statut Membre Dernière intervention 3 octobre 2019
3 oct. 2019 à 12:20
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.
0
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
3 oct. 2019 à 13:35
ok, c'est- ce que j'ai fait.
Merci.
0
New_VBA_User Messages postés 82 Date d'inscription mardi 27 août 2019 Statut Membre Dernière intervention 3 octobre 2019
3 oct. 2019 à 09:33
Bonjour,

Vos 2 solutions marchent bien.

Merci. :)

Bonne journée.
0