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
|
Private Sub combo1_KeyPress(KeyAscii As Integer)
Dim I As Integer
Dim s As String
Dim bValid As Boolean
bValid = False
For I = 0 To Combo1.ListCount - 1
' s = Combo1.List(I)
s = Mid(Combo1.List(I), 1, 5)
' si les caractères saisis ne sont pas des nombres, on sort de la procedure
If Chr(KeyAscii) < "0" Or Chr(KeyAscii) > "9" Then
KeyAscii = 0
MsgBox " Vous ne pouvez saisir que des nombres", vbExclamation
' Exit Sub
End If
' si la longueur de la chaine saisie est supérieure à 5
If Len(sPrefix) > 5 Then
MsgBox "vous ne pouvez pas saisir plus de 5 chiffres pour un compte comptable", vbExclamation
Exit For
End If
'si la longueur de la chaîne déjà saisie =4(5-1) et que la concaténation de la chaîne déjà saisie et
' du caractère en cours = le nombre testé dans la comboliste
If Len(sPrefix) = ACCLEN And sPrefix & Chr(KeyAscii) = s Then
MsgBox "le nombre saisi existe déjà dans la liste des comptes du plan sru", vbExclamation
KeyAscii = 0
Exit For
End If
' si la sous chaîne qui va du premier caractère du nombre testé dans la comboliste
'à son troisième au maximum est égale à la concaténation de la chaîne déjà saisie
'et du caractère en cours
' If Mid(s, 1, Min(5, Len(sPrefix) + 1)) = sPrefix & Chr(KeyAscii) Then
' bValid = True
' Exit For
' End If
' '
'si le cinquième caractère du nombre de la comboliste est compris entre 0 et 9
'alors ce sont les cinq caractères de la chaine saisie qui sont testés
If Mid(s, 5, 1) >= "0" Or Mid(s, 5, 1) <= "9" Then
If Mid(s, 1, Min(5, Len(sPrefix) + 1)) = sPrefix & Chr(KeyAscii) Then
bValid = True
Exit For
End If
End If
'Si le cinquième caractère du nombre de la comboliste( compte du plan comptable sru) est égal à 0 alors ce sont les 4 premiers
'caractères de la chaine saisie qui sont testés
If Mid(s, 5, 1) = "0" Then
If Mid(s, 1, Min(4, Len(sPrefix) + 1)) = sPrefix & Chr(KeyAscii) Then
bValid = True
Exit For
End If
End If
'Si le quatrième caractère et le cinquième caractère du nombre de la comboliste sont =0
' alors ce sont les 3 premiers caractères de la chaîne saisie qui sont testés
If Mid(s, 4, 2) = "00" Then
If Mid(s, 1, Min(3, Len(sPrefix) + 1)) = sPrefix & Chr(KeyAscii) Then
bValid = True
Exit For
End If
End If
Next I
'
If bValid = False Then
KeyAscii = 0
MsgBox "le nombre saisi ne correspond pas à un compte comptable du plan sru", vbExclamation
Else
' si la variable bValide= true alors on ajoute à la valeur de sPrefix celle du caractère en cours,
' pour pouvoir refaire le test de la boucle for
sPrefix = sPrefix & Chr(KeyAscii)
End If
End Sub |
Partager