Listbox recherche

Résolu
Niko ElMoche Messages postés 3 Statut Membre -  
Niko ElMoche Messages postés 3 Statut Membre -
Bonjour,

Je debute dans VBA Excel 2003, et la je plante vraiment sur un probleme!

Voici mon probleme:

J'ai une base de donnee sur un stock acier (ou on peu retrouver dans la colonne A le numero de reference de l'acier, la colonne B la nuance de l'acier, ... et plein d'autre info jusqu'a la colonne J)

J'ai un UserForm pour effectuer une recherche par un numero de reference. Jusque la aucun soucis!

A partir de maintenant il m'a ete demande d'effectuer une recherche par nuance! Et la c'est plus dur hehe! Puisque je voudrai afficher dans un listbox dans l?userform toute les lignes ou apparaissent la recherche!

Alors si quelqu'un peu me donner un coup de main sur le code ca pourrai etre super cool!

Bon voila j'espere que j'ai ete assez clair!

A

1 réponse

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    1- il te faut une listbox multicolonnes (affichage des lignes - colonnes de A à J)
    2- il te faut boucler sur toutes les lignes de ta feuille et, si colonne B est égal au contenu d'une combobox (par exemple combobox1 contiendrait toutes les nuances) alors on ajoute la ligne à la listbox.
    Un exemple d'une listbox multicolonnes (extrait de ce tutoriel) :
    Code pour définir ta listbox, au chargement de l'userform :
    Private Sub UserForm_Initialize()
        'Définit le nombre de colonnes dans la ListBox
        ListBox1.ColumnCount = 10
        
        '---
        'Définit la largeur des colonnes d'une ListBox:
        'Par défaut, la largeur des colonnes est de 72 points
        '(72 points = 1 pouce)
        ListBox1.ColumnWidths = "50;80;10;60;50;70;50;60;50;70"     
            '---
            'Il est aussi possible de définir la dimension des colonnes en centimètres
            'ListBox1.ColumnWidths = "2 cm; 1,5 cm ......" 
            '---
        '---
    End Sub

    Code lorsque tu choisis une nuance dans ta combobox1 :
    Private Sub ComboBox1_Change()
        Dim Col As Byte
        Dim Lign As Long, DrLig As Long
    With Sheets("Feuil1") '===> A ADAPTER le nom de la feuille
        DrLig = .Range("A" & Rows.Count).End(xlUp).Row
        For Lign = 1 To DrLig        
            'Ajoute une ligne et insère une donnée dans la colonne de gauche
            ListBox1.AddItem .Cells(Lign, 1)        
            'Ajoute des données dans les colonnes de droite
            For Col = 1 To 10
                ListBox1.List(ListBox1.ListCount - 1, Col) = .Cells(Lign, Col)
            Next Col
        Next Lign
    End With
    End Sub

    Ces deux codes sont donnés à titre d'exemple. Ils n'ont pas été testé, donc il est probable qu'ils fonctionnent mal!!!
    0
    1. bg62 Messages postés 23433 Date d'inscription   Statut Modérateur Dernière intervention   2 435
       
      faut pas l'écouter ... lui ... il poste toujours à l'heure de l'apéro ...
      salut 'pijaku' :)
      0
    2. Niko ElMoche Messages postés 3 Statut Membre
       
      Salut!
      Déjà un grand merci pour la réponse!
      Par contre je suis désolé mais j'ai encore un petit problème avec (ouai, j'avais prévenu je suis débutant héhé!).
      Du coup j'ai inséré tes code (en modifiant les info nécessaire pour mon fichier), et la j'ai un message d'erreur.
      "Erreur d'Exécution '380': Impossible de définir la propriété List. Valeur de propriété non valide"! Du coup je me retrouve bloquer et je ne vois pas du tout quoi faire!

      Je te passe le code que j'ai entrée (avec le code pour insérer les valeurs dans le ComboBox):

      ---

      Private Sub UserForm_Initialize()
      ListBox1.ColumnCount = 10
      ListBox1.ColumnWidths = "50;80;10;60;50;70;50;60;50;70"
      End Sub

      Private Sub ComboBox1_Change()
      Dim Col As Byte
      Dim Lign As Long, DrLig As Long
      With Sheets("TAF")
      DrLig = .Range("A" & Rows.Count).End(xlUp).Row
      For Lign = 1 To DrLig
      ListBox1.AddItem .Cells(Lign, 1)
      For Col = 1 To 10
      ListBox1.List(ListBox1.ListCount - 1, Col) = .Cells(Lign, Col) ' C'est ici visiblement qu'il y a un soucis!
      Next Col
      Next Lign
      End With
      End Sub


      Private Sub ComboBox1_DropButtonClick()
      Call NuanceList
      End Sub

      Function NuanceList()
      Dim etat As Integer
      ComboBox1.RowSource = "Accueil!S2:S10"
      End Function

      ---

      Voila, merci d'avance pour le coup de main!
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      à bg62 :
      Salut Bernard,
      C'est toujours l'heure de l'apéro

      à Niko ElMoche : je reviens dans 5 minutes...
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Simple question de logique et d'adaptation......
      Private Sub UserForm_Initialize() 
      Dim j As Integer 
      
      'Remplir un Combobox sans doublons 
      'http://silkyroad.developpez.com/VBA/ControlesUserForm/#LII-F 
          'Récupère les données de la colonne S feuille Accueil... 
      With Sheets("Accueil") '==> A ADAPTER pour récupérer les bonnes données 
          For j = 2 To .Range("B" & Rows.Count).End(xlUp).Row 
              ComboBox1 = .Range("S" & j) 
              '...et filtre les doublons 
              If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem .Range("S" & j) 
          Next j 
      End With 
      ListBox1.ColumnCount = 10 
      ListBox1.ColumnWidths = "50;80;50;60;50;70;50;60;50;70" 
      End Sub 
      
      Private Sub ComboBox1_Change() 
      Dim Col As Byte 
      Dim Lign As Long, DrLig As Long 
      If ComboBox1 = "" Then Exit Sub 
      ListBox1.Clear 
      With Sheets("TAF") 
          DrLig = .Range("A" & Rows.Count).End(xlUp).Row 
          For Lign = 1 To DrLig 
              If .Cells(Lign, 2) = ComboBox1 Then 
                  ListBox1.AddItem .Cells(Lign, 1) 
                  For Col = 1 To 9 
                      ListBox1.List(ListBox1.ListCount - 1, Col) = .Cells(Lign, Col + 1) 
                  Next Col 
              End If 
          Next Lign 
      End With 
      End Sub


      Un classeur exemple????? Sisi c'est cadeau!
      0
    5. Niko ElMoche Messages postés 3 Statut Membre
       
      Year! Merci beaucoup ca marche super!
      Desole pour le derangement hehe et encore merci!
      0