Affichage listbox selon tri

Bonjour,
voici mon « appli » gestion de stock.
Gestion-de-stock-consommables-informatiques.xlsm (1,8 Mo)

En partant de « Test_multipage » qui est ma page principale.
Onglet « Entrées »
Ma listbox7 affiche toutes mes entrées en stock. Jusque là aucun soucis.

Ma liste déroulante N° BL(ComboBox11) ne fonctionne pas avec toutes les valeurs. Quand la valeur contient que des chiffres cela ne marche pas. Quand il y a un caractère texte ça fonctionne. Je pense qu’il y a un soucis de format de cellule, mais impossible de trouver. Le soucis est le même pour N° commande.

D’autre part, au fur et à mesure des choix, ma listbox7 s’agrandie vers le bas. Je ne comprends pas pourquoi non plus. J’ai comparé avec ma listbox6 de l’onglet Articles et tout est identique. Pourtant celle dans Articles est nickel et ne change pas de taille en fonction des tris.

Quelqu’un aurait-il une solution pour ces 2 soucis ?

Merci

Bonjour

Ton fichier adapté

Testes et dis moi

Gestion-de-stock-consommables-informatiques (1).xlsm (1,8 Mo)

Salut FFO,

ok c’est good sur le num bl et j’ai modifié aussi sur le num commande.
J’ai vu que tu avais rajouté

    On Error Resume Next
    article = article * 1

ça veut dire quoi au juste. Mais ça ne fonctionne pas pour un champ date ?
Sur l’onglet entrées…

MERCI++

Toute donnée d’un élément d’un formulaire est sous format texte
C’est donc le cas de celle de la Combobox11 et donc de la variable qui la porte : article
Or tu la compares dans la boucle qui suit aux données de la colonne G de l’onglée « ENTREES » qui elle pour certaines sont non texte lorsque ce sont des chiffres
Seule solution pour que la comparaison puisse se faire est d’utiliser cet artifice qui est de multiplier par 1 la donnée de la Combobox11 pour qu’elle devienne au format nombre et non plus texte
Seulement si celle-ci n’est pas seulement avec des chiffres mais composée aussi de lettre ou autre l’opération de multiplication génère une erreur qui engendre un bug
Pour l’éviter lorsque ce cas se présente j’ai intégré juste avant cette ligne de code :

On Error Resume Next

Ainsi la donnée de la Combobox11 est uniquement un ensemble de chiffres en la multipliant par 1 elle devient comparable aux nombres de la colonne G onglet « ENTREES » sinon elle reste au format texte sans générer de bug et donc comparable à toutes les données de cette colonne de format texte

Voilà pour les explications

« Mais ça ne fonctionne pas pour un champ date »

Pour comparer des dates c’est un autre artifice qu’il faut utiliser :

Par exemple pour des dates au format JJ/MM/AAAA

article = Format(article,« MM/DD/YYYY »)

Ce format est à adapter en fonction de celui des dates cibles à comparer

N’oublies pas si ce que je t’ai transmis te convient de valider ma réponse

Au plaisir une autre fois

Bonjour FFO,

ok j’ai compris ton explication.

Cependant impossible d’y arriver sur le tri au format date. J’ai essayé toutes les possibilités
article = Format(article,« MM/DD/YYYY »)
article = Format(article,« DD/MM/YYYY »)
article = Format(combobox,« MM/DD/YYYY »)
article = Format(combobox,« DD/MM/YYYY »)

mais rien à faire.

Merci

Bonjour
Expliques moi comment tu opères quelle action pour quel resultat

Bonjour FFO,

en fait j’ai suivi ta procédure, que je répète pour chaque tri dans mon onglet « ENTREES »
je sélectionne ma valeur dans la liste déroulante.
exécution de la macro ComboBox_change() correspondante
la valeur de la ComboBox se met dans la variable « article »

je compare la valeur du champ article avec la 1ère valeur de la colonne correspondante de ma feuil « ENTREES »
si il trouve, on rempli une ligne de ma feuil « ENTREES FILTRE BIS »

Une fois la boucle terminée, ma listbox affiche ma feuil « ENTREES FILTRE BIS »

Si format différent pour la comparaison je rajoute sur tes conseils

On Error Resume Next
article = article * 1

ce qui fonctionne parfaitement.

Pour la comparaison sur la colonne date j’ai fait toutes les combinaisons
article = Format(article,« MM/DD/YYYY »)
article = Format(article,« DD/MM/YYYY »)
article = Format(combobox,« MM/DD/YYYY »)
article = Format(combobox,« DD/MM/YYYY »)

mais rien, je n’ai aucune correspondance.

espérant avoir été clair.

Tu ne me dis l’essentiel pour ma compréhension à savoir ce que tu utilises comme élément du formulaire pour cibler une date
Je suppose que ton choix de celle-ci s’opère sur la Combobox7 au dessus de l’intitulé « Date entrée »
A toi de me dire
Si celle-ci est bien celle utilisée lorsque je l’ouvre j’obtiens cette liste :

image

Rien à voir avec des dates

Il faut m’en dire plus sur cette opération date car là je suis perplexe quant à faire une comparaison sur une colonne date avec une donnée qui n’en est pas une

Merci de m’apporter des éclaircissements

oui c’est juste une erreur sur la version que tu as.
voici la dernière version avec la bonne liste déroulante
image

Gestion-de-stock-consommables-informatiques.xlsm (1,8 Mo)

Bon autant pour moi mais sans pouvoir tester pas toujours simple de fournir le bon remède

J’ai modifié cette ligne de code :

If Sheets(« ENTREES »).Range(« A » & I) = article Then

par

If Sheets(« ENTREES »).Range(« A » & I) = CDate(article) Then

Et bingo tout fonctionne

Essaies de ton côté

Ton fichier adapté ainsi

Gestion-de-stock-consommables-informatiques (2).xlsm (1,8 Mo)

Bingo, ça fonctionne aussi.
Mais as-tu vu que quand on sélectionne un choix via la liste déroulante, la listbox change de taille.
Surtout si tu changes plusieurs fois sur le tri N°commande…la listbox ne cesse de s’agrandir pour arriver à cacher le bouton quitter !
d’où peut venir ce soucis ?

J’avais apporté la correction adaptée dans la version précédente

Il faut agir ici

Après avoir sélectionné la Listebox il faut mettre ce paramètre dans la liste de gauche :

à False comme ceci :

Ta 2° version modifiée ainsi

Testes et dis moi

Gestion-de-stock-consommables-informatiques (2).xlsm (1,8 Mo)

super GOOD. J’ai appris pas mal de choses.
MERCI

Au plaisir de t en apprendre d autres
A bientôt peut-être

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.