Bonjour,
Je rencontre un soucis lors de l'utilisation d'une macro VBA.
Je réalise un filtre avancé qui doit notamment filtrer en fonction des dates.
Je souhaite pouvoir obtenir la ligne correspondant à la date PRECISE (avec l'heure) voulue par exemple "21/12/18 00:01" ou toute les lignes comprises entre 2 dates " >21/12/18 00:01" et " <15/01/18 15:03". (ou juste toutes les lignes "> 25/03/18 18:06")
Le problème que je rencontre est que le filtrage "plus grand et/ou plus petit que" ne fonctionne qu'avec l'heure "00:00". J'aimerai pouvoir être plus précis que cela.
Voici le code de ma macro :
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 Sub Filter5() ' ' Filter5 Macro ' Mémorise le contenu de F5 et G5 dat1 = [F5].Value: dat2 = [G5].Value ' Si les deux cellules ne sont pas vide => on convertit dat1 en nombre If Len(dat1) > 0 And Len(dat2) > 0 Then ' On mémorise temporairement les valeurs [F5].Value = Left(dat1, 1) & Round(CDbl(CDate(Mid(dat1, 2))), 6) [G5].Value = Left(dat2, 1) & Round(CDbl(CDate(Mid(dat2, 2))), 6) End If ' Si F5 contient une date ET que G5 n'en contient pas ET que le premier caractère n'est pas un nombre If Len(dat1) > 0 And IsEmpty(dat2) And (IsNumeric(Left(dat1, 1)) = False) Then [F5].Value = Left(dat1, 1) & Round(CDbl(CDate(Mid(dat1, 2))), 6) End If If Len(dat2) > 0 And IsEmpty(dat1) And (IsNumeric(Left(dat2, 1)) = False) Then [G5].Value = Left(dat2, 1) & Round(CDbl(CDate(Mid(dat2, 2))), 6) End If ' On filtre avec les valeurs numériques des dates Sheets("FMEA").Range("B17:X8000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ Sheets("FMEA").Range("B4:X5"), Unique:=False Range("D11").Select ActiveCell.FormulaR1C1 = "=SUBTOTAL(3,R[7]C[-1]:R[7000]C[-1])" Range("D12").Select ' On remet l'ancien contenu des cellules [F5].Value = dat1: [G5].Value = dat2 End Sub
Sur le screen, si je filtre => n'affiche aucune cellule. Si je remplace le 00:15 par 00:00 => filtre correctement
Si quelqu'un a une idée, je suis preneur.
Pour info : Les cellules des colonnes que je souhaite trier ont des formules du type : =IF(ROW(I21)<16;"";IF(ISBLANK(DATA!E5);"";DATA!E5)) => je les copie depuis la feuille DATA et elles ont le format JJ/MM/AAAA hh:mm. Je suis obligé de convertir avec la macro, juste avant de filtrer car lorsqu'on utilise un filtre avancé via une macro VBA, la date est considérée comme étant au format US (MM/JJ/AAAA hh:mm)
Partager