Bonjour,
Ces deux fonctions restituent le minimum ou le maximum d’une série de données, quel que soit leur nombre (illimité) et quel que soit leur type (date, numérique ou texte) pourvu qu’elles soient homogènes.
La série de données est présentée sous forme de texte, donc encadrée de quotes. Les composants sont séparés entre eux par un "PaillePeu" "|" = <alt> + 124
Pour le minimum :
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
44
45
46
47
48
49
50
51
52
53
54
55
56 Public Function LeMinimum(Série) As Variant 'valeurs entre quotes et séparées par | 'les nombres décimaux avec virgule. 'le premier membre détermine le type de données (date, numérique ou texte) 'ex d'appels : LeMinimum("31/12/09|25/3/2003|1/1/07") ' LeMinimum("1000|4|5|3,1416") ' LeMinimum("abc|d|efg|h|a|bcd") ' LeMinimum("1000|abc|5|3,1416") conduit à une erreur ' LeMinimum("31/12/09|A|1/1/07") conduit à une erreur ' LeMinimum("a|abc|31/12/07|3,1416")sera accepté, _ mais les dates et nombres seront traités comme du texte On Error GoTo erreur Dim ArrSérie() As String, i As Integer ArrSérie = Split(Série, "|") LeMinimum = ArrSérie(0) If IsDate(LeMinimum) Then 'comparaison de dates 'vérifier homogénéité For i = 1 To UBound(ArrSérie) If Not IsDate(ArrSérie(i)) Then GoTo erreur Next i 'Rechercher le plus petit For i = 1 To UBound(ArrSérie) If Format(ArrSérie(i), "yymmdd") < Format(LeMinimum, "yymmdd") Then LeMinimum = ArrSérie(i) End If Next i Exit Function ElseIf IsNumeric(LeMinimum) Then 'comparaison autre 'vérifier homogénéité For i = 1 To UBound(ArrSérie) If Not IsNumeric(ArrSérie(i)) Then GoTo erreur Next i 'Rechercher le plus petit For i = 1 To UBound(ArrSérie) If CDbl(ArrSérie(i)) < CDbl(LeMinimum) Then LeMinimum = ArrSérie(i) End If Next i Exit Function Else For i = 1 To UBound(ArrSérie) If ArrSérie(i) < LeMinimum Then LeMinimum = ArrSérie(i) End If Next i End If Exit Function erreur: MsgBox "les données ne sont pas homogènes", vbCritical End Function
Pour le maximum :
Exemple d'utilisation dans une requête
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
44
45
46
47
48
49
50
51
52
53
54 Public Function LeMaximum(Série) As Variant 'valeurs entre quotes et séparées par | 'les nombres décimaux avec virgule. 'le premier membre détermine le type de données (date, numérique ou texte) 'ex d'appels : LeMaximum("31/12/09|25/3/2003|1/1/07") ' LeMaximum("1000|4|5|3,1416") ' LeMaximum("abc|d|efg|h|a|bcd") ' LeMaximum("1000|abc|5|3,1416") conduit à une erreur ' LeMaximum("31/12/09|A|1/1/07") conduit à une erreur ' LeMaximum("a|abc|31/12/07|3,1416")sera accepté, _ mais les dates et nombres seront traités comme du texte On Error GoTo erreur Dim ArrSérie() As String, i As Integer ArrSérie = Split(Série, "|") LeMaximum = ArrSérie(0) If IsDate(LeMaximum) Then 'comparaison de dates 'vérifier homogénéité For i = 1 To UBound(ArrSérie) If Not IsDate(ArrSérie(i)) Then GoTo erreur Next i 'Rechercher le plus Grand For i = 1 To UBound(ArrSérie) If Format(ArrSérie(i), "yymmdd") > Format(LeMaximum, "yymmdd") Then LeMaximum = ArrSérie(i) End If Next i Exit Function ElseIf IsNumeric(LeMaximum) Then 'comparaison autre 'vérifier homogénéité For i = 1 To UBound(ArrSérie) If Not IsNumeric(ArrSérie(i)) Then GoTo erreur Next i 'Rechercher le plus Grand For i = 1 To UBound(ArrSérie) If CDbl(ArrSérie(i)) > CDbl(LeMaximum) Then LeMaximum = ArrSérie(i) End If Next i Exit Function Else For i = 1 To UBound(ArrSérie) If ArrSérie(i) > LeMaximum Then LeMaximum = ArrSérie(i) End If Next i End If Exit Function erreur: MsgBox "les données ne sont pas homogènes", vbCritical End Function
sur "DatesAcomparer" pour les champs date1, date2, date3 et date4
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT DatesAcomparer.date1, DatesAcomparer.date2, DatesAcomparer.date3, DatesAcomparer.date4, LeMinimum([date1] & "|" & [date2] & "|" & [date3] & "|" & [date4]) AS [Min], LeMaximum([date1] & "|" & [date2] & "|" & [date3] & "|" & [date4]) AS [Max] FROM DatesAcomparer;
Partager