XL 2010 Filtre élaboré - VBA

Trinitybarb

XLDnaute Junior
Bonjour,

J'ai un document que je veux simplifier pour une collègue car il comment toujours avec quelques lignes et mais termine avec des milliers de lignes.

Donc normalement on peut y aller avec des filtes mais j'aimerais quand saisissant par exemple le # du client dans un champs, que le tableau se filtre sur le client. Si je l'enlève, le filtre s'annule, si j'inscrit le # de client ainsi que la date du jour, il y a un filtre sur chaque.

J'ai trouvé cet exemple sur internet et j'ai essayé de l'adapter mais ça ne fonctionne pas, c'est pour cela que je demande votre aide.

Ce que la personne a fait, c'est exactement cela que je veux mais pour trois possibilités de filtre : colonne client, colonne Statut et colonne Date du jour. Je vous joins mon tableau pour vous aider. Votre aide serait grandement apprécié :)

Voici ce qu'il a fait :

Pour lancer automatiquement le filtre à chaque changement:
_ quand on entre une donnée (filtre activé, la colonne est filtrée);
_ quand on change la donnée (filtre relancé, la colonne est refiltrée);
_ quand on efface la donnée (filtre désactivé, la colonne n'est plus filtrée).

Recapitulation (du fil):

1) On filtre une colonne (exemple: M2:M999) à partir d'une cellule (qui n'est pas dans cette colonne, exemple: A14);

2) Le filtre de la colonne se met à jour automatiquement à chaque changement dans la cellule (lancement automatique).


Un bout de code à mettre dans la feuille avec:

H43 = la cellule dans laquelle on entre la donnée pour le filtre
L4= la colonne qui est filtrée

Le code :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

Set Plage = Range("h43:h43")

Dim i
i = Range("H43:h43")
If i <> "" Then
ActiveSheet.Unprotect
Range("L4").AutoFilter Field:=12, Criteria1:="=" & Range("H43").Value
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True
ActiveSheet.EnableSelection = xlUnlockedCells
Range("A2").Select
Else
ActiveSheet.Unprotect
Selection.AutoFilter Field:=12
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True
ActiveSheet.EnableSelection = xlUnlockedCells
Range("H43:h43").Select
Selection.ClearContents

Range("A2").Select
End If

End Sub
 

Pièces jointes

  • Échéanchier.xlsx
    13 KB · Affichages: 73

Paf

XLDnaute Barbatruc
Bonjour,

un essai basé sur la structure du classeur joint ( qui ne correspond pas aux explications)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
If Not Intersect(Target, Range("B1:B3")) Is Nothing Then
    Set Plage = Range("A5:H" & Range("A" & Rows.Count).End(xlUp).Row)
    If Not ActiveSheet.AutoFilterMode Then Plage.AutoFilter
    Plage.AutoFilter Field:=1
    Plage.AutoFilter Field:=7
    Plage.AutoFilter Field:=5
    If Range("B1") <> "" Then Plage.AutoFilter Field:=1, Criteria1:=Range("B1")
    If Range("B2") <> "" Then Plage.AutoFilter Field:=7, Criteria1:=CDate(Range("B2"))
    If Range("B3") <> "" Then Plage.AutoFilter Field:=5, Criteria1:=Range("B3")
End If
End Sub

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 202
Messages
2 086 177
Membres
103 152
dernier inscrit
Karibu