tri par filtre

R

Romain

Guest
Bonjour à tous.

La tâche que je voudrais bien voir s'accomplir est la suivante :
dans la feuille Excel ci-jointe, il y a plusieurs colonnes baptisées "atténuation" et pour chacune d'entre elles je dois rentrer manuellement le filtre en sélectionnant tout le temps "supérieur ou égal à" car ce choix s'impose à chaque colonne. J'aimerais savoir si en VBA; il est possible de concocter un petit programme qui me permettrait de ne plus rentrer que la valeur minimale désirée au lieu d'enclencher le filtre manuellement à chaque fois. Savoir si il était possible d'obtenir une macro qui afficherait une fenêtre dans laquelle on ne devrait rentrer que la valeur minimale, la macro se chargeant de filtrer.(même si l'opération est à répéter pour chaque colonne ce n'est pas grave c'est quand même un gain de temps par rapport à l'action manuelle)
J'avoue que je cherche moi-même mais vu l'extême urgence et (surtout) mes connaissances nulles en Basic, j'ai un peu de mal.

D'avance merci

Romain
 

Pièces jointes

  • Classeur2.zip
    10.2 KB · Affichages: 21
  • Classeur2.zip
    10.2 KB · Affichages: 20
  • Classeur2.zip
    10.2 KB · Affichages: 20
J

JCA06

Guest
Bonjour Romain,

Je ne suis pas parvenu à ouvrir ton fichier.

Cependant, j'ai fait un petit code sur une liste filtrée qui pourra te donner des pistes.

Le principe est un peu différent dans la mesure où je copie les informations filtrées vers une feuille de calcul. Je le laisse tout de même en l'état car cela peut finalement t'intéresser.

Il y a également un petit code qui sert à remettre à zéro toutes les sélections, en désactivant et réactivant le filtre.

Ce que je te suggère est de prévoir tes valeurs de critères sur une ligne puis de lancer ensuitre la macro qui passera chaque critère à chaque colonne.

Option Explicit
Sub Reprisedonnees()
'
' Reprisedonnees Macro
' Macro enregistrée le 26/08/2004 par JCA
'
Dim L As Long, LM As Long, Z As Byte

' Désactiver le défilement de l'affichage et la protection de la feuille
Application.ScreenUpdating = False
ActiveSheet.Unprotect

' Effacer les valeurs présentes dans la feuille calcul
Range("Donnees").ClearContents

Sheets("Données").Select
Range("c3").Select

' Je remets à 0 le filtre automatique
Call RAZFiltre

' Je trie d'abord les données dans l'ordre chronologique
Selection.Sort Key1:=Range("c3"), Order1:=xlAscending, Header:=xlYes
' Je filtre sur la valeur du matricule puis sur le code "Activité"
Selection.AutoFilter Field:=1, Criteria1:=Range("matricule").Value
Selection.AutoFilter Field:=5, Criteria1:="=Activité"
Range("D65536").Select
' Je détermine le numéro de la dernière ligne que j'impute à la variable L
L = Selection.End(xlUp).Row
' Si L est égal à 3, c'est qu'il n'y a pas de données pour ce matricule
If L = 3 Then Call RAZFiltre: Sheets("Calcul").Select: _
Range("B3").Select: _
Z = MsgBox("Pas de données pour ce matricule", vbOKOnly, "Pas de données"): Exit Sub
' Sinon, je sélectionne les données "Du" à "Jours" de la ligne L à la _
1ère ligne de données
Range("C4:I" & L).Select
Selection.Copy
' Je retourne dans la feuille "Calcul" en A9 pour copier le résultat
Sheets("Calcul").Select
Range("A9").Select
ActiveSheet.Paste

' Je calcule à quelle ligne placer la période mairie s'il y en à une
LM = Selection.End(xlDown).Row + 2
' S'il n'y a qu'une ligne d'activité, le .End(xlDown) renvoi à la ligne 24.
' LM doit prendre alors la valeur 11 à la place de la valeur 26
If LM = 26 Then LM = 11

' Je m'occupe de la période mairie
Sheets("Données").Select
Range("F3").Select
Selection.AutoFilter Field:=5, Criteria1:="=Mairie"
L = Range("F65536").End(xlUp).Row
If L > 3 Then Range("C4:I" & L).Select: _
Selection.Copy: Sheets("Calcul").Select: Range("A" & LM).Select: ActiveSheet.Paste

' Je filtre sur les autres Codes d'activité
Sheets("Données").Select
Range("D3").Select
Selection.AutoFilter Field:=5, Criteria1:="<>Activité", Operator:=xlAnd, _
Criteria2:="<>Mairie"

Range("D65536").Select
' Je détermine le numéro de la dernière ligne que j'impute à la variable L
L = Selection.End(xlUp).Row
' Si L est égal à 3, c'est qu'il n'y a pas de données pour les autres activités
If L = 3 Then Call RAZFiltre: Sheets("Calcul").Select: Range("B3").Select: Exit Sub
' Sinon, je sélectionne les rangées "Du" et "Au" et prorata de la ligne 4 à L
Range("C4:I" & L).Select
Selection.Copy
' Je retourne dans la feuille "Calcul" en A28 pour copier le résultat
Sheets("Calcul").Select
Range("A28").Select
ActiveSheet.Paste

Call RAZFiltre

Sheets("Calcul").Select
Range("B3").Select
ActiveSheet.Protect
Application.ScreenUpdating = True

End Sub

Private Sub RAZFiltre()
' Pour désactivier les critères : désactivation du filtre et activation
Sheets("Données").Select
Range("A3").Select
Selection.AutoFilter
Selection.AutoFilter

End Sub

A toi de jouer !
 

Discussions similaires

Réponses
9
Affichages
373
Réponses
10
Affichages
761

Statistiques des forums

Discussions
314 211
Messages
2 107 328
Membres
109 804
dernier inscrit
Dramac