Bonjour,
J'ai un problème de tri de données que je n'arrive pas à résoudre.
J'ai partiellement résolu le problème, mais je pense que ma méthodologie n'est pas la bonne, en voici les données.
J'ai une feuille excel ou les utilisateurs doivent choisir les produits qui seront gérées par le stock.
Le stock gère 120 produits et ceux-ci sont caractérisés par 2 variantes: le nom du produit et son sous produit.
Il y'a 12 lignes de 10 produits les uns sous les autres.
L'utilisateur choisi le produit dans une liste déroulante (issue d'un tableau sur la même feuille), puis dans la case en-dessous choisit le sous-produit également dans une liste déroulante (issue d'un tableau sur la même feuille).
Mon premier problème était le suivant: le produit et le sous-produit pouvaient ne pas correspondre: pour résoudre ce problème j'ai procédé comme suit:
J'ai mis en place un code qui copie le produit choisit dans la case M50:
et la macro "Copier_Accueil"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Private Sub Worksheet_Change(ByVal Target As Range) Dim Plage As Range Application.ScreenUpdating = False 'Délimite les cellules de choix du produit Set Plage = Range("B4:K4,B8:K8,B12:K12,B16:K16,B20:K20,B24:K24,B28:K28,B32:K32,B36:K36,B40:K40,B44:K44,B48:K48") 'Sort de la routine si ce n'est pas une cellule de produit If Application.Intersect(Target, Plage) Is Nothing Then Exit Sub 'Lance la macro pour copier le produit choisi Else Application.Run "Copier_Accueil" End If 'Re-sélectionne la cellule d'origine Target.Select Application.ScreenUpdating = True End Sub
Ma liste de produit possède à sa droite des numéros uniques qui caractérisent chaque produit, une formule dans la case N50 en extrait ce numéro à partir du nom du produit de la case M50:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Sub Copier_Accueil() 'Copie la valeur du produit pour trouver les sous-produits correspondants ActiveCell.Select Selection.Copy Range("M50").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub
Formule case N50 =SI(M50="";"";RECHERCHEV(M50;H52:I142;2))
Le numéro obtenu dans la case N50 me permet d'obtenir une liste qui n'affiche que les sous-produits qui correspondent (la liste des sous-produits possède à sa droite le numéro unique qui le relie à son produit).
La formule utilisée est la suivante: =SI($M$50="";"";(SI(K52=$N$50;DECALER(K52;0;-1);"")))
J'utilise alors cette nouvelle liste déroulante comme source pour le choix par l'utilisateur du sous-produit.
Mon problème est le suivant: il éxiste plus de 300 sous produits différents, à chaque choix de l'utilisateur celui-ci doit faire dérouler l'intégralité de la liste pour parcourir les différents choix, ce n'est vraiment pas pratique lorsqu'un produit ne posséde que 2 ou 3 sous-produits.
D'après-vous est-il possible que ma nouvelle liste soit triée pour écarter les cellules blanches ? Faut-il créer une nouvelle liste qui triera la liste précédente en ommettant les cellules vides ? et si oui comment ?
Merci par avance de votre aide
Jarault
Partager