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
|
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 - 1 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(3, Len(sPrefix) + 1)) = sPrefix & Chr(KeyAscii) Then
bValid = True
Exit For
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