Filtre par valeur de cellule.

Résolu
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"


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
A voir également:

2 réponses

ccm81 Messages postés 11033 Statut Membre 2 433
 
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
0
ccm81 Messages postés 11033 Statut Membre 2 433
 
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
0
megatronnbjja Messages postés 67 Statut Membre
 
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
0
megatronnbjja Messages postés 67 Statut Membre
 
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
0