Listbox click pour remplir une autre listbox

FaruSZ

XLDnaute Occasionnel
Bonjour,

J'ai 2 listboxes, la 1ere se rempli a partir des données qui sont dans la feuille "Verif_M1" colonne A comme suit:

aaa.JPG


la 2eme se remplit en cliquant sur un élément de la 1ere listbox par exemple 001-10-20-M1-F j'aurai tous ce qui est en ligne 2 de la colonne B a la dernière colonne qui s'affiche dans ma 2eme liste:

j'ai rédigé le code suivant mais ca ne marche pas:
VB:
Private Sub ListBox1_Click()
curVal = Me.ListBox1.Value
Set c = ActiveWorkbook.Worksheets("Verif_M1").Rows(1).Find(curVal, lookat:=xlWhole)
If c.Offset(1, 0).Value = "" Then Exit Sub

Set Rng = Range(c.Offset(1, 0), c.End(xlDown))
ListBox2.Clear
If Rng.Rows.Count = 1 Then ListBox2.AddItem c.Offset(1, 0).Value
If Rng.Rows.Count > 1 Then ListBox2.List = Application.Transpose(Rng)
End Sub

l'erreur est: variable objet ou variable bloc non défini ( ligne : If c.Offset(1, 0).Value = "" Then Exit Sub)
 

Pièces jointes

  • Gestion_Lames.xlsm
    96.6 KB · Affichages: 27

Dudu2

XLDnaute Barbatruc
Bonjour,
Difficile de trouver le contexte pour tester. J'ai donc dû créer une fonction d'affichage et remplissage de la ListBox1 du UserForm UF_Verif_M1. C'est quand même bien utile de se mettre à la place des autres avant de demander de l'assistance pour un peu leur faciliter la tâche et obtenir des réponses.

VB:
Private Sub ListBox1_Click()
    Dim curVal As Variant
    Dim c As Range
    Dim Rng As Range
    
    With ActiveWorkbook.Worksheets("Verif_M1")
        curVal = Me.ListBox1.Value
        Set c = .Columns(1).Find(curVal, lookat:=xlWhole)
        If c Is Nothing Then Exit Sub
        If IsEmpty(c.Offset(0, 1)) Then Exit Sub
        
        Set Rng = c.Offset(0, 1).Resize(1, .Cells(c.Row, Columns.Count).End(xlToLeft).Column - 1)
        ListBox2.Clear
        If Rng.Cells.Count = 1 Then
            ListBox2.AddItem Rng.Value
        Else
            ListBox2.List() = Application.Transpose(Rng)
        End If
    End With
End Sub
 

FaruSZ

XLDnaute Occasionnel
Bonjour,
Difficile de trouver le contexte pour tester. J'ai donc dû créer une fonction d'affichage et remplissage de la ListBox1 du UserForm UF_Verif_M1. C'est quand même bien utile de se mettre à la place des autres avant de demander de l'assistance pour un peu leur faciliter la tâche et obtenir des réponses.

VB:
Private Sub ListBox1_Click()
    Dim curVal As Variant
    Dim c As Range
    Dim Rng As Range
   
    With ActiveWorkbook.Worksheets("Verif_M1")
        curVal = Me.ListBox1.Value
        Set c = .Columns(1).Find(curVal, lookat:=xlWhole)
        If c Is Nothing Then Exit Sub
        If IsEmpty(c.Offset(0, 1)) Then Exit Sub
       
        Set Rng = c.Offset(0, 1).Resize(1, .Cells(c.Row, Columns.Count).End(xlToLeft).Column - 1)
        ListBox2.Clear
        If Rng.Cells.Count = 1 Then
            ListBox2.AddItem Rng.Value
        Else
            ListBox2.List() = Application.Transpose(Rng)
        End If
    End With
End Sub
Merci bcp je vais simplifier mes fichiers pour pouvoir les consulter facilement.
Ca marche bien.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
À mon avis le plus pratique serait un tableau de toutes les lames avec une colonne pour chacune de ses caractéristiques, et un seul UserForm pour en ajouter, modifier ou supprimer une isolée par une combinaison des caractéristiques tapés ou sélectionnées dans des ComboBox prises en charge par un objet ComboBoxLiées mis à disposition par cette ressource :
 

FaruSZ

XLDnaute Occasionnel
Bonjour,
Difficile de trouver le contexte pour tester. J'ai donc dû créer une fonction d'affichage et remplissage de la ListBox1 du UserForm UF_Verif_M1. C'est quand même bien utile de se mettre à la place des autres avant de demander de l'assistance pour un peu leur faciliter la tâche et obtenir des réponses.

VB:
Private Sub ListBox1_Click()
    Dim curVal As Variant
    Dim c As Range
    Dim Rng As Range
   
    With ActiveWorkbook.Worksheets("Verif_M1")
        curVal = Me.ListBox1.Value
        Set c = .Columns(1).Find(curVal, lookat:=xlWhole)
        If c Is Nothing Then Exit Sub
        If IsEmpty(c.Offset(0, 1)) Then Exit Sub
       
        Set Rng = c.Offset(0, 1).Resize(1, .Cells(c.Row, Columns.Count).End(xlToLeft).Column - 1)
        ListBox2.Clear
        If Rng.Cells.Count = 1 Then
            ListBox2.AddItem Rng.Value
        Else
            ListBox2.List() = Application.Transpose(Rng)
        End If
    End With
End Sub

Bonjour.
À mon avis le plus pratique serait un tableau de toutes les lames avec une colonne pour chacune de ses caractéristiques, et un seul UserForm pour en ajouter, modifier ou supprimer une isolée par une combinaison des caractéristiques tapés ou sélectionnées dans des ComboBox prises en charge par un objet ComboBoxLiées mis à disposition par cette ressource :
Bonjour, merci pour les instructions je vais essayer de faire comme ca.
 

Dranreb

XLDnaute Barbatruc
À votre disposition pour vous aider à écrire les petites procédures qui utiliseront l'objet.
Le plus gros se fait dans la Sub UserForm_Initialize.
C'est mieux si la plage de données est sous forme de tableau Excel. Ça permet entre autre de spécifier le titre de la colonnes en guise de spécification de colonne à la méthode Add des objets ComboBoxLiées et ControlsAssociés.
 

FaruSZ

XLDnaute Occasionnel
À votre disposition pour vous aider à écrire les petites procédures qui utiliseront l'objet.
Le plus gros se fait dans la Sub UserForm_Initialize.
C'est mieux si la plage de données est sous forme de tableau Excel. Ça permet entre autre de spécifier le titre de la colonnes en guise de spécification de colonne à la méthode Add des objets ComboBoxLiées et ControlsAssociés.
Ok merci je reviens vers vous une fois que je termine de faire mon code.
 

Discussions similaires

Réponses
4
Affichages
165
Réponses
1
Affichages
204