Test entre une listbox et une feuille excel

Résolu
cs_Vatz Messages postés 5 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 5 janvier 2011 - 4 janv. 2011 à 17:21
cs_Vatz Messages postés 5 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 5 janvier 2011 - 5 janv. 2011 à 09:38
Bonsoir à tous,

J'ai tenté de chercher sur le forum (et ailleurs) mais je n'arrive pas à résoudre mon problème.

Le voici :
J'ai des éléments dans une listbox (qui varient selon deux combobox). Je souhaiterais faire un test entre l'élément sélectionné dans la listbox et les éléments d'une colonne sur une feuille sur excel (sachant qu'il y a forcément une unique correspondance).

Pour donner un exemple concret ma combobox me demande fruit ou légume, je choisis légume et dans ma listbox il y a tous les légumes et je sélectionne salade.

L'élément salade est dans le tableau de ma feuille 2 avec toutes les caractéristiques de celle-ci sur la ligne que je souhaite indiquer sur mon userform.

Si c'est vraiment brouillon ce que je vous raconte, je mettrai un exemple demain.


En vous remerciant par avance.

4 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
4 janv. 2011 à 18:11
Bonjour,
Si ce que tu désires c'est rechercher dans ta feuille le terme indiqué dans ta listBox, il existe plusieurs façons de faire :
Par exemple, tu pourrais parcourir ta feuille à l'aide d'une boucle For Next.
Ou utiliser la fonction FIND.

Voici un exemple avec Find :
Sub test()
Dim Mot_recherche  As String
    Mot_recherche = "toto"
Dim nomFeuil  As String
    nomFeuil = "Feuil1"

' Recherche du mot dans la feuille
Ligne_mot = cherchC(nomFeuil, Mot_recherche)

If Ligne_mot = 0 Then
    MsgBox "Le mot n'est pas trouvé"
Else
   MsgBox "Le mot est sur la ligne " & Ligne_mot
End If

End Sub

Function cherchC(nomF As String, valCherch As String) As Integer
'fonction de recherche...
'**********************************************************
' recherche la valeur 'valCherch' et nous indique le N° de ligne
' Si ne trouve pas.. retourne la valeur 0
'**********************************************************
Dim vc As Variant
Sheets(nomF).Activate
Sheets(nomF).Cells(1, 1).Activate
Set vc = Cells.Find(what:=valCherch, lookAt:=xlWhole, After:=ActiveCell, SearchOrder:=xlByColumns, SearchDirection:=xlNext, LookIn:=xlValues, MatchCase:=False, SearchFormat:=False)
If Not vc Is Nothing Then
    cherchC = vc.Row
Else
    cherchC = 0
End If
End Function



Ce code est à placer dans un Module.

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
3
cs_Vatz Messages postés 5 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 5 janvier 2011
4 janv. 2011 à 18:01
Petite MAJ,

j'ai trouvé ce que je souhaitais faire via la fonction Find

Private Sub ListBox1_Click()
temp = ListBox1.Text

With Worksheets("Isolants").Range("isolants")
Set test = .Find(temp, LookIn:=xlValues)
If Not test Is Nothing Then
Me.TextBox1.Text = "continue" 'c'est un message perso pour tester
End If
End With

End Sub


J'ai donc réussi à trouver qu'il y avait bien un élément dans ma feuille Isolants. Maintenant est-il possible de récupérer sa position (la ligne plus précisément) dans cette feuille ?

Puisque mes isolants sont triés selon les lignes et toutes les informations de lambda, CE, ACERMI ... sur les colonnes et je souhaiterais récupérer la ligne de cet élément trouver pour ajouter "automatiquement".
0
cs_Vatz Messages postés 5 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 5 janvier 2011
4 janv. 2011 à 18:21
Effectivement ton code répond à ce que j'ai demandé. Mais pas totu à fait à ce que je voulais mais ce n'est pas facile à expliquer.

Si tu comprends ce que je souhaite avoir avec mon test.index (la ligne), tu auras saisi mon problème.

Private Sub ListBox1_Click()
temp = ListBox1.Text

 With Worksheets("Isolants").Range("isolants")
  Set test = .Find(temp, LookIn:=xlValues)
    If Not test Is Nothing Then
     Me.TextBox1.Text = Sheets("Isolants").Range("isolants").Cells(test.Index, 2)
    End If
 End With
End Sub



Si j'intègre ça dans un module je fais comment pour le récupérer sur mon userform ?
0
cs_Vatz Messages postés 5 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 5 janvier 2011
5 janv. 2011 à 09:38
Niquel en fait c'est exactement ce que je voulais, mais on va dire que j'étais un peu fatigué !

Encore merci

Vatz
0
Rejoignez-nous