TextBox via ListBox

Bonjour le forum,

Voilà, j'ai encore un problème

J'ai une ListBox et une TextBox. La TextBox me sert de recherche dans la ListBox. Quand je fais une recherche avec uniquement le nom du fournisseur et que je clic dessus, j'ai d'autres TextBox qui se remplissent selon une base de donné. Mais quand je désire faire une recherche soit selon le nom soit leur N°, quand je clic sur la ligne qui m’intéresse dans la ListBox, rien ne se passe.

Comment faire pour quand je recherche un fournisseur soit avec leur nom, soit avec leur numéro, mes TextBox ce remplissent selon ma feuille BD.

D'avance merci.

18forum.xlsm (30.57 Ko)

Bonjour

Un essai à tester. Te convient-il ?

Bye !

10forum-v1.xlsm (28.01 Ko)

C'est nickel !!

Mais peux-tu m'expliquer stp le changement que tu y as apporté ?

Le seul truc que je vois c'est :

    choix(i) = choix(i) & TblTmp(i, k) & "*"

au lieu de :

    choix(i) = choix(i) & TblTmp(i, k) & " * "

C'est juste ça ?

Bonjour,

Option Compare Text
Dim nomTableau, TblBD(), nbCol
Private Sub UserForm_Initialize()
 nomTableau = "Tableau1"
 nbCol = Range(nomTableau).Columns.Count
 TblBD = Range(nomTableau).Resize(, nbCol + 1).Value              ' Array: + rapide
 For i = 1 To UBound(TblBD): TblBD(i, nbCol + 1) = i: Next i      ' No enregistrement
End Sub

Private Sub TextBox1_Change()
  ColRecherche = 1
  ColRecherche2 = 2
  clé = Me.TextBox1 & "*": n = 0
  Dim Tbl()
  For i = 1 To UBound(TblBD)
    If TblBD(i, ColRecherche) Like clé Or TblBD(i, ColRecherche2) Like clé Then
        n = n + 1: ReDim Preserve Tbl(1 To 3, 1 To n)
        For k = 1 To 2: Tbl(k, n) = TblBD(i, k): Next k
        Tbl(3, n) = TblBD(i, nbCol + 1)
     End If
  Next i
  If n > 0 Then Me.Listbox1.Column = Tbl Else Me.Listbox1.Clear
End Sub

Private Sub Listbox1_Click()
  ligneEnreg = Me.Listbox1.Column(2)
  For k = 1 To nbCol
    Me("textbox" & k + 1) = TblBD(ligneEnreg, k)
  Next k
End Sub

Boisgontier

15textboxcherche.xlsm (68.46 Ko)

C'est juste ça ?

Et oui !

Bye !

Extra, merci beaucoup gmb et merci aussi à Boisgontierjacques pour ta solution qui est pas mal du tous

Version à jour,

Option Compare Text
Dim nomTableau, TblBD(), nbCol

Private Sub UserForm_Initialize()
 nomTableau = "Tableau1"
 nbCol = Range(nomTableau).Columns.Count
 TblBD = Range(nomTableau).Resize(, nbCol + 1).Value              ' Array: + rapide
 For i = 1 To UBound(TblBD): TblBD(i, nbCol + 1) = i: Next i      ' No enregistrement
 LabelsTextBox
 TextBoxRecherche_Change
End Sub

Private Sub TextBoxRecherche_Change()
  ColRecherche = 1
  ColRecherche2 = 2
  clé = Me.TextBoxRecherche & "*": n = 0
  Dim Tbl()
  For i = 1 To UBound(TblBD)
    If TblBD(i, ColRecherche) Like clé Or TblBD(i, ColRecherche2) Like clé Then
        n = n + 1: ReDim Preserve Tbl(1 To 3, 1 To n)
        For k = 1 To 2: Tbl(k, n) = TblBD(i, k): Next k
        Tbl(3, n) = TblBD(i, nbCol + 1)
     End If
  Next i
  If n > 0 Then Me.Listbox1.Column = Tbl Else Me.Listbox1.Clear
End Sub

Private Sub Listbox1_Click()
  ligneEnreg = Me.Listbox1.Column(2)
  Me.Enreg = ligneEnreg
  For k = 1 To nbCol
    Me("textbox" & k) = TblBD(ligneEnreg, k)
  Next k
End Sub
Sub LabelsTextBox()
   For c = 1 To nbCol
      Me("textbox" & c).Width = Range(nomTableau).Columns(c).Width * 1.3
      tmp = Range(nomTableau).Offset(-1).Item(1, c)
      Me("label" & c).Caption = tmp
      lg = Len(tmp): If Len(tmp) > 20 Then lg = 20
      Me("label" & c).Width = lg * 8
   Next
End Sub

Sub raz()
    For k = 1 To nbCol
      Me("textBox" & k) = ""
    Next k
    Me.TextBox1.SetFocus
End Sub

Private Sub B_sup_Click()
 If Me.Enreg <> "" Then
  If MsgBox("Etes vous sûr de supprimer " & Me.TextBox1 & "?", vbYesNo) = vbYes Then
    Range(nomTableau).Rows(Me.Enreg).Delete
    Me.Enreg = ""
    UserForm_Initialize
    raz
    Me.Enreg = Range(nomTableau).Rows.Count + 1
  End If
 End If
End Sub

Private Sub B_ajout_Click()
    raz
    Me.Enreg = Range(nomTableau).Rows.Count + 1
End Sub

Private Sub B_validation_Click()
  Enreg = Me.Enreg
  For c = 1 To nbCol
   If Not Range(nomTableau).Item(Enreg, c).HasFormula Then
     tmp = Me("textbox" & c)
     If IsNumeric(Replace(tmp, ".", ",")) And InStr(tmp, " ") = 0 Then
        tmp = Replace(tmp, ".", ",")
        Range(nomTableau).Item(Enreg, c) = CDbl(tmp)
     Else
         If IsDate(tmp) Then
           Range(nomTableau).Item(Enreg, c) = CDate(tmp)
         Else
           Range(nomTableau).Item(Enreg, c) = tmp
         End If
     End If
    Else
     Range(nomTableau).Item(Enreg - 1, c).Copy
     Range(nomTableau).Item(Enreg, c).PasteSpecial Paste:=xlPasteFormats
    End If
  Next c
  UserForm_Initialize
  raz
End Sub

Boisgontier

14textboxcherche.xlsm (68.96 Ko)

Salut Boisgontierjacques,

Tu as lu dans mes pensées

ça, je sais faire, mais tu passes pas des chemins que je ne connais pas. Je vais étudier ta solution.

Encore merci.

Rechercher des sujets similaires à "textbox via listbox"