Bonjour,

J'ai crée une procédure Combo1_Keypress pour tester les caractères qu'un utilsateur saisit dans une combobox.
Ces caractères sonbt comparés à des nombres qui font partie de a combolist.

Il se trouve qu'il se produit plusieurs choses
1-quand je clique dans la zone de saisie j'ai un parfois message d'erreur me disant qu'on ne peut saisir que des nombres, alors que ce message est reservé aux erreurs de saisie dans la combo
2-en mettant un point d'arrêt le test fonctionne quand je teste le premier caractère saisi, puis après je vois s'afficher de manière sauvage les msgbox insérés dans le code pour tester la saisie.

Y a til peut être un pb de timeout carle test sur chaque caractère prend du temps vu que la liste dans la combo est longue.

Voici le code implémenté

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
 
 
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
Si vous pouviez m'aider sur le sujet ce serait très gentil à vous.

Nathalie