IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

problème d'execution d'une procedure


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    968
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 968
    Points : 141
    Points
    141
    Par défaut problème d'execution d'une procedure
    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

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    968
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 968
    Points : 141
    Points
    141
    Par défaut declaratioin de variables
    J'ai oublié de dire que toutes les variables ont correctement déclarées même si cela ne se voit pas dans le code proposé à l'instant

    Nathalie

  3. #3
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Remplace cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Chr(KeyAscii) < "0" Or Chr(KeyAscii) > "9" Then
    par celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Not IsNumeric(Chr(KeyAscii)) Then

  4. #4
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    qu'est que tu veux faire exactement, car j'avou que je ne te suis pas tres bien ??

    ici tu dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pour tester les caractères qu'un utilsateur saisit dans une combobox
    mais tu fait fait un parcours sur tous les element du combobox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For I = 0 To Combo1.ListCount - 1
    '      s = Combo1.List(I)
          s = Mid(Combo1.List(I), 1, 5)
    Finalement que veux tu faire ??

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    968
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 968
    Points : 141
    Points
    141
    Par défaut execution d'une procédure
    Rebonjour,

    Merci de votre aide.

    Le problème concernant la saisie d'un deuxième caractère a été résolu, il s'agissait d'une partie de code que j'avais mise en commentaire malencontreusement.

    Ce que je veux c'est permettre à un utilisateur de saisir un nombre de 5 chiffres au maximum.
    s'il fait une erreur de saisie il doit pouvoir effacer le chiffre mal saisi et continuer sa saisie.
    Or dès qu'il fait une erreur et l'efface, on voit un message d'erreur s'afficher, ce qui n'est pas souhaitable.


    Comment puis je corriger cela.
    est celié au fonction keydown et keyup?

    Merci de votre aide.

    cordialement.
    Nathalie

  6. #6
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Combo1_KeyPress(KeyAscii As Integer)
     ' La value 8 est le "backspace"
     If (KeyAscii <> 8) And (Len(Combo1.Text) = 5) Then KeyAscii = 0
     If (KeyAscii <> 8) And Not (IsNumeric(Chr(KeyAscii))) Then KeyAscii = 0
    End Sub
    Est-ce que ceci ferait l'affaire ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    968
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 968
    Points : 141
    Points
    141
    Par défaut execution d'une procédure
    Pour préciser le problème je souhaite tester la validité d'un nombre saisi par un utilsateur.
    Comment est testé cette validité
    Dans la comboliste il existe dejà des nombre du plan comptable.
    L'utilsateur peut rajouter des nombres à ce plan comptable mais en observant certaines règles.
    Les nombres existant déjà ne doivent pas être resaisis
    les nombres saisis doivent
    1 si le dernier chiffre est compris entre 1 à 9, le test portera sur les cinq chiffres saisis ( sont ils identiques à ceux d'un nombre de la combo et si oui, cela signifie que le nombre existe déjà dans la combo)
    avoir les mêmes 3 premiers chiffres que ceux de la comboliste

    2-si le quatrième chiffre est =0, , le test portera sur les 4 premiers chiffres saisis( sont ils identiques à ceux d'un nombre de la comboliste, si oui, l'utilsatuer peut rajouter le chiffre qu'il veut après le 4ème caractère

    3si les deux derniers chiffres sont =0, le test portera sur les 3 premiers chiffres saisis( sont ils identiques à ceux d'un nombre de la comboliste)

    voici le code que j'ai écrit jusquà présent ; comme je suis coincée par le pb de touche 'supp', je ne peux le tester correctement.

    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
    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
    Merci beauocup de votre aide et de l'intérêt pour mon problème.
    Cordialment

    Nathalie

  8. #8
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    voila une petite fonction qui permet de limiter le nombre de caractere.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Function LimitChar(ByVal Press, Txt As String, Nbr As Integer) As Integer
        If Len(Txt) > Nbr - 1 And Press <> vbKeyBack Then
            LimitChar = 0
        Else
            LimitChar = Press
        End If
    End Function

    Et voila un exemmple d'utilisation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Combo1_KeyPress(KeyAscii As Integer)
        KeyAscii = LimitChar(KeyAscii, Combo1.Text, 5)    
    End Sub

  9. #9
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Len(Combo1.Text) = 5 then KeyAscii = 0

  10. #10
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut
    Zaza, en faisant ça on ne peut plus corriger en appuyant sur la touche d'effacement

    J'avais proposé cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Combo1_KeyPress(KeyAscii As Integer)
     ' La value 8 est le "backspace"
     If (KeyAscii <> 8) And (Len(Combo1.Text) = 5) Then KeyAscii = 0
     If (KeyAscii <> 8) And Not (IsNumeric(Chr(KeyAscii))) Then KeyAscii = 0
    End Sub

  11. #11
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Tu as raison ThunderStroke... J'avais lu en diagonale...

    Harbone:

    Y'a beaucoup d'monde dans ta procédure Click...

    Avec ta permission, je regarde ça, et je t'envoie un truc? Demain, c'est trop tard?

    En attendant, si tu trouves, ou si un autre trouve, ne vous gênez pas!

    @+

  12. #12
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Je n'ai pas grand-choses puisqu'il est difficile de tester du code qui n'est pas complet (variables déclarées ailleurs que dans le bout de code qu'on a, commandes SQL qui suppose une liaison à une balse de données...) mais tout de même je peux toujours y aller avec ceci

    Plutôt que de te consentrer sur les caractères interdits, assure toi d'accepter les caractères autorisés et seulement ceux-ci
    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
    Private Sub combo1_KeyPress(KeyAscii As Integer)
    Dim I As Integer
        Dim s As String
        Dim bValid As Boolean
        bValid = False
        If KeyAscii = 9 Or KeyAscii = 13 Or _
              (KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Then
     
            ' ici le code des validation...
            ...
          else
            KeyAscii = 0
            Beep
            ' Éviter l'abus des MsgBox qui finissent par user l'user
            ' Le contrôle StatusBar fait partie des Microsoft Windows Common Control 6.0
            StatusBar1.SimpleText = "Vous ne pouvez saisir que des chiffres"
        End if
    End Sub
    pour le reste, j'irais avec différentes petites fonctions de test selon que l'utilisateur tape le ennième caractère (retour de la fonction len)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Select Case Len(Combo1.Text) + 1
      Case 1, 2
        ' Pas de test... 
      Case 3
        ' Test3
      Case 4
        ' Test4
      Case 5
        ' Test5
      Case Else
        KeyAscii = 0
        Beep
        StatusBar1.SimpleText = "Vous ne pouvez entrer que 5 chiffres"
    End Select
    Il ne te reste plus qu'à te concentrer sur les validations elles-même

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/09/2006, 10h43
  2. Réponses: 7
    Dernier message: 01/06/2006, 16h43
  3. [SQL-Server] Execution d'une procedure stockée SQL Serveur depuis PHP.
    Par gregb34 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/05/2006, 01h06
  4. Problème d'execution d'une fonction
    Par 12_darte_12 dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 17/03/2006, 11h37
  5. Execution d'une procedure avec TNotifyEvent;
    Par Chupakabra dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2003, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo