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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| Enum COL_TYPE
T_ALPHA_NUM
T_BOOLEAN
T_ALPHA
T_NUM
T_DATE
End Enum
Sub controle_qualite_date()
controle_qualite T_DATE, Sheets("Structure").Range("F5")
End Sub
Sub controle_qualite_boolean()
controle_qualite T_BOOLEAN, Sheets("Structure").Range("F5")
End Sub
Sub controle_qualite_num10()
controle_qualite T_NUM, Sheets("Structure").Range("F5"), 10
End Sub
Sub controle_qualite_alphanum3()
controle_qualite T_ALPHA_NUM, Sheets("Structure").Range("F5"), 3
End Sub
Sub controle_qualite_alphanum10()
controle_qualite T_ALPHA_NUM, Sheets("Structure").Range("F5"), 10
End Sub
Private Function IsTitleFromType(ByVal titleToCheck As String, typ As COL_TYPE, Optional NbChar As Integer = -1) As Boolean
IsTitleFromType = False
Dim title As String
Select Case typ
Case T_ALPHA_NUM: title = "Alphanumérique"
Case T_BOOLEAN: title = "Booléen"
Case T_ALPHA: title = "Aplha"
Case T_NUM: title = "Numérique"
Case T_DATE: title = "Date"
Case Else
MsgBox "IsTitleType Error : Type de colonne nom défini :" & typ
End Select
If Len(title) > 0 Then
If NbChar > 0 Then
title = NbChar & title
End If
titleToCheck = Replace(Replace(Replace(titleToCheck, " ", ""), vbLf, ""), vbCr, "")
IsTitleFromType = (titleToCheck = title)
End If
End Function
Private Function IsCellFromType(val As String, typ As COL_TYPE) As Boolean
Dim RegEx As Variant
Set RegEx = CreateObject("vbscript.regexp")
With RegEx
.IgnoreCase = True
'.Global = false
End With
Select Case typ
Case T_ALPHA_NUM: RegEx.Pattern = "[^0-9a-z]": IsCellFromType = Not (RegEx.Test(val))
Case T_BOOLEAN: IsCellFromType = (LCase(val) = "vrai") Or (LCase(val) = "faux")
Case T_ALPHA: RegEx.Pattern = "[^a-z]": IsCellFromType = Not (RegEx.Test(val))
Case T_NUM: IsCellFromType = IsNumeric(val)
Case T_DATE: IsCellFromType = IsDate(val)
Case Else
MsgBox "IsCellFromType Error : Type non défini :" & typ
End Select
Set RegEx = Nothing
End Function
Sub controle_qualite(typ As COL_TYPE, lastCol As Integer, Optional NbChar As Integer = -1)
Dim Col As Integer
Dim Lin As Integer
Dim Err As Integer: Err = 0
With Sheets("Qualité des données")
For Col = 2 To lastCol
If IsTitleFromType(.Cells(12, Col), typ, NbChar) Then
For Lin = 15 To 46
With .Cells(Lin, Col)
'.Select
If Not (IsCellFromType(.Value, typ)) Then
.Font.Color = vbRed 'mettre_en_rouge
Err = Err + 1
End If
' Doit être de longueur <NbChar> ou moins
If NbChar >= 0 And Len(.Value) > NbChar Then
.Font.Color = vbRed 'mettre_en_rouge
Err = Err + 1
End If
End With
Next Lin
End If
Next Col
End With
End Sub |
Partager