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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
Private Sub Text3_KeyPress(KeyAscii As Integer)
Dim I As Integer
Dim s As String
Dim bValid As Boolean
bValid = False
' si le caractère saisi est le Backspace alors
If KeyAscii = 8 Then
If Len(sPrefix) > 0 Then 'And Text3.SelLength = 0
sPrefix = Mid(sPrefix, 1, Len(sPrefix) - 1)
Exit Sub
ElseIf Text3.SelLength > 0 Then
' sPrefix = Mid(sPrefix, 1, Len(sPrefix) - Text3.SelLength)
Text3_Change
Else
sPrefix = ""
End If
Exit Sub
End If
If Text3.SelLength > 0 Then
Text3_Change
End If
'
'
' 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
'
For I = 0 To Combo1.ListCount - 1
'
s = Mid(Combo1.List(I), 1, ACCLEN)
'
'attention :tant que bValid ne change pas explicitement de valeur dans un if de la boucle for, elle conserve sa valeur precedente dans cette boucle
If Len(sPrefix) = ACCLEN - 1 And sPrefix & Chr(KeyAscii) <> s Then
bValid = True
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
Text3.Text = ""
bValid = False
Exit For
Exit Sub
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
'
If Len(sPrefix) >= ACCLEN - 2 And Len(sPrefix) <> ACCLEN - 1 Then
bValid = True
Exit For
End If
Next I
'
If bValid = False And sPrefix & Chr(KeyAscii) <> s Then
KeyAscii = 0
MsgBox "le nombre saisi ne correspond pas à un compte comptable du plan sru", vbExclamation
ElseIf bValid = False Then ' on considère le cas où sPrefix & Chr(KeyAscii)=s,le msgbox précédent n'est pas justifié
KeyAscii = 0
sPrefix = ""
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)
'
If Len(sPrefix) = ACCLEN Then
If peut_ajout(Mid(sPrefix, 1, ACCLEN - 1)) = True Then
' MsgBox "on peut inserer le nouveau compte dans la BDD"
'
'
Else
If Mid(sPrefix, ACCLEN, 1) = "0" Then
If peut_ajout(Mid(sPrefix, 1, ACCLEN - 2)) = True Then
'' MsgBox "on peut inserer le nouveau compte dans la BDD ", vbExclamation
'
' '
Else 'si peut_ajout(Mid(sPrefix,1,ACCLEN-2))=True n'est pas vérifié
' Beep
MsgBox "on ne peut pas créer de nouveau compte", vbExclamation
KeyAscii = 0
sPrefix = ""
Text3.Text = ""
Exit Sub '
End If ' fin de If peut_ajout(Mid(sPrefix, 1, ACCLEN - 2)) = True
' peut_ajout (Mid(sPrefix, 1, ACCLEN - 2))
'
End If 'fin de If Mid(sPrefix, ACCLEN, 1) = "0"
End If 'If peut_ajout(Mid(sPrefix, 1, ACCLEN - 1)) = True
'
End If 'If Len(sPrefix) = ACCLEN
End If 'fin de if bValid=False
End Sub |
Partager