Filtrer avec une combobox

bonjour,

ça fait un petit moment que je cherche à filtrer grâce a une combobox dans l'userform.

je m'explique : dans la feuille ( accueil) il y a le un bouton rechercher, si je veux faire une recherche avec juste le nom d'une pièce je sélectionne le bouton " rechercher par pièce" ensuite grâce a mon menu déroulant je peux sélectionner ma pièce, mais si j'ai 50 pièces avec le même nom c'est pas pratique, c'est pour ça que j'aimerai mettre un filtre quand on sélectionne la pièce ( dans la feuille inventaire).

idem pour la recherche par référence

merci d'avance

83gestion-stock5.xlsm (223.20 Ko)

Bonjour chazzy,

En supposant que le nom de pièce est ton premier critère, quel est ton second critère? La catégorie?

Tu veux quoi exactement? Lorsque tu sélectionnes ta pièce, il te demande quelque catégorie tu recherches (dans le formulaire)? Ou juste un filtre visuel (dans la page)?

En gros es-ce que tout doit se passer dans le formulaire, ou une partie dans le formulaire, et l'autre partie dans la feuille?

Qu'es-ce qui caractérise un unique produit? Nom + catégorie + référence? / Référence / Nom + catégorie?

Bonjour d3d9x,

en faite, quand tu sélectionne ta pièce à l'aide de la liste déroulante tu valide directement sur le formulaire et il va se remplir automatiquement avec les autres éléments de la ligne de la pièce.

si je prend comme pièce " demi grand ligne 20" je valide, et la il va me remplir " la catégorie" , le stock actuel etc...

donc si on a une pièce avec un nom unique on peut utiliser le formulaire sans problème, mais si on a 5 pièces qui s'appelle "demi grand" mais avec des références différentes il faudrait que le filtre laisse apparaître toute les ligne portant le nom de " demi grand" sur la feuille et pas sur le formulaire.

le filtre existe déjà en (A3) et je voudrais qu'il s'applique automatiquement après avoir validé dans le formulaire.

je viens de me rendre compte d'un problème, quand je rentre une nouvelle pièce avec le même nom qu'une pièce déjà existante mais avec une référence différente, (car on peut pas avoir 2 références identiques), si je fais une entrée ou une sortie de stock elles vont toutes être modifier .

les points les plus important sont donc " la pièce et la référence".

je sais pas si c'est très clair =)

je te renvoi le fichier avec plusieurs pièces identiques pour mieux comprendre =)

merci d3d9x =)

69gestion-stock6.xlsm (228.91 Ko)

Bonjour Chazyy,

Un essai avec un nouveau formulaire (remplaçant les 2 autres)

Cdt

Henri

87chazyy-v1.xlsm (196.38 Ko)

bonsoir Henri,

merci beaucoup pour ton aide, c'est une très bonne idée de " lié" les 2 combobox

est ce que tu pense que c'est possible aussi de faire l'inverse, c'est à dire je sélectionne ma référence et j'ai les informations ( nom de la pièce, catégorie, stock actuel etc.. ? )

j'ai un autre petit souci, quand je " crée une nouvelle pièce" dans la feuille inventaire ça insert une ligne, donc j'arrive pas a interdire les doublons avec un message d'alerte grâce à la fonction NB.SI. (... : ... ; ... ) =1

j'ai trouver un code VBA qui interdit les doublons avec le message d'alerte mais il me met quand même toute les infos de la ligne et laisse la cellule " référence " vide .

merci d'avance

Bonsoir chazyy,

Une autre version avec le bouton recherche comme le fichier initial

1. recherche par pièce

2. recherche par référence

j'ai un autre petit souci, quand je " crée une nouvelle pièce" dans la feuille inventaire ça insert une ligne, donc j'arrive pas a interdire les doublons avec un message d'alerte grâce à la fonction NB.SI. (... : ... ; ... ) =1

j'ai trouver un code VBA qui interdit les doublons avec le message d'alerte mais il me met quand même toute les infos de la ligne et laisse la cellule " référence " vide

Désolé pour ce souci, mais le VBA de ton fichier est très compliqué.

je viens de me rendre compte d'un problème, quand je rentre une nouvelle pièce avec le même nom qu'une pièce déjà existante mais avec une référence différente, (car on peut pas avoir 2 références identiques), si je fais une entrée ou une sortie de stock elles vont toutes être modifier

Logique car tu ne prends en compte que le nom de la pièce dans ton calcul. Il faudrait que dans les feuilles "Entrées" et Sorties" apparaissent également les références de la pièce. Alors une formule SOMMEPROD ferait l'affaire.

Bon WE

Cdt

Henri

85chazyy-v1bis.xlsm (206.21 Ko)

Bonjour Henri

merci beaucoup pour ton aide !!

je vais tout simplement évité de mettre deux pièce avec le même nom, ça sera plus simple =)

si c'est pas trop te demandé, j'ai peut être trouver d'ou vient le problème du doublon.

peut être que le problème vient de la ligne qui "s’insère en A4 " donc la fonction NB.SI se décale à chaque fois, donc ça ne marche pas. le mieux serait qu'à chaque nouvelle entrée ( nouvelle pièce, entrée de pièce, sortie de pièce ) la ligne passe à la suivante au lieu d'une insertion en A4.

je pense qu'il faut il faut remplacer le code dans la macro "écriture de ligne" :

If ModeLigne = "Ajout" Then

Application.ScreenUpdating = False

With Sheets("Inventaire")

.Rows(MaLigne).Select

Selection.Copy

Selection.Insert Shift:=xlDown

Selection.ClearContents

Application.CutCopyMode = False

End With

End If

mais je sais pas par quoi la remplacer ? :/

merci encore

cordialement.

Bonsoir,

Remplace ton code par celui-ci

Sub Ecrire_Pièces()
Dim MesLignes, MaLigneEntrée, MaLigneSortie As Integer
Dim MonLibellé, MaCatégorie, MaCar1, MaCar2, MaCar3, MesObservations As String
Dim Formule As String, MonStockInitial As Single

With UF_Pièces
    If .Titre.Caption = "Ajouter une Pièce" Then
        ' AJOUT *******************************************************
        ModeLigne = "Ajout"
       ' MaLigne = Range("Pièces").Row + 1
        MaLigne = Range("A" & Rows.Count).End(xlUp).Row + 1    Else
        'MODIF *******************************************************
        ModeLigne = "Modif"
    End If

et le code suivant

If ModeLigne = "Ajout" Then
    Application.ScreenUpdating = False
   ' With Sheets("Inventaire")
    '    .Rows(MaLigne).Select
     '   Selection.Copy
    '    Selection.Insert Shift:=xlDown
      '  Selection.ClearContents
     '  Application.CutCopyMode = False
    'End With
End If

De cette façon le nouvel enregistrement se placera en dernière ligne.

Cdt

Henri

bonsoir,

Ne pas tenir compte de mon message de hier.

si c'est pas trop te demandé, j'ai peut être trouver d'ou vient le problème du doublon.

peut être que le problème vient de la ligne qui "s’insère en A4 " donc la fonction NB.SI se décale à chaque fois, donc ça ne marche pas. le mieux serait qu'à chaque nouvelle entrée ( nouvelle pièce, entrée de pièce, sortie de pièce ) la ligne passe à la suivante au lieu d'une insertion en A4.

Moi je vois une formule avec SOMME.SI et non NB.SI, mais l'erreur ne vient pas de là, car après insertion de la ligne tu fais un clear.contents.

Quand tu parles de doublon, tu dois parler de la colonne Entrée et ou sortie.

Si tu ne fais pas de contrôle avec la référence, effectivement il va falloir initialiser le nom de toutes les pièces avec des noms différents.

Cdt

Henri

Bonjour Henri

j'ai enlever la fonction NB.SI, il était dans les validations de données.

oui c'est surement a cause de mon clear.contents je vais essayer ça

j'ai repris le code que tu m'avais fait pour la recherche de pièce et de référence " feuille accueil "

j'ai voulu faire le même principe pour faire une sortie en modifiant le nom des combobox bien sur mais quand je sélectionne ma référence le menu déroulant de la pièce reste vide) :/

on ma demander de faire ça car si on sort une pièce ( A ) on la sort par rapport à sa référence, mais pour être sur que c'est bien la pièce (A) et non une autre.

merci beaucoup pour ton aide !

ci-joint le fichier

Bonsoir,

Code pour la Sortie.

Private Sub CB_Pièce_AfterUpdate()
Dim Formule
'recherche nom de la pièce dans inventaire en fonction de la référence
Formule = "=sierreur(RECHERCHEV(" & Chr(34) & Me.CB_Pièce.Value & Chr(34) & "; Pièces;5;faux); " & Chr(34) & Chr(34) & ")"
Range("Cellule_Pièce").FormulaLocal = Formule
Me.CB_Référence.Value = Range("cellule_pièce").Value

'recherche du sock actuel dans inventaire en fonction de la référence
Formule = "=sierreur(RECHERCHEV(" & Chr(34) & Me.CB_Pièce.Value & Chr(34) & "; Pièces;4;faux);0)"
Range("Cellule_Travail").FormulaLocal = Formule
Me.TB_Stock_Actuel.Value = Range("Cellule_Travail").Value

End Sub

La formule viendra dans B5 de la feuille Paramètres (Cellule_Pièce à créer dans gestionnaire de noms)

désolé pour le fichier corrigé mais je ne peux pas le joindre (trop gros)

La modif des entrées et sorties ne fonctionne plus!!!

Cdt

Henri

Bonjour henri

le code pour la sortie fonctionne très bien, j'ai fait la même chose pour l'entrée.

je sais pas pourquoi le fichier est passé de 240Ko a 750 ...

Pour la modif des entrées et sorties il fallait juste supprimer

With UF_Entrées

.ET_Ligne.Caption = "Ligne " & MaLigne - 3 & " - " & MesLignes & " ligne(s) "

With UF_Sorties

.ET_Ligne.Caption = "Ligne " & MaLigne - 3 & " - " & MesLignes & " ligne(s) "

je recherche toujours mon souci de doublon mais je vais finir par trouver la solution

encore merci pour ton aide

Rechercher des sujets similaires à "filtrer combobox"