Condition sur des données filtrées

Résolu/Fermé
Akalia Messages postés 34 Date d'inscription mercredi 25 juin 2014 Statut Membre Dernière intervention 17 août 2016 - 29 juil. 2014 à 11:55
Akalia Messages postés 34 Date d'inscription mercredi 25 juin 2014 Statut Membre Dernière intervention 17 août 2016 - 30 juil. 2014 à 11:50
Bonjour,

Toujours dans ma réalisation d'indicateurs, je bute actuellement sur une impasse on va dire.

Je décris ce que je fais et désire en plusieurs points:

-Réaliser un premier filtre qui tri une première fois les données sur la feuille 1.
-Réaliser sur ce filtre existant un deuxième tri toujours sur les données de la feuille 1.
-Réaliser une condition qui permet de chercher dans la colonne BV quand la date du jour est supérieure aux dates (Now > La_date) où La_date est une date qui peut soit être inférieure à la date du jour soit supérieure.
-Renvoyer toutes les lignes filtrées respectant la condition dans une autre feuille que l'on nommera "Feuil3", et ne copier coller que certaines colonnes.

J'ai fait une réalisation de code, mais j'ai l'impression que ce qui bloque c'est de faire la condition sur un filtre, car je réalise le filtre puis la condition, mais j'ai l'impression que la condition ne prend pas en compte le filtrage, ou bien ce sont les données collées qui n'en prennent pas compte. Du coup, je suis passé par une astuce où je scinde les étapes en ouvrant une nouvelle feuille 2 et réalisant la dernière partie de ce que je souhaite obtenir, je vais vous montrer ce code qui marche, mais ma question est : m'est-il possible de réaliser ce que je fais sans passer par cette feuille intermédiaire?

Voici le code :

Option Explicit

-----------------------------------------------------
Private Sub CommandButton1_Click()

'Dim Dernligne As Integer, Lig As Integer, Lg As Integer
Dim La_date As Date
Dim Date_test As Date
Dim n As Integer
Date_test = Now()
Dim DerColonne As Integer
Dim Cl As Integer
Dim dernligne As Integer, T_statut
Dim cptr As Byte, Statut As String
Dim Idx As Integer, Nbre As Integer

'Cache les traitements et défilements
Application.CutCopyMode = False
Application.ScreenUpdating = False

'Ajout de la feuille test
Sheets.Add.Name = "test"

'Nettoyage des anciennes données précédentes
Sheets("Feuil3").Select
Range("A2:CX10000").Select
Selection.Delete

'On enlève tous les filtres déjà présents
Sheets("Feuil1").AutoFilterMode = False

'Filtrage 1
Selection.AutoFilter
Worksheets("Feuil1").Range("A2:CX65536").AutoFilter Field:=42, Criteria1:="=Ordre de fabrication", Operator:=xlOr, Criteria2:="=OF non standard"
'Sous filtrage en fonction du statut Lancé
Selection.AutoFilter
Worksheets("Feuil1").Range("A2:CX65536").AutoFilter Field:=75, Criteria1:="Lancé"

Dim Lg As Integer
Dim Lig As Integer
Dim ligne As String

dernligne = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row

Lg = 1
'Boucle sur les lignes
For Lig = 3 To dernligne (car la première date commence ligne 3)

La_date = Sheets("Feuil1").Range("BV" & Lig).Value
If La_date < Now Then

Sheets("Feuil1").Select
Range("A" & Lig & ":BW" & Lig).Select
Selection.Copy
'collage dans synthese
Sheets("Feuil2").Select
Lg = Lg + 1
Range("A" & Lg).Select
ActiveSheet.Paste

End If
Next


'Filtrage des types d'OF en standard et non standard
'Selection.AutoFilter
Worksheets("Feuil2").Range("A2:CX65536").AutoFilter Field:=42, Criteria1:="=Ordre de fabrication", Operator:=xlOr, Criteria2:="=OF non standard"
'Sous filtrage en fonction du statut Lancé
'Selection.AutoFilter
Worksheets("Feuil2").Range("A2:CX65536").AutoFilter Field:=75, Criteria1:="Lancé"


With Sheets("Feuil2")
Union(.Columns(3), .Columns(4), .Columns(5), .Columns(42), .Columns(47), .Columns(49), .Columns(52), .Columns(54), .Columns(55), .Columns(67), .Columns(74)).Copy Sheets("Feuil3").Range("A1")
End With


Application.DisplayAlerts = False
Sheets("Feuil2").Delete
Application.DisplayAlerts = True


End Sub


Merci d'avance si une solution est possible, car déjà, le problème que j'avais avant, c'est qu'il ne me copiait/collait pas les données filtrées, mais seulement celles qui avaient la condition de la date. Ensuite, c'est pour ça que je réaliser un deuxième filtre une nouvelle fois.

3 réponses

via55 Messages postés 14499 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 26 novembre 2024 2 735
29 juil. 2014 à 13:52
Bonjour

Pourquoi filtrer avant et ne pas plutôt ne recopier que les valeurs respectant les 3 conditions ?
Exemple un tableau avec en colonne B les jours, en colonne C le service et en colonne E la date ; je ne veux copier que les dates<aujourdhui des lundi du service compta

For lig=3 to dernligne
le_jour=range("B" & lig)
le_service=range("C" & lig)
la_date=range("E" & lig)

If le_jour="lundi and le_service="compta" and la_date<now then
Sheets("Feuil1").Select
Range("A" & Lig & ":BW" & Lig).Select
Selection.Copy

etc

Cdlmnt
0