Filtre par valeur de cellule.

Résolu/Fermé
megatronnbjja Messages postés 63 Date d'inscription mardi 12 mars 2013 Statut Membre Dernière intervention 28 avril 2020 - Modifié par megatronnbjja le 17/05/2013 à 10:59
megatronnbjja Messages postés 63 Date d'inscription mardi 12 mars 2013 Statut Membre Dernière intervention 28 avril 2020 - 12 juin 2013 à 11:25
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

2 réponses

ccm81 Messages postés 10879 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 septembre 2024 2 415
Modifié par ccm81 le 17/05/2013 à 11:02
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 10879 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 septembre 2024 2 415
Modifié par ccm81 le 17/05/2013 à 11:09
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 63 Date d'inscription mardi 12 mars 2013 Statut Membre Dernière intervention 28 avril 2020
17 mai 2013 à 11:36
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 63 Date d'inscription mardi 12 mars 2013 Statut Membre Dernière intervention 28 avril 2020
12 juin 2013 à 11:25
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