VBA - textbox et listbox

  • Initiateur de la discussion Initiateur de la discussion jeanyves31
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jeanyves31

XLDnaute Nouveau
Bonjour

je suis en train d'essayé de créer un formulaire de saisie.
J'ai créer un TEXTBOX dans lequel je tape 1 lettre, ce qui provoque l'affichage dans ma LISTBOX de la liste de tout mes article qui commencent par a. Idem si je tape une seconde, etc
Ce code n'est pas de moi, je l'ai trouver sur des forums.
Ce que je voudrais c'est que ma LISTBOX, si le TEXTBOX est vide affiche l'ensemble de mes Articles, et la ça coince.....
voici le code qui fonctionne...
VB:
Private Sub TextBox1_Change()
Dim Plage As Range, Cell As Range
Dim Recherche$, Adresse$, Ligne&, C As Object
'ListBox1.Clear
Recherche = TextBox1.Value
Range("b2").Select
Ligne = Sheets("BD_Article").Range("b2" & "65536").End(xlUp).Row
Set Plage = Sheets("BD_Article").Range("b" & "2:" & "b" & Ligne)
With Plage
Set C = .Find(Recherche)
If Not C Is Nothing Then
    Adresse = C.Address
    Do
         If UCase(Recherche) = UCase(Left(C, Len(Recherche))) Then
            With ListBox1
                .AddItem C '
                .List(.ListCount - 1, 1) = C.Row  'Ajout mDF
            End With
         End If
        Set C = .FindNext(C)
    Loop While Not C Is Nothing And C.Address <> Adresse
End If
End With
End Sub

Private Sub UserForm_Activate()
    Label1.Caption = Worksheets("Saisie_Facture").Range(RTrim("m2")).Value
    Label2.Caption = "Date de la facture :" & Worksheets("Saisie_Facture").Range("K2").Value
    Label3.Caption = "N°: " & Worksheets("Saisie_Facture").Range("l2").Value
    Label8.Caption = "Montant de la facture: " & Format(Val(Replace(Worksheets("Saisie_Facture").Range("o2").Value, ",", ".")), "#,##0.00")

    With Sheets("Saisie_Facture").Range("a2")
    ListBox2.RowSource = Range(.Cells, .End(xlDown)(1, 7)).Address(external:=True)
    End With
    ListBox2.ListIndex = -1
End Sub

Et voici ce que j'ai ajouter pour que ma LISTBOX affiche tout mes articles
Code:
Private Sub UserForm_Initialize()
    InitList
    
End Sub


Sub InitList()
    With Sheets("BD_Article").Range("b2")
    ListBox1.RowSource = Range(.Cells, .End(xlDown)(1, 7)).Address(external:=True)
    End With
    ListBox1.ListIndex = 1
 
End Sub
Mais ca ne fonctionne pas....
si quelqu'un peut me donner quelques indications....

Merci
Jean Yves
 
Bonjour,

Exemple avec un tableau dynamique structuré nommé Tableau1

VB:
Dim f, TblBD(), NbCol
Option Compare Text
Private Sub UserForm_Initialize()
  Set f = Sheets("BD")
  Set Rng = [tableau1]
  TblBD = Rng.Value
  For i = 1 To UBound(TblBD): TblBD(i, 4) = Format(TblBD(i, 4), "0.00 €"): Next i
  NbCol = UBound(TblBD, 2)
  Me.ListBox1.List = TblBD
  Me.ListBox1.ColumnCount = NbCol
  Me.ListBox1.ColumnWidths = "50;30;100;50"
End Sub

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

Boisgontier
 

Pièces jointes

Dernière édition:
Merci Boisgontier pour ton aide, et tes fichiers ca ma bien aidé....

Petite question supplémentaire... 🙄
Grace à mon userform, je rempli mon tableau Achats. grace à ce code:

VB:
Private Sub CommandButton1_Click()
    With Sheets("Achats").ListObjects("tbl_Achats")
        .ListRows.Add alwaysinsert:=True
        .ListColumns("N_Fac").DataBodyRange(.ListRows.Count) = txt_NumFacture.Value
        .ListColumns("Date").DataBodyRange(.ListRows.Count) = TextBox4.Value
        .ListColumns("Fournisseur").DataBodyRange(.ListRows.Count) = ComboBox2.Value
        .ListColumns("Article").DataBodyRange(.ListRows.Count) = TextBox5.Value
        .ListColumns("Qte").DataBodyRange(.ListRows.Count) = TextBox2.Value
        .ListColumns("Prix UHT").DataBodyRange(.ListRows.Count) = TextBox3.Value
    End With
End Sub

Ca fonctionne, tout est copier dans mon tableau. MAIS, j'affiche la commande en cours dans un listbox, mais pour qu'il soit à jour il faut que je quitte mon userform, et le relance...

J'ai essayé avec:

Code:
ThisWorkbook.RefreshAll
Mais ca ne fonctionne pas....une autre idée?
Merci
Jean Yves
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
362
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
250
Réponses
2
Affichages
405
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
79
Réponses
3
Affichages
599
Retour