UserForm - ListBox dynamique en fonction d'une combobox

Bonjour tout le monde,

J'ai commencé un fichier dans lequel lorsque je clique sur la cellule A2 ou B2 j'ai un userform qui se lance, dans celui-ci on me demande dans une liste déroulante un nom de fournisseur (que l'on retrouve dans l'onglet BASE colonne C) puis l'épaisseur qui est la ListBox (présent aussi dans l'onglet BASE dans les colonnes allant de D à H car les épaisseurs dépendent du four).

Ce que j'aimerais réussir à faire c'est que lorsque dans ma liste déroulante je choisis un fournisseur ma liste des épaisseurs se mettent à jour en fonction du fournisseur pour qu'il ne puisse sélectionner que ce qui le concerne. Mais j'avoue que je ne sais absolument pas si c'est possible et comment cela ce passe ...

Ensuite j'aimerais que lorsque je clique sur le bouton "OK" les données sélectionner se retrouvent dans les cellules A2 (pour le fournisseur) et B2 (pour les épaisseurs).

En cliquant sur l'une ou l'autre de mes cellules les choix restent bien évidemment sélectionnés et je peux les modifier à tout moment.

Merci d'avance et j'espère avoir exprimé au mieux ma demande :)

Bonne journée à tous !

Bonjour Kinders et bienvenu, bonjour le forum,

Ton code modifié :

Private OG As Worksheet
Private OB As Worksheet

Private Sub UserForm_Initialize()
Set OG = Worksheets("Généralités")
Set OB = Worksheets("BASE")
End Sub

Private Sub ComboBox_Fournisseur_Change()
Dim LI As Integer
Dim COL As Integer

Me.ListBox_Epaisseur.Clear
LI = Me.ComboBox_Fournisseur.ListIndex + 2
For COL = 4 To 8
    If OB.Cells(LI, COL).Value <> "" Then Me.ListBox_Epaisseur.AddItem OB.Cells(LI, COL).Value
Next COL
End Sub

Bonjour ThauThème (J'adore le pseudo),

J'avoue que j'aimerais bien des explications sur ton code et comment l'intégrer, car en faisant un simple copier/coller j'obtiens directement une erreur.

Que veux dire :

LI = Me.ComboBox_Fournisseur.ListIndex + 2
For COL = 4 To 8
    If OB.Cells(LI, COL).Value <> "" Then Me.ListBox_Epaisseur.AddItem OB.Cells(LI, COL).Value
Next COL
End Sub

Je comprends que tu as fait des déclarations avant mais je ne comprends pas ce bout de code :/ tu le met directement sur la feuille ou dans le code du UserForm ? Car dans le UserForm ça ne fonctionne pas.

Merci à toi :)

Re,

Mais si ça fonctionne...

97kinders-ep-v01.xlsm (22.27 Ko)

Bonjour ThauThème,

Merci effectivement sur ton fichier ça fonctionne je pense que mon problème c'est que je n'ai pas fait les déclarations en amont ...

Du coup ça fonctionne effectivement maintenant je vais regarder comment réussir à faire que les données soit affectées dans les cellules si j'ai besoin d'aide je pourrais revenir vers toi ?

Encore merci à toi !

Edit : Ah en changeant les noms dans les colonnes je viens de tout faire buguer je vais essayer de trouver le pourquoi du comment !

Edit 2 : Je viens de comprendre qu'il va reprendre par ligne et non par colonne du coup faut que je vois comment on passe d'une recherche sur la ligne que sur la colonne

Bonjour

il faut le faire par colonnes a voir

Private Sub ComboBox_Fournisseur_Change()
Dim L As Long
Dim Col As Long

Me.ListBox_Epaisseur.Clear
Col = Me.ComboBox_Fournisseur.ListIndex + 4
    For L = 2 To OB.Cells(Rows.Count, Col).End(xlUp).Row
        Me.ListBox_Epaisseur.AddItem OB.Cells(L, Col).Value
    Next L
End Sub

A+

Maurice

Bonjour Archer,

Cela fonctionne très bien je te remercie !

Col = Me.ComboBox_Fournisseur.ListIndex + 4
    For L = 2 To OB.Cells(Rows.Count, Col).End(xlUp).Row
        Me.ListBox_Epaisseur.AddItem OB.Cells(L, Col).Value

Pourrais-tu si cela ne te dérange pas m'expliquer un peu ces lignes ? J'ai fait une recherche sur ListIndex mais je ne comprends absolument pas à quoi cela sert et comment ça fonctionne :/ et j'aimerais éviter de revenir plus tard avec une question qui pourrait être régler avec ça si je le comprend maintenant

Merci d'avance !

Bonjour le fil, bonjour le forum,

Merci à Archer d'avoir pris la relève... J'en fais de même...

La propriété ListIndex d'une combobox renvoie 0 pour le premier élément, 1 pour le second... et nombre d'éléments - 1 pour le dernier. 0 à 9 pour une Combobox de 10 éléments par exemple.

Si la liste n'a pas de doublon, tu peux déduire le numéro de la ligne (ou de la colonne) d'un élément en récupérant sa propriété ListIndex plus un nombre correspondant au décalage de la première ligne du premier élément.

Exemple : tu as alimenté ta ComboBox avec les données des cellule A2 à A11.La ligne d'un élément sélectionné correspondra à la propriété Listindex + 2

Pour des colonnes idem : tu as alimenté ta ComboBox avec les données des cellule C1 à L1. La colonne d'un élément sélectionné correspondra à la propriété Listindex + 3

Les valeurs que tu rajoutes après le ListIndex dépendent de l'emplacement où commencent les données qui alimentent la ComboBox...

Bonjour ThauThème,

Merci beaucoup pour tes explications ça devient déjà plus clair dans ma tête !

Bonne journée à vous et encore merci de l'aide !!

Rechercher des sujets similaires à "userform listbox dynamique fonction combobox"