Bonjour, et j'espère que je ne me suis pas trompé de section pour mon post:
Voila mon problème :
je suis débutant en programmation, et 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)
J'ai trouvé la méthode "Array" quand j'ai enregistrer une macro et que j'ai fait cocher mes cases dans le menu de tri mais quand je le fais a la souris, il affiche tous les choix, et quand je le fait par la macro avec les variable, il ne me fait pas la même chose ( au mieux, il les fait défiler et s'effacer après...
J'ai un petit doute aussi sur le fait de mettre les variable a 0 quand je ne coche pas la case...
4jours que je suis la dessus, et je commence a devenir fou.
Merci d'avance pour votre aide.
Voila mon bout de code de ma checkbox, je voulais poser le fichier, mais je n'ai pas trouvé comment insérer une pièce joint...
Option Explicit
Public a1 As Integer
Public a2 As Integer
Public b1 As Integer
Public b2 As Integer
Public b3 As Integer
Public c1 As Integer
Public c2 As Integer
Public d1 As Integer
Public d2 As Integer
Public d3 As Integer
Public e1 As Integer
Public e2 As Integer
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
a1 = 22
a2 = 47
Else
a1 = 0
a2 = 0
End If
End Sub
Private Sub CheckBox2_Click()
If CheckBox2.Value = True Then
b1 = 143
b2 = 163
b3 = 301
Else
b1 = 0
b2 = 0
b3 = 0
End If
End Sub
Private Sub CheckBox3_Click()
If CheckBox3.Value = True Then
c1 = 401
c2 = 402
Else
c1 = 0
c2 = 0
End If
End Sub
Private Sub CheckBox4_Click()
If CheckBox4.Value = True Then
d1 = 407
d2 = 426
d3 = 462
Else
d1 = 0
d2 = 0
d3 = 0
End If
End Sub
Private Sub CheckBox5_Click()
If CheckBox5.Value = True Then
e1 = 223
e2 = 314
Else
e1 = 0
e2 = 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, b3, c1, c2, d1, d2, d3, e1, e2)
Unload UserForm1
End Sub
A voir également:
[Déplace]VBA EXCEL : macro pour filtrer avec plusieurs choix:
Très abstrait, tout ça et parfois incompréhensible, faute de phrase trop longue ou de manque de ponctuation :
J'ai trouvé la méthode "Array" quand j'ai enregistrer une macro et que j'ai fait cocher mes cases dans le menu de tri"
Tu veux dire dans le menu qui se déroule lorsque tu cliques sur le triangle placé à droite du nom de la colonne et qui te propose "(Sélectionner tout)" ou les cases à cocher de chaque item ?
On va supposer que c'est bien ça (Excel 2007 et supérieur)
mais quand je le fais a la souris, il affiche tous les choix Euh, à la souris ... comment les as-tu cochées avant ?
au canif ?
Parles-tu encore de ce même menu de sélection dont je viens de parler ?
et quand je le fait par la macro avec les variable, il ne me fait pas la même chose ..."
Que valent tes variables au moment de l'exécution de la ligne du filtre ? Ont-elles les valeurs correctes ?
Où as-tu trouvé cette syntaxe
Criteria1:= Array(a1, ...
Es-tu sûr qu'elle soit légale ?
Dans l'aide il est bien dit que :
- les critères doivent être des chaîne de caractères, précédés par un symbole de comparaison.
- chaque critère doit être séparé du suivant par une contrainte définissant le type de filtre (Ou, Et, 10 premiers ...)
Je ne vois pas tout ça dans ta syntaxe, d'où l'interrogation sur la véracité de cette syntaxe à base de Array
(3'30 plus tard)
Par curiosité, j'ai tapé cette chaine dans Bing :
Criteria1:=Array
et je suis tombé sur plusieurs blogs où la syntaxe est clairement différente.
Celle-ci devrait fonctionner :
# Les critères doivent en effet être des textes précédés du comparateur. Il te faut donc corriger ta syntaxe.
- Au lieu d'utiliser des variables numériques Integer, il faut déclarer ces variables "As String".
- Au lieu de rentrer, par exemple,
b1 = 143
il faut utiliser la bonne syntaxe :
b1 = "=143"
# Il te manque l'opérateur de comparaison en dernier paramètre :
..., e1, e2) , Operator:=xlFilterValues
Un peu de curiosité t'aurait épargné 4 jours de besogne ...
Par contre, passe un peu plus de temps à te relire et à te mettre dans la peau de qqun qui ne connait rien à ton problème.
Fais de courtes phrases,
passe à la ligne,
utilise les artifices d'apparence (gras, italique, couleur, taille ...)
utilise la ponctuation - elle a son importance,
enlève les mots superflus qui encombrent,
optionnellement, corrige les fautes.
Et surtout, relis toi, 2 fois; ça prend 1 minute.
Si toi tu as du mal à te relire, à te comprendre, nul doute que les autres aussi.
Vala
Jack, =fr MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
PS : Je viens de faire l'essai et la syntaxe de type chaine peut se passer du signe =
Tu peux mettre tes chiffres seuls, mais dans une variable chaine, sinon Array ne fonctionnera pas.
Encore désolé pour les phrases incompréhensibles, j'ai pas encore l'habitude de poster des messages sur des forums comme celui-ci, d'habitude, je tape mon problème sur google et je me contente de trouver les réponses sur les forums quand les gens ont eu presque le même soucis que moi!!
(Pour la curiosité, c'est pas faute d'avoir essayer, j'ai tout essayé comme recherche sur Google, mais c'est vrai que "Array", ça me serait jamais venu à l'esprit!)
On m'a aussi donné une autre méthode, J'essaye tout ça, et je reviens pour vous donner ma solution finale, et clôturer la discussion!!!
Donc! encore merci a toi Jack.
Pour résoudre mon problème, j'ai donc écouter les conseils de jack :
-Déclarer mes variables en chaines de caractères.
-Mis des guillemets quand j'attribue une valeur à mes variables
-Ajouter un opérateur xlFilterValues à la fin de ma méthode "Array"
Je vous met le code pour ceux que ça pourrait intéresser:
Option Explicit
Public a1 As String
Public a2 As String
Public b1 As String
Public b2 As String
Public c1 As String
Public c2 As String
Public c3 As String
Public c4 As String
Public d1 As String
Public d2 As String
Public e1 As String
Public e2 As String
Public f1 As String
Public f2 As String
Public f3 As String
Public g1 As String
Public g2 As String
Public h1 As String
Public i1 As String
Public i2 As String
Public i3 As String
Public i4 As String
Public j1 As String
Public j2 As String
Public j3 As String
Sub CheckBoxbielle_Click()
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()
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()
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()
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()
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, j1, j2, j3), Operator:=xlFilterValues
Unload UserForm2
Range("D5").Select
ActiveWorkbook.Worksheets("synthese des stocks").AutoFilter.Sort.SortFields. _
Clear
ActiveWorkbook.Worksheets("synthese des stocks").AutoFilter.Sort.SortFields. _
Add Key:=Range("D5:D1043"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("synthese des stocks").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Merci encore de l'aide!
Vous n’avez pas trouvé la réponse que vous recherchez ?
PS : Attention aux noms des variables.
E1 ou E2 pourraient être interprétés comme des exposants de 10 dans la notation de chiffres. Ce qui donnerait des erreurs pas toujours faciles à comprendre.