[VBA] filtre avec plusieurs choix

guiguigui69008

XLDnaute Nouveau
Bonjour, Débutant en programmation, et n'ayant pas envie d'en faire mon métier, je créé des macro a partir de long fichiers excel, afin de créer des documents de synthèse exploitable par mes collègues.

Explication:

J'ai une liste de pièces dans mon stock, chaque pièce a une référence.
dans cette liste, je souhaite extraire une liste de certaine pièce seulement. Ces pièces sont définit.
Mes colonnes sont triées.
Mon objectif est donc de créer un formulaire, ou je coche les pièces dont je veux voir apparaitre la synthèse des stock. jusque la, pas de problème.

ma méthode était la suivante : a chaque nom de pièce dans le formulaire correspond plusieurs variable auquel j'ai attribué mes références de pièces.
Donc selon le nombre de case que je coche, je veux filtré mon tableau pour ne voir apparaitre que les pièce qui m'intéresse ( je coche la case, qui active des variable, ces variables sont des numéro qui correspondent a mes référence de pièce, ensuite je filtre avec ces références dans ma colonne référence)
Problème: il ne me les affiches pas sous forme de liste, il les affiche un par un mais les efface.

Voila mon code pour la check box dans laquelle je fais mes choix.
j'aurais voulu mettre un fichier exemple, mais la confidentialité dans mon entreprise m'en empeche...

Option Explicit
Public a1 As Integer
Public a2 As Integer
Public b1 As Double
Public b2 As Double
Public c1 As Double
Public c2 As Double
Public c3 As Double
Public c4 As Double
Public d1 As Double
Public d2 As Double
Public e1 As Double
Public e2 As Double
Public f1 As Double
Public f2 As Double
Public f3 As Double
Public g1 As Double
Public g2 As Double
Public h1 As Double
Public i1 As Double
Public i2 As Double
Public i3 As Double
Public i4 As Double

Sub CheckBoxbielle_Click()
Dim f1 As Double
Dim f2 As Double
Dim f3 As Double

If CheckBoxbielle.Value = True Then
f1 = 4495
f2 = 2370
f3 = 4781
Else
f1 = 0
f2 = 0
f3 = 0
End If
End Sub

Sub CheckBoxcremcde_Click()
Dim g1 As Double
Dim g2 As Double

If CheckBoxcremcde.Value = True Then
g1 = 5001
g2 = 3158
Else
g1 = 0
g2 = 0
End If
End Sub

Sub CheckBoxcremcomb_Click()

If CheckBoxcremcomb.Value = True Then
a1 = 3067
a2 = 4558
Else
a1 = 0
a2 = 0
End If

End Sub

Sub CheckBoxpistcde_Click()
Dim h1 As Double

If CheckBoxpistcde.Value = True Then
h1 = 4521
Else
h1 = 0
End If
End Sub

Sub CheckBoxpistcomb_Click()

If CheckBoxpistcomb.Value = True Then
b1 = 5289
b2 = 4514
Else
b1 = 0
b2 = 0
End If

End Sub

Sub CheckBoxplatine_Click()

If CheckBoxplatine.Value = True Then
c1 = 2333
c2 = 5082
c3 = 1253
c4 = 4961
Else
c1 = 0
c2 = 0
c3 = 0
c4 = 0
End If
End Sub

Sub CheckBoxrotule_Click()
Dim j1 As Double
Dim j2 As Double
Dim j3 As Double

If CheckBoxrotule.Value = True Then
j1 = 1122
j2 = 4698
j3 = 4813
Else
j1 = 0
j2 = 0
j3 = 0
End If

End Sub

Sub CheckBoxroue_Click()

If CheckBoxroue.Value = True Then
e1 = 4565
e2 = 4586
Else
e1 = 0
e2 = 0
End If
End Sub

Sub CheckBoxrouleau_Click()

If CheckBoxrouleau.Value = True Then
d1 = 4970
d2 = 2231
Else
d1 = 0
d2 = 0
End If
End Sub



Sub CheckBoxvp_Click()
Dim i1 As Double
Dim i2 As Double
Dim i3 As Double
Dim i4 As Double

If CheckBoxvp.Value = True Then
i1 = 323013
i2 = 323019
i3 = 320004
i4 = 323017
Else
i1 = 0
i2 = 0
i3 = 0
i4 = 0
End If
End Sub

Sub CommandButtonok_Click()

'affichage des pîèces souhaité
ActiveSheet.Range("$A$5:$P$1043").AutoFilter Field:=1, Criteria1:=Array(a1, a2, b1, b2, c1, c2, c3, c4, d1, d2, _
e1, e2, f1, f2, f3, g1, g2, h1, i1, i2, i3, i4)


'c1, c2, c3, c4, d1, d2, e1, e2, f1, f2, f3, g1, g2, h1, i1, i2, i3, i4
Unload UserForm2

End Sub
Voila, je sais pas si vous avez compris. j'espère que oui, parce que ca fait 2jours complet que je suis dessus et que ca marche pas.

Si vous avez des questions n'hésitez pas.

Ou si vous avez d'autre idée pour faire ce que je souhaite faire...
 

guiguigui69008

XLDnaute Nouveau
Re : [VBA] filtre avec plusieurs choix

Afin que vous puissiez mieux comprendre mon problème, et que je puisse enfin me sortir de cette galère, je vous ai fait un fichier type qui reprend mon problème en pièce jointes, le code n'est pas tout a fait le même mais c'est la même chose en plus simple.

Comme vous pourrez le voir, quand on clique sur le bouton "chercher les stock" un formulaire apparait, je voudrais que lorsque je coche une case, seule les pièces qui appartiennent au groupe apparaissent, pareil si je choisis plusieurs groupe.

Merci de votre aide
 

Pièces jointes

  • Essai tri macro.xlsm
    40.4 KB · Affichages: 88
  • Essai tri macro.xlsm
    40.4 KB · Affichages: 82
  • Essai tri macro.xlsm
    40.4 KB · Affichages: 93

youky(BJ)

XLDnaute Barbatruc
Re : [VBA] filtre avec plusieurs choix

Bonjour,
pas facile de faire un filtre avec plus de 2 critères.
Ici sur ton fichier en retour j'utilise la colonne K pour mettre des 1 si besoin et filtre sur cette colonne.
Peut être cette colonne est déja utilisée donc dans ce cas il faudra rectifier en macro pour écrire et filtrer dans une colonne qui ne sert pas.
Bon test
Plus besoin des macros en checkbox une seule pour le bouton...que voici
Code:
Sub CommandButtonok_Click()
[K:K].ClearContents 'on efface col K
Range("$A$5:$P$1043").AutoFilter  ' filtre à 0
Dim t() As Integer
Dim k%, i%, b%
If CheckBox1.Value = True Then
ReDim t(2)
i = i + 1: t(i) = 22: i = i + 1: t(i) = 47
End If
If CheckBox2.Value = True Then
ReDim Preserve t(i + 3)
i = i + 1: t(i) = 143: i = i + 1: t(i) = 163: i = i + 1: t(i) = 301
End If
If CheckBox3.Value = True Then
ReDim Preserve t(i + 2)
i = i + 1: t(i) = 401: i = i + 1: t(i) = 402
End If
If CheckBox4.Value = True Then
ReDim Preserve t(i + 3)
i = i + 1: t(i) = 407: i = i + 1: t(i) = 426: i = i + 1: t(i) = 462
End If
If CheckBox5.Value = True Then
ReDim Preserve t(i + 2)
i = i + 1: t(i) = 223: i = i + 1: t(i) = 314
End If
'cells(ligne,colonne) "11" est col K
For k = 5 To Range("A" & Rows.Count).End(3).Row
    For b = 1 To i
    If Cells(k, 1) = t(b) Then Cells(k, 11) = 1: Exit For 'on met 1 en col K
    Next
Next
'field:=11 est col K
Range("$A$5:$P$1043").AutoFilter Field:=11, Criteria1:="=1"
    Unload UserForm1
    
End Sub
Bruno
 

Pièces jointes

  • Essai tri macro.xlsm
    37.1 KB · Affichages: 78
  • Essai tri macro.xlsm
    37.1 KB · Affichages: 89
  • Essai tri macro.xlsm
    37.1 KB · Affichages: 90

guiguigui69008

XLDnaute Nouveau
Re : [VBA] filtre avec plusieurs choix

Merci de ton code youky, je l'ai essayé il marche très bien, mais on m'a donné une autre solution :

La méthode "Array" que j'utilisais, ne marche qu'avec des chaines de caractères....

C'est pour cela que dans mon cas ça ne marchait pas...
J'ai donc changé toutes mes variables en chaines de caractère, mis des guillemets quand je leur attribue une valeur, un opérateur a la fin de la méthode "Array" et le tour était joué!!!!!

Voila mon programme si tu veux regarder!

Merci encore!!!
 

Pièces jointes

  • Essai tri macro.xlsm
    40.1 KB · Affichages: 87
  • Essai tri macro.xlsm
    40.1 KB · Affichages: 98
  • Essai tri macro.xlsm
    40.1 KB · Affichages: 98

Statistiques des forums

Discussions
312 180
Messages
2 085 991
Membres
103 081
dernier inscrit
jeromeolivier.raymond@wat