Trouver la ligne contenant le début d'une combobox

Bonjour,

je viens une nouvelle fois vous demander conseil!

Je souhaite chercher dans la colonne 2 de mon tableau 1, la cellule qui contient le début de ma combobox.

Je m'explique :

- Ma combobox est constituée de deux éléments : "élément 1" : "élément 2"

- l'élement 1 est dans la colonne 2 de mon tableau 1 (colonne C)

- l'élement 2 est dans la colonne 4 de mon tableau (colonne E)

- une seule ligne de mon tableau contient l'élément 1

Je souhaite donc trouver à partir de ma combobox2, la ligne qui contient l'élément 1

Mon code est le suivant :

Private Sub test()
dim cel as range

For Each cel In .Range("C2:C" & Sheets("Inventaire").Range("C" & Sheets("Inventaire").Rows.Count).End(xlUp).Row)
        If ComboBox2 Like cel.Value & "*" Then
            cel.Offset(0, 5) = TextBox5 'Commentaire
            cel.Offset(0, 6) = "Oui" 'Disponible
            cel.Offset(0, 8) = TextBox6.Value 'Date retour
            cel.Offset(0, 9) = "Toulouse" 'Agence - Localisation
        End If
    Next

End sub

Ce code marche sans souci, mais n'est pas du tout optimisé car il teste pour chaque ligne, alors qu'il suffit de trouver LA ligne concernée. Donc le temps d’exécution est très long.

J'ai testé :

Private Sub test()
dim lig as Long
Dim numero, materiel As String

If ComboBox2.Value <> "" Then
    x = InStr(1, ComboBox2, ":", 1)
    numero = Left(ComboBox2, x - 1)
    materiel = Right(ComboBox2, Len(ComboBox2) - x - 1)
End If

With Sheets("Inventaire").ListObjects("Tableau1")
    lig = .ListColumns(2).DataBodyRange.Find(numero.Value, LookIn:=xlValues, lookat:=xlWhole).Row
        .Range.item(lig, 8) = "Oui"
End With

End sub

Mais ca ne fonctionne pas. Le programme tourne mais la ligne n'est jamais trouvée!

On m'a parlé hier de & "*" mais je ne sais trop comment l'adapter dans ce cas là ..

Si quelqu'un à la solution je suis preneuse !

Merci d'avance !

Bonjour Prob,

Voici un essai à moitié sur la même base. On sépare la valeur de la combobox au niveau de chaque ":". On renvoie la première partie.

On cherche ensuite dans la colonne 2 la position de la cellule qui commence par vcherchee. Attention, ça ne renvoie que la première correspondance.

Si besoin, on peut rajouter un test avant...

Private Sub test()
dim lig as Long
Dim numero, materiel As String

vcherchee = split(ComboBox2.Value, ":")(0)

With Sheets("Inventaire").range("Tableau1")
    lig = application.match(vcherchee & "*", .columns(2), 0)
    .cells(lig, 8) = "Oui"
End With

End sub

Cdlt,

Merci pour ce retour !

Mais malheureusement ca ne fonctionne pas pour moi ... quand je demande MsgBox Lig, cela me renvoi 0, alors qu'il y a bien une ligne à trouver.

C'est certain ça ?

On cherche bien la partie de la valeur de la combobox avant le ":" dans la colonne 2 du tableau1 de la feuille Inventaire ?

Private Sub test()

dim lig as Long
Dim numero, materiel As String

vcherchee = split(ComboBox2.Value, ":")(0)

With Sheets("Inventaire").range("Tableau1")
    if application.countif(.columns(2), vcherchee & "*") > 0 then
        lig = application.match(vcherchee & "*", .columns(2), 0)
        .cells(lig, 8) = "Oui"
    else
        msgbox vcherchee " est introuvable !"
    end if
End With

End sub

Oui on cherche bien ça !

Et le message me dit que la valeur est introuvable..

C'est donc qu'elle est introuvable ! Aucune ligne de la colonne 2 du tableau1 de la feuille inventaire ne commence par vcherchee.

Sachant que vcherchee est la partie de la combobox avant les ":", ou, lorsqu'il n'y a pas ces ":", la valeur de la combobox toute entière.

Impossible !

voici mon useform :

capture6

La valeur de la combobox2 est : "IJI COM -3 : Kit de programmation WIJI 868MHz et analyse capteur"

donc vcherchee = "IJI COM -3"

Voici le début de mon tableau 1 qui est dans ma feuille inventaire :

capture7

Dans la colonne 2 du tableau 1, la valeur vcherchee est à la ligne 4.

Impossible hein ? Et l'espace de fin alors ! Désolé, je n'en avais pas connaissance.

Nouvelle tentative, qui je le crois sera concluante :

Private Sub test()

dim lig as Long
Dim numero, materiel As String

vcherchee = trim(split(ComboBox2.Value, ":")(0))

With Sheets("Inventaire").range("Tableau1")
    if application.countif(.columns(2), vcherchee) > 0 then
        lig = application.match(vcherchee, .columns(2), 0)
        .cells(lig, 8) = "Oui"
    else
        msgbox vcherchee " est introuvable !"
    end if
End With

End sub

Ici, plus besoin des "*", c'est une correspondance totale qu'on cherche. Mais on peut les laisser si on veut...

lig vaudra 3 car c'est la ligne 3 dans la colonne de valeurs (on ne compte pas l'en-tête). De toute façon, ça revient au même.

Cdlt,

aaaah tout s'explique alors !

Merci beaucoup, je ne connaissais pas la fonction trim !

Ah enfin !

Oui, Trim(chaine) supprime les espaces de début et de fin de chaine.

et, au cas où, application.trim(chaine) supprime tous les espaces indésirables (comme trim plus les espaces multiples en milieu de chaine). C'est l'équivalent de SUPPRESPACE.

Bonne continuation !

Cdlt,

D'accord merci pour cette info !

Rechercher des sujets similaires à "trouver ligne contenant debut combobox"