Bonjour,

On va dire que le titre n'est pas très très explicite mais on va faire avec...
Une fois par semaine, je doit réaliser une vérification des performance de la semaine passé à l'aide d'un fichier CSV ( de 12 à 13000 ligne fourni par le serveur et non modifiable)
je dois donc extraire les fiches (lignes) qui ont certain critere
  • un statut clos
  • la date comprise entre lundi et dimanche de la semaine derniere ( rentré manuellement)
  • un type : MAC ou EVO


j'ai tout d'abord penser à un filtre automatique, mais a ma grande surprise, dans la colonne date, il (excel) concidere que la cellule est une date ou du texte ce qui fausse le filtre auto.
De plus vu le nombre de donnée differente le filtre auto se limite a un certain nombre et les dernieres dates valide sont en 2008.

J'ai donc fais un parcours complet du fichier avec un verification des conditions mais cette macro prend a peu pres 30 à 40 min...

Y aurai-t-il une solution plus rapide ?

Merci

ci-joint le code que j'ai développer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
Sub sla() 
Dim fich_csv As Workbook 
Dim nb_ligne As Long 
Dim cpt As Long 
Dim parcours As Long 
Dim date_debut As String 
Dim date_fin As String 
Application.ScreenUpdating = False 
Set fich_csv = Workbooks.Open(Application.GetOpenFilename("Excel file (*.csv), *.csv", , "Selectionnez la derniere extraction eRequester")) 
date_debut = InputBox("entrez la date de début de période") 
date_fin = InputBox("entrez la date de fin de période") 
nb_ligne = Range("A1", Range("A1").End(xlDown)).Count 
parcours = 2 
For cpt = 2 To nb_ligne
    If condition(date_debut, date_fin, parcours) Then 
        parcours = parcours + 1 
    Else 
        Range("m" & parcours).EntireRow.Delete 
    End If 
Next 
 
 
Application.ScreenUpdating = True 
End Sub 
 
Function condition(date_deb As String, date_fin As String, parcours As Long) As Boolean 
condition = False 
If Range("m" & parcours).Value = "Closed" Then 
    If Range("K" & parcours).Value = "Maintenance Corrective" Or Range("K" & parcours).Value = "Evolution mineure" Then 
        If Range("CY" & parcours).Value <> "" Then 
            If CDate(Range("CY" & parcours).Value) >= CDate(date_deb) And CDate(Range("CY" & parcours).Value) <= CDate(date_fin) Then 
                condition = True 
            End If 
        Else 
            If CDate(Range("N" & parcours).Value) >= CDate(date_deb) And CDate(Range("N" & parcours).Value) <= CDate(date_fin) Then 
                condition = True 
            End If 
        End If 
    End If 
End If 
 
End Function