XL 2016 Charger Combobox avec critère

vanin

XLDnaute Occasionnel
Bonjour, aidez moi s'il vous plait je suis débutant, de puis une semaine je cherche à ajouter la gestion fifo à mon fichier mais j'ai toujours pas de solution.
Je souhaite alimenter la combobox (cboServices) du userform usfDevis à partir du tableau de la feuille reception . mais la condition c'est que le combobox charge seulement les produits dont la date d'entrée est plus ancienne. exemple le cas du tableau de la feuille reception le combobox ne doit charger que les produits
TIKA 250ml_tamarin (05/05/2021) pour le produit TIKA 250ml_tamarin ,
TIKA 250ml_Bissap (19/05/2021) pour le produit TIKA 250ml_Bissap
TIKA 250ml_Ananas (19/05/2021) pour le produit TIKA 250ml_Ananas
TIKA 250ml_Mangue (19/05/2021) pour le produit TIKA 250ml_Mangue
TIKA 250ml_Mangue (05/05/2021) pour le produit TIKA 250ml_Mangue
TIKA 1L_Mangue (19/05/2021) pour le produit TIKA 1L_Mangue
Lorsqu'on clique sur le bouton ajouter,
verifier si la quantité ajoutée pour chaque produit est suffisante.
- si la quantité demandée est égale au stock du produit on ajoute le produit puis la ligne se supprime de la feuille reception. ex stock=10, qté demandée=10 donc le stock=0 donc suppression de la ligne de la feuille reception et chargement du produit dans le combobox en fonction de la date suivante.
- si la quantité demandée est superieure au stock du produit, un message pour informer de la quantité disponible puis l'utilisateur ajuste en fonction de la quantité disponible puis la ligne se supprime de la feuille reception. ex stock=10, qté demandée=15 donc si l'utilisateur corrige et ajoute les 10, le stock=0 donc suppression de la ligne de la feuille reception et chargement du produit dans le combobox en fonction de la date suivante.
- si la quantité demandée est inferieure au stock du produit, . ex stock=10, qté demandée=5, le produit est ajouté et le stock est mis à jour stock=5 donc vu que le produit a encore du stock la ligne de la feuille reception n'est pas supprimée et le combobox conserve le produit jusqu’à épuisement du stock
donc lorsque la ligne d'un produit est égale à 0, la ligne est supprimée afin qu'elle soit remplacée dans le combobox par ligne du meme produit ayant la date qui suit la date du produit supprimé.
l'idée est de facturer les premiers produits ajoutés à cause de leurs dates de péremption

je demande beaucoup mais je vous en supplie aidez moi.
 

Pièces jointes

  • Devis Zambol.xlsm
    81.7 KB · Affichages: 23

job75

XLDnaute Barbatruc
Bonsoir vanin,
VB:
Private Sub UserForm_Initialize()
Dim tablo, i&, dat, a$(), n&
tablo = [T] 'tableau structuré, matrice, plus rapide
For i = 1 To UBound(tablo)
    dat = tablo(i, 6)
    If IsDate(dat) Then If CDate(dat) <= Date Then ReDim Preserve a(n): a(n) = tablo(i, 3) & " (" & tablo(i, 2) & ")": n = n + 1
Next
If n Then cboServices.List = a Else cboServices.Clear
End Sub
Pour le reste je verrai plus tard si personne n'intervient.

A+
 

Pièces jointes

  • Devis Zambol(1).xlsm
    91.9 KB · Affichages: 3

vanin

XLDnaute Occasionnel
Bonsoir vanin,
VB:
Private Sub UserForm_Initialize()
Dim tablo, i&, dat, a$(), n&
tablo = [T] 'tableau structuré, matrice, plus rapide
For i = 1 To UBound(tablo)
    dat = tablo(i, 6)
    If IsDate(dat) Then If CDate(dat) <= Date Then ReDim Preserve a(n): a(n) = tablo(i, 3) & " (" & tablo(i, 2) & ")": n = n + 1
Next
If n Then cboServices.List = a Else cboServices.Clear
End Sub
Pour le reste je verrai plus tard si personne n'intervient.

A+
Bonjour et merci énormement pour votre aide. le combobox n'affiche que les produits TIKA 250ml_tamarin et TIKA 250ml_Cocktail et en deux fois. en fait le combobox doit lister chaque produit du tableau une seule fois en fonction de la date . la condition s'applique sur la colonne date pas sur la date de péremption. le combobox doit lister les produits dont la date de saisie est plus ancienne (colonne date)
merci encore pour votre aide
 
Dernière édition:

vanin

XLDnaute Occasionnel
Bonsoir vanin
Bonsoir le Fil (Job75) ,le Forum
je n'ai pas tout compris , mais la date a prendre en compte est celle de la Colonne 2 ou celle de la Colonne 6 ?
Bonne fin de Soirée
jean marie
Bonsoir, la date à prendre en compte est celle de la colonne 2. pour chaque produit du tableau il ne doit s'afficher que le produit dont la date de saisie (colonne2) est plus ancienne. ex
produit1 date de saisie 22/05/2021
produit1 date de saisie 05/05/2021
produit1 date de saisie 15/05/2021
produit2 date de saisie 20/05/2021
produit2 date de saisie 10/05/2021

produit1 : il s'agit ici du meme produit avec des dates de saisie differentes. il doit s'afficher dans le combobox seul celui du 05/05/2021 car des trois dates, le 05/05/2021 est la plus ancienne
produit2 : il s'agit ici du meme produit avec des dates de saisie differentes. il doit s'afficher dans le combobox seul celui du 10/05/2021 car des deux dates, le 10/05/2021 est la plus ancienne
alors des 5 enregistrement de l'exemple, la liste du combobox doit s'afficher comme suis :
produit1 ( 05/05/2021)
produit2 (10/05/2021)

merci encore pour votre aide
 

ChTi160

XLDnaute Barbatruc
Re
je ne sais pas car n'ayant pas tout compris je me suis contenté de comparer les date par rapport a Aujourd'hui et non la plus ancienne ce celles existante dans le Tableau
je regarde demain soir et si pas de solution d'ici là !
jean marie
 

job75

XLDnaute Barbatruc
Re, bonsoir ChTi160,

Je pensais qu'il s'agissait des dates de péremption puisque vous y avez mis des couleurs.

Maintenant puisque vous voulez utiliser la colonne Date et éviter les doublons :
VB:
Private Sub UserForm_Initialize()
Dim d As Object, dd As Object, tablo, i&, dat
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Set dd = CreateObject("Scripting.Dictionary")
dd.CompareMode = vbTextCompare 'la casse est ignorée
tablo = [T] 'tableau structuré, matrice, plus rapide
For i = 1 To UBound(tablo)
    dat = tablo(i, 2)
    If IsDate(dat) Then If CDate(dat) <= Date Then d(tablo(i, 1)) = "": dd(tablo(i, 3)) = ""
Next
If d.Count Then cboFamille.List = d.keys Else cboFamille.Clear
If dd.Count Then cboServices.List = dd.keys Else cboServices.Clear
End Sub
Les 2 ComboBox sont alimentées à l'aide des 2 Dictionary, fichier (2).

A+
 

Pièces jointes

  • Devis Zambol(2).xlsm
    93.1 KB · Affichages: 7

vanin

XLDnaute Occasionnel
Re, bonsoir ChTi160,

Je pensais qu'il s'agissait des dates de péremption puisque vous y avez mis des couleurs.

Maintenant puisque vous voulez utiliser la colonne Date et éviter les doublons :
VB:
Private Sub UserForm_Initialize()
Dim d As Object, dd As Object, tablo, i&, dat
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Set dd = CreateObject("Scripting.Dictionary")
dd.CompareMode = vbTextCompare 'la casse est ignorée
tablo = [T] 'tableau structuré, matrice, plus rapide
For i = 1 To UBound(tablo)
    dat = tablo(i, 2)
    If IsDate(dat) Then If CDate(dat) <= Date Then d(tablo(i, 1)) = "": dd(tablo(i, 3)) = ""
Next
If d.Count Then cboFamille.List = d.keys Else cboFamille.Clear
If dd.Count Then cboServices.List = dd.keys Else cboServices.Clear
End Sub
Les 2 ComboBox sont alimentées à l'aide des 2 Dictionary, fichier (2).

A+
merci, y'a un bug lorsque je selectionne un élément dans le combo famille. bug sur la ligne ChargeServices cboFamille.Value

Private Sub cboFamille_Change()
If cboFamille.ListIndex >= 0 Then
txtQuantite.Text = ""
ChargeServices cboFamille.Value
AutoriseAjout
End If
End Sub
 

job75

XLDnaute Barbatruc
Bonjour vanin, ChTi160, le forum,

La macro ChargeServices a pour argument une variable L As Long, il ne faut donc pas lui affecter un texte.

De toute façon la macro cboFamille_Change ne va pas du tout.

Bon on ne va pas continuer comme ça à reprendre tout le projet.

La Charte du forum stipule qu'une nouvelle question doit faire l'objet d'une nouvelle discussion.

Travaillez par vous-même et quand vous bloquez venez sur le forum avec une question.

A+
 

Discussions similaires

Réponses
0
Affichages
132
Réponses
2
Affichages
1 K

Statistiques des forums

Discussions
314 486
Messages
2 110 114
Membres
110 670
dernier inscrit
Mangouste