Saisie intuitive et filtrage auto sur colonne
Le
Apitos

Bonjour à tous,
Peut-on réaliser cela :
Lors de la saisie dans la cellule A2, un filtre automatique est appliquer s=
ur la colonne A selon ce qui est écrit en A2.
La même opération sera exécutée sur les colonnes B, C e=
t D selon la saisie en B2, C2 et D2.
Merci d’avance.
Peut-on réaliser cela :
Lors de la saisie dans la cellule A2, un filtre automatique est appliquer s=
ur la colonne A selon ce qui est écrit en A2.
La même opération sera exécutée sur les colonnes B, C e=
t D selon la saisie en B2, C2 et D2.
Merci d’avance.
D'après Apitos
on peut :
mettre ce type de code dans la feuille de calcul concernée
----------------------
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Range("$a$4:$d$50").AutoFilter Field:=1, Criteria1:="="
& Range("a2").Value & "*", _
Operator:=xlAnd
ActiveSheet.Range("$a$4:$c$50").AutoFilter Field:=2, Criteria1:="=" &
Range("b2").Value & "*", _
Operator:=xlAnd
ActiveSheet.Range("$a$4:$c$50").AutoFilter Field:=3, Criteria1:=">" &
Range("c2").Value, _
Operator:=xlAnd
End Sub
--------------------------
les deux premiers utilisent "commence par" et le 3ème "plus grand que"
flemme de mettre le quatrième ;-)
en a4:d4 on a les en têtes de colonne
attention laisse a3:d3 vide sinon le filtre a tendance à s'emmêler un
peu
et si tu n'arrives pas à trouver la syntaxe de ton filtre, tu le crées
en enregistrement de macro et tu adaptes ;-)
cdlt
--
-
ceoendant les filtres cachent des lignes entières donc les filtres des
4 colonnes se surajoutent ce n'est pas indépendant
cdlt
--
-
Le filtre n'est pas appliqué en même temps de la saisie des carac tères en A2.
Je crois qu'il n'y a pas dâévénement Onchage des cellules ?
il est appliqué dès qu'on a validé la saisie en a2
(ce n'est pas du javascript)
cdlt
--
-
D'après Apitos
en fait créer une zone de texte de formulaire (textbox) en haut de
chaque colonne fera ce que tu souhaites
tu mets la propriété linkedcell à a2 pour textbox1 etc. comme ça tu
peux récupérer les valeurs sans changer le reste de ta feuille
avec ce genre de code (dans la feuille)
je suppose que tes en-têtes de colonne sont en a3:d3
-----------------
Private Sub TextBox1_Change()
ActiveSheet.Range("$a$3:$d$100").AutoFilter Field:=1, Criteria1:="=" &
TextBox1.Value & "*", _
Operator:=xlAnd
End Sub
Private Sub TextBox1_Change()
ActiveSheet.Range("$b$3:$d$100").AutoFilter Field:=2, Criteria1:="=" &
TextBox1.Value & "*", _
Operator:=xlAnd
End Sub
etc.
---------------------------------
ci-dessus les filtres de colonnes se rajoutent
si tu mets aussi
--------------------
Private Sub TextBox1_LostFocus()
Range("a3:d3").AutoFilter
End Sub
Private Sub TextBox2_LostFocus()
Range("D6:G6").AutoFilter
End Sub
-----------------
quand tu changes de colonne le filtre se réinitialise donc ça filtre
successivementcolonne par colonne
à toi de voir
cdlt
--
-
D'après Apitos
en fait créer une zone de texte de formulaire (textbox) en haut de
chaque colonne fera ce que tu souhaites
tu mets la propriété linkedcell à a2 pour textbox1 etc. comme ça tu
peux récupérer les valeurs sans changer le reste de ta feuille, tu peux
mettre ta zone de texte au dessus de la cellule
avec ce genre de code (dans la feuille)
je suppose que tes en-têtes de colonne sont en a3:d3 (tu peux masquer
la ligne ça ne change rien)
par défaut les filtres de colonnes se rajoutent
-----------------
Private Sub TextBox1_Change()
ActiveSheet.Range("$a$3:$d$100").AutoFilter Field:=1, Criteria1:="=" &
TextBox1.Value & "*", _
Operator:=xlAnd
End Sub
Private Sub TextBox2_Change()
ActiveSheet.Range("$b$3:$d$100").AutoFilter Field:=2, Criteria1:="=" &
TextBox1.Value & "*", _
Operator:=xlAnd
End Sub
etc.
---------------------------------
si tu mets aussi
--------------------
Private Sub TextBox1_LostFocus()
Range("a3:d3").AutoFilter
End Sub
Private Sub TextBox2_LostFocus()
Range("D6:G6").AutoFilter
End Sub
-----------------
quand tu changes de colonne le filtre se réinitialise donc ça filtre
successivement colonne par colonne
à toi de voir
cdlt
--
-
D'après Apitos
en fait créer une zone de texte de formulaire (textbox) en haut de
chaque colonne fera ce que tu souhaites
tu mets la propriété linkedcell à a2 pour textbox1 etc. comme ça tu
peux récupérer les valeurs sans changer le reste de ta feuille, tu peux
mettre ta zone de texte au dessus de la cellule
avec ce genre de code (dans la feuille)
je suppose que tes en-têtes de colonne sont en a3:d3 (tu peux masquer
la ligne ça ne change rien)
par défaut les filtres de colonnes se rajoutent
-----------------
Private Sub TextBox1_Change()
ActiveSheet.Range("$a$3:$d$100").AutoFilter Field:=1, Criteria1:="=" &
TextBox1.Value & "*", _
Operator:=xlAnd
End Sub
Private Sub TextBox2_Change()
ActiveSheet.Range("$b$3:$d$100").AutoFilter Field:=2, Criteria1:="=" &
TextBox1.Value & "*", _
Operator:=xlAnd
End Sub
etc.
---------------------------------
si tu mets aussi
--------------------
Private Sub TextBox1_LostFocus()
Range("a3:d3").AutoFilter
End Sub
Private Sub TextBox2_LostFocus()
Range("a3:d3").AutoFilter
End Sub
-----------------
quand tu changes de colonne le filtre se réinitialise donc ça filtre
successivement colonne par colonne
à toi de voir
cdlt
--
-
http://www.cjoint.com/c/FLmqtkqKdKM
Mais quand je mets un "2" dans la première TextBox, je nâobti ens aucun résultat (visible au mois) et quand j'efface ce "2" le filtr e reste toujours figé ...?
D'après Apitos
d'une part si on veut que ça fonctionne avec * il faut mettre les
cellules de la colonne A en mode texte
sinon on ne peut utiliser que > < ou = (nombres !)
ensuite trop de copier-coller lol
Private Sub TextBox1_Change()
ActiveSheet.Range("$A$4:$G$4").AutoFilter Field:=1, Criteria1:="=" &
TextBox1.Value & "*"
End Sub
le premier ça va
Private Sub TextBox2_Change()
ActiveSheet.Range("$A$4:$G$4").AutoFilter Field:=2, Criteria1:="=" &
TextBox2.Value & "*", Operator:=xlAnd
End Sub
mais pour le deuxième et les suivants il faut changer àchaque fois le
champ
Field:=2
ET le nom de la zone de texte
TextBox2.Value
tel quel tous les filtres vont s'ajouetr
si tu veux qu'ils soient indépendants ajouter des
Private Sub TextBox1_LostFocus()
Range("a4:g4").AutoFilter
End Sub
Private Sub TextBox2_LostFocus()
Range("a4:g4").AutoFilter
End Sub
cdlt
--
-
Comme je cherche par lâutilisation du filtre à ne pas accepter des valeurs existantes, alors la ligne "A2:G2" nâest pas ajoutà ©e dans le tableau en dessous que si elle ne contient pas de doublons.
Voila ou jâen suis avec le code :
En colonne C quand je saisi "1000", le filtre ne trouve pas cette valeur da ns le tableau, pourtant jâai bien utilisé un "=" dans le cri tère de filtrage.
Le même critère est utilisé pour filtrer les dates.
http://www.cjoint.com/c/FLntmYIeXbq