Filtre par valeur de cellule.
Résolu
megatronnbjja
Messages postés
67
Statut
Membre
-
megatronnbjja Messages postés 67 Statut Membre -
megatronnbjja Messages postés 67 Statut Membre -
Bonjour,
Grace à la macro suivante je filtre mon tableau en fonction des valeurs qui sont renseignées dans la ligne 1.
Le code sur le filtre fonctionne puisque dans un premier temps je l'avais écris pour chaque colonne de mon tableau.
J'ai ensuite voulu améliorer le tout grâce à une boucle For mais la les ennuis commencent.
le débogueur me dit: "Next sans For"
Si quelqu'un trouve l'erreur ou peut me donner un conseil, merci d'avance.
Megatronnbjja
Grace à la macro suivante je filtre mon tableau en fonction des valeurs qui sont renseignées dans la ligne 1.
Le code sur le filtre fonctionne puisque dans un premier temps je l'avais écris pour chaque colonne de mon tableau.
J'ai ensuite voulu améliorer le tout grâce à une boucle For mais la les ennuis commencent.
le débogueur me dit: "Next sans For"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dercol As Integer
dercol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column 'trouve la dernière colonne de la ligne
For i = 1 To dercol
If Not Intersect(Target, Range("A1", Cells(1, dercol))) Is Nothing Then
Select Case Target.Address
Case Cells(1, i)
If Target = "" Then
Range("$A$2:$AB$3000").AutoFilter Field:=i
Else
Range("$A$2:$AB$3000").AutoFilter Field:=i, Criteria1:="*" & Cells(1, i) & "*"
End If
Next i
End Select
End If
End Sub
Si quelqu'un trouve l'erreur ou peut me donner un conseil, merci d'avance.
Megatronnbjja
2 réponses
-
Bonjour
au moins une erreur
Ton dernier End if doit être placé avant Next i
ou peut être mieux
Ton if not intersect .... devrait être placé avant ta boucle For i ...
bonne suite-
En plus propre, bien que je ne comprenne pas tout
Private Sub Worksheet_Change(ByVal Target As Range) Dim dercol As Long, i As Long dercol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column 'trouve la dernière colonne de la ligne If Not Intersect(Target, Range("A1", Cells(1, dercol))) Is Nothing Then For i = 1 To dercol Select Case Target.Address Case Cells(1, i) If Target = "" Then Range("$A$2:$AB$3000").AutoFilter Field:=i Else Range("$A$2:$AB$3000").AutoFilter Field:=i, Criteria1:="*" & Cells(1, i) & "*" End If End Select Next i End If End Sub
bon courage -
Re,
Voici le lien d'un classeur qui reflète ce que je veux faire. J'ai essayé les modif que tu m'as indiquées. Aucune erreur ne s'affiche cependant aucun filtre ne s'applique....
je continue de plancher. Si tu as de nouvelles idées, je suis preneur.
https://www.cjoint.com/?0ErlIut1LHA
Merci
-
-
Bonjour,
J'ai écrit un code qui fonctionne. Dès que l'on modifie une valeur en ligne 9, le filtre se met en place.
Private Sub Worksheet_Change(ByVal Target As Range) Dim dercol As Integer, i As Long, derlig As Long dercol = Cells(10, Cells.Columns.Count).End(xlToLeft).Column 'défini la dernière colonne remplie en ligne 10 derlig = Range("A" & Rows.Count).End(xlUp).Row 'défini la dernière ligne remplie en colonne A If Not Intersect(Target, Range("A9", Cells(9, dercol))) Is Nothing Then 'Condition : si modification d'une cellule en ligne 9 For i = 1 To dercol Select Case Target.Address Case Cells(9, i).Address 'on regarde ce qu'il se passe en ligne 9 If Target = "" Then 'si la cellule est vidée Range("A10", Cells(derlig, dercol)).AutoFilter Field:=i 'critère de filtre: "" Else Range("A10", Cells(derlig, dercol)).AutoFilter Field:=i, Criteria1:="*" & Cells(9, i).Value & "*" 'si la cellule contient une valeur alors le critère de filtre est: valeur de la cellule End If End Select Next i End If End Sub