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

Macros et VBA Excel Discussion :

limiter un "-" dans un textbox et variations sur le thème ^^^


Sujet :

Macros et VBA Excel

  1. #41
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Non non et non !

    Je ne permettrais jamais une saisie sur 2 chiffres d'un millésime ... NON !

    Le bug 2K a servi, je l'espère, de leçon ....

    Pour le reste : non, tu ne pourrais pas faire le copier-coller d'une date incohérente.
    Quant au code : je ne réponds pas non plus. Pourquoi ? parce que je l'ai donné à quelqu'un à titre personnel et qu'il m'a amicalement trahi en le mettant sur le forum...

    Ousk ?

  2. #42
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Je ne permettrais jamais une saisie sur 2 chiffres d'un millésime ... NON !
    Valide uniquement si saisie sous forme de String, et non en tant que type Date !
    Et, donc, le KeyPress est plus limité que le Exit
    Et donc, il n'y a pas QUE la longueur d'une chaîne qu'il faudrait contrôler UNIQUEMENT comme tu l'indiquais précédemment.

  3. #43
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Quel est le type de saisie d'une textbox ? (propriété Text sous VB ou value sous VBA) ?

    J'ai une lacune, là ?

  4. #44
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    L'objet de ce thread n'est-il pas de s'assurer qu'on obtient un numérique valide à travers une textbox qui ne peut renvoyer qu'un String ?
    Si ce n'est pas le cas, alors ce thread n'a pas de raison d'être !
    et dans ce cas, pourquoi pas une date valide ?
    Car, en VB, comme en VBA, on sait Caster... non ?

  5. #45
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Je ne te suis vraiment plus...

    Ce n'est pas moi qui ai bifurqué vers des dates.... (qui ne me gênent personnellement d'aucune manière, sauf lorsque, saisissant le millésime sur 2 chiffres, on ne sait plus de quel siècle il s'agit )....

    On parle bien ici de saisies de numériques dans des textboxes (et elles sont en string) que l'on doit contrôler.

    La discussion s'arrête ici pour moi...

  6. #46
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    une date n'est plus un numérique ?

  7. #47
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonsoir à tous,

    Personnellement, j’effectue un contrôle en cours de saisie (événement Change) essentiellement pour ce qui est numérique.

    Pour le reste je préfère regrouper les contrôles aux moments de la validation ET prévenir l’utilisateur des anomalies détectées avec des MsgBox explicites.

    En outre, pendant la saisie, je n’utilise JAMAIS l'événement KeyPress pour ne permettre que la saisie de certains caractères : selon moi cela donne à l’utilisateur l’ïmpression que le clavier ne fonctionne plus ou pire que l’appli a planté.

    Citation Envoyé par ouskel'n'or Voir le message
    J'ajoute simplement qu'après s'être trompé trois fois et avoir été renvoyé au champ qui va bien, l'utilisateur fait attention à ce qu'il saisit, ce qui n'est pas un mal.
    Tout à fait d’accord. Je laisse l’utilisateur saisir n’importe quel caractère, et en cas d’anomalie, j’affiche un MsgBox avec une explication, et ensuite seulement, je supprime le dernier caractère saisi.

    Citation Envoyé par ouskel'n'or Voir le message
    Donc, mon avis : Il est plus facile de vérifier 50 lignes de code bien rangé dans un coin que 10000 lignes éparpillées dans une appli.
    C'est mon avis et je ne le partage qu'avec ceux qui veulent bien le partager
    Là encore, je partage l’avis de ouskel'n'or. Le code de quasiment tous mes UserForms comporte quelque chose comme cela (seul le contenu de la Sub ControleSaisie varie selon les éléments à contrôler).

    NB - BOK est le nom du bouton de validation, et Controle est une procédure générique, à laquelle on passe plusieurs arguments, indiquant en particulier ce qui est à contrôler et le message d’erreur à afficher. Elle modifie la valeur d’un booléen, Resultat, en le faisant passer à False en cas de détection d’anomalie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub BOK_Click()
        ControleSaisie
            If Resultat Then
                ReportDonnees
                Unload Me
            End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub ControleSaisie()
    Dim i As Integer
        Resultat = Controle(LTransects.ListIndex = -1, "le nombre de transects.", LTransects)
        If Resultat Then Resultat = Controle(Cat = "", "s'il s'agit d'un site choisi ou tiré au sort.", Frame1)
        If Resultat Then Resultat = Controle(TLocalite1 = "", "la localité 1.", TLocalite1)
        If Resultat Then Resultat = Controle(TDep = "", "le département.", TDep)
        If Resultat Then Resultat = Controle(Region = "", "la liste d'espèces à prendre en compte (Ile-de-France ou France entière).")
        If Resultat Then Resultat = Controle(LNat.ListIndex = -1, "le naturaliste.", LNat)
            If Resultat Then
                    For i = 1 To LTransects.Value
                        If Resultat Then Resultat = Controle(Controls("TS" & i) = "", "le code habitat principal pour le transect " & i, Controls("TS" & i))
                    Next i
            End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ReportDonnees()
         ' Le traitement des infos saisies à l’aide du UserForm
    End Sub

  8. #48
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Nous sommes donc AU MOINS 3 à partager cet avis...

  9. #49
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par Bigalo Voir le message
    Bonsoir à tous,

    Personnellement, j’effectue un contrôle en cours de saisie (événement Change) essentiellement pour ce qui est numérique.

  10. #50
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonsoir, ucfoutu

    Tu tronques un peu la citation : il serait plus juste si tu te limites à un extrait d’exprimer les choses ainsi : «Personnellement, je ne contrôle en cours de saisie (événement Change) que ce qui est numérique. ».

    Je le fais essentiellement pour les TextBoxes, avec un module de classe, qui sert pour les différents UserForms concernés.

  11. #51
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par Bigalo Voir le message
    En outre, pendant la saisie, je n’utilise JAMAIS l'événement KeyPress pour ne permettre que la saisie de certains caractères : selon moi cela donne à l’utilisateur l’ïmpression que le clavier ne fonctionne plus ou pire que l’appli a planté.
    Par contre, moi, je ne tronque pas une partie de phrase...
    Mais je ressors de cela exactement ce que je disais
    Merci Michel

  12. #52
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    De rien, Maxence

    Je suis souvent d’accord avec les messages d’ucfoutu, ainsi qu'avec les tiens d’ailleurs , mais il ne serait pas réaliste d’imaginer qu’on ait toujours tous le même avis !

  13. #53
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Allez ... pour mettre une peu de baume au coeur d'ucfoutu ...
    Voici une solution qui utilise le KeyPress, mais de manière un peu plus 'propre' et surtout avec une gestion unifiée et centralisée

    Voici un embryon de module de classe (myNumericBox)
    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
    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
    '---------------------------------------------------------------------------------------
    ' Module    : myNumericBox
    ' Créé le   : 26/02/2008 21:32
    ' Auteur    : Maxence Hubiche (mhubiche@club-internet.fr)
    ' Objet     : Permettre la saisie d'un numérique dans un MsForms.TextBox par mappage
    '               et interception des évènements
    '---------------------------------------------------------------------------------------
    Option Explicit
    'Fonctions pour déterminer le séparateur de décimales
    Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
    Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
    Private Const LOCALE_SDECIMAL = &HE
    'Enumération des cas particuliers à traiter
    Enum eMyType
        eMyType_Entier
        eMyType_Entier_NonSigne
        eMyType_Reel
        eMyType_Reel_NonSigne
    End Enum
     
    'Mappage du contrôle TextBox
    Private WithEvents m_TB     As MSForms.TextBox
    'Propriétés 'Privées' de la classe
    Private m_Type              As eMyType
    Private m_ValidColor        As Long
    Private m_InvalidColor      As Long
    'Constantes pour les numériques
    Const C_ENTIERS     As String = "0123456789"
    Const C_SIGNE       As String = "-"
    Private m_SEPARATOR         As String
    Private m_BAD_SEPARATOR     As String
    'Prévoir 2 évènements en retour
    Public Event AvantAppuieTouche(Touche As MSForms.ReturnInteger)
    Public Event ApresAppuieTouche(Touche As MSForms.ReturnInteger)
    'Méthode visible de la classe
    'Sert à Mapper la textBox à la classe
    Public Function Definir(TB As MSForms.TextBox, myTYpe As eMyType, Optional ValidColor As Long = vbGreen, Optional InvalidColor As Long = vbRed) As TextBox
        Set m_TB = TB
        m_ValidColor = ValidColor
        m_InvalidColor = InvalidColor
        m_Type = myTYpe
    End Function
    Private Sub Class_Initialize()
        m_SEPARATOR = Separator
        If m_SEPARATOR = "." Then
            m_BAD_SEPARATOR = ","
        Else
            m_BAD_SEPARATOR = "."
        End If
    End Sub
    'Interception de l'évènement du contrôle mappé (KeyDown)
    ' pour les deux touches BackSpace et Suppr
    Private Sub m_TB_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        Const BACKSPACE As Long = 8
        Const SUPPRIME  As Long = 46
        Select Case KeyCode
            Case BACKSPACE, SUPPRIME
                m_TB.BackColor = m_ValidColor
            Case Else
                'rien à faire
        End Select
    End Sub
    'Interception de l'évènement du contrôle mappé (KeyPress)
    ' pour toutes les touches de saisie
    Private Sub m_TB_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        Dim blnValide As Boolean
        RaiseEvent AvantAppuieTouche(KeyAscii)
        Select Case m_Type
            Case eMyType_Entier
                blnValide = Controle(Chr(KeyAscii), C_ENTIERS, True)
            Case eMyType_Reel
                blnValide = Controle(Chr(KeyAscii), C_ENTIERS & m_SEPARATOR, True)
            Case eMyType_Entier_NonSigne
                blnValide = Controle(Chr(KeyAscii), C_ENTIERS, False)
            Case eMyType_Reel_NonSigne
                blnValide = Controle(Chr(KeyAscii), C_ENTIERS & m_SEPARATOR, False)
        End Select
        If blnValide Then
            m_TB.BackColor = m_ValidColor
        Else
            m_TB.BackColor = m_InvalidColor
            KeyAscii = 0
        End If
        RaiseEvent ApresAppuieTouche(KeyAscii)
    End Sub
    'Méthode privée de la classe qui s'occupe de la validation de la saisie
    Private Function Controle(Code As String, ControlCode As String, Signed As Boolean) As Boolean
        Dim strCompare      As String
        Dim strTemp         As String
        Dim dblValue        As Double
        Dim blnValue        As Boolean
        If m_TB.SelStart = 0 And Signed Then
            strCompare = C_SIGNE & ControlCode
        Else
            strCompare = ControlCode
        End If
        On Error GoTo GestErr
        strTemp = Replace(m_TB.Text & Code & "0", m_BAD_SEPARATOR, m_SEPARATOR)
        dblValue = CDbl(strTemp)
        blnValue = IsNumeric(strTemp)
        blnValue = blnValue And InStr(1, strCompare, Code, vbTextCompare) <> 0
        Controle = blnValue
    FinProg:
        Exit Function
    GestErr:
        Controle = False
        Resume FinProg
    End Function
    'Méthode privée pour déterminer le séparateur de décimales
    Private Function Separator() As String
        Dim lngResultat As Long
        Dim buffer As String
        Dim pos As Integer
        Dim locale As Long
     
        'récupère l'identifiant de l'information locale de type utilisateur
        locale = GetUserDefaultLCID()
     
        'renvoie le nombre de caractères nécessaire pour recevoir la valeur du paramètre demandé
        lngResultat = GetLocaleInfo(locale, LOCALE_SDECIMAL, buffer, 0)
     
        buffer = String(lngResultat, 0)
        GetLocaleInfo locale, LOCALE_SDECIMAL, buffer, lngResultat
        pos = InStr(buffer, Chr(0))
        If pos > 0 Then Separator = Left(buffer, pos - 1)
    End Function
    Son usage ?
    Faire un UserForm, avec Deux TextBoxes (TextBox1 et TextBox2)

    Voici le code du UserForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '---------------------------------------------------------------------------------------
    ' Module    : UserForm1
    ' Créé le   : 26/02/2008 23:47
    ' Auteur    : Maxence Hubiche (mhubiche@club-internet.fr)
    ' Objet     : Test de la classe myNumericBox
    '---------------------------------------------------------------------------------------
    Option Explicit
    Dim tb1 As myNumericBox
    Dim tb2 As myNumericBox
    Private Sub UserForm_Initialize()
        Set tb1 = New myNumericBox:      tb1.Definir TextBox1, eMyType_Entier
        Set tb2 = New myNumericBox:      tb2.Definir TextBox2, eMyType_Reel
    End Sub
    Y'a plus qu'à
    Maintenance Hautemennt Simplifiée

  14. #54
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    1) En relisant attentivement, tu t'apercevrais de que je n'utilise pas du tout le Keypress, mais (comme Bigalo) uniquement l'évènement Change.
    2) je n'ai aucun problème de maintenance (dans mes applis le code de contrôle est tout simplement dans un module .bas) est est tout simplement appelé avec paramètres passés. Ces paramètres définissent ce qu'il faut, y compris si le séparateur décimal préféré de l'utilisateur n'est pas celui en vigueur sur la machine, ce qui permet de faciliter grandement la vie, notamment en cas de cohabitation d'utilisateurs de plusieurs nationalités différentes).

    Celui qui doit maintenir l'application n'a pas à se préoccuper du code du module (immuable et arrêté une fois pour toutes), mais uniquement de la seule ligne de code trouvée dans la procédure évènementielle Change et qui est l'appel d'une fonction du module avec ses paramètres ultrasimples...

  15. #55
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2007
    Messages : 66
    Points : 33
    Points
    33
    Par défaut
    dans tous les cas, j'espère ne pas avoir crée un sujet "Polémique"


  16. #56
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Moi j'espère que tu y as trouvé surtout des arguments pour et contre les différentes techniques proposées.
    Et dommage qu'ucfoutu ne réponde qu'aux points qui l'arrangent et jamais à ceux qui ne l'arrangent pas. Ca fait débat sans fin.

    D'autant que
    • Change ou KeyPress... ca ne change pas grand-chose : L'utilisateur a l'impression de ne pas pouvoir faire ce qu'il veut avec son clavier.
    • Change ou KeyPress... ca ne permet pas de tester tous les cas possibles (exemple avec les dates, qui sont des 'formats' de numériques)
    • Et tous les autres arguments qui n'ont pas trouvé d'écho lors de cette discussion.
    Moi, je me suis bien amusé, allant jusqu'à proposer une solution avec KeyPress Dommage que pour d'autres l'ire soit la fin de cette discussion.

  17. #57
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2007
    Messages : 66
    Points : 33
    Points
    33
    Par défaut
    oué t'inquiete pas, je regarde ça à tête reposé !

    j'aime bien, les comparaisons, les avantage//incovéniants,

    y a 2 écoles, et chacun à sont point de vus...

  18. #58
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par petibonohm Voir le message
    j'aime bien, les comparaisons, les avantage//incovéniants,

    y a 2 écoles, et chacun à sont point de vus...

    Exactement : à chacun son point de vue, en effet

    Je préfère quant à moi, chacun l'aura bien compris, celui de la saisie assistée en même temps que contrôlée.
    Un beep suffit pour alerter l'utilisateur lorsque la chose est évidente ! ce n'est en général pas un idiot et je préfère me débarraser de la secrétaire qui ne comprend pas, alors qu'elle est censée frapper un chiffre, pourquoi elle reçoit un beep d'erreur, plutôt que de celle qui, pouvant être dérangée ou tiraillée de toutes parts, se trompe plusieurs fois en frappant sur son clavier tout en étant au téléphone ).

    Microsoft lui même a choisi ici et là cette manière ... Il suffira de lancer certains outils pour s'en apercevoir ... celui (entre une tapée d'autres) qui sert à modifier l'heure ou la date du système, la boite de dialogue permettant de le choix d'une couleur, etc... (essayer d'y rentrer manuellement une valeur incohérente et constater...).

    Voilà donc.
    A chacun sa philosophie, c'est certain.

  19. #59
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Exactement : à chacun son point de vue, en effet
    +1

    Je réprouve par contre les exemples fallacieux qui induisent en erreur l'utilisateur, les laissant penser ou les poussant à croire que c'est sytématiquement la bonne solution. Après avoir démonté 2 exemples, en voici d'autres, tout aussi "étranges"
    Citation Envoyé par ucfoutu Voir le message
    Microsoft lui même a choisi ici et là cette manière ... Il suffira de lancer certains outils pour s'en apercevoir ... celui (entre une tapée d'autres) qui sert à modifier l'heure
    Format prédéfini : cas particulier (00:00:00)
    Citation Envoyé par ucfoutu Voir le message
    la date du système
    Sélection dans un contrôle calendrier[/quote]
    Citation Envoyé par ucfoutu Voir le message
    , la boite de dialogue permettant de le choix d'une couleur, etc... (essayer d'y rentrer manuellement une valeur incohérente et constater...).
    Deuxième cas particulier : Format prédéfini (longueur max = 3, compris entre 0 et 255)


    Alors oui, dans les cas particuliers, on peut jouer avec (KeyPress ou) Change. Mais ce sont uniquement des cas particuliers.
    Par exemple, les KeyPress proposés précédemment s'assurent-ils du dépassement de capacité ? Que nenni !
    Autre exemple, comment gérer ainsi tous les formats de date possibles ?
    etc. etc.
    Les cas concrets sont plétore qui indiquent qu'on ne peut pas 'souvent' faire du contrôle en cours de frappe. D'ailleurs, heureusement que
    - la correction des lignes de code ne se fait pas 'au fur et à mesure de la frappe'
    - la correction orthographique ne se fait pas 'au fur et à mesure de la frappe' (elle ne se lance qu'une fois la mot fini... sisi !)
    - ...

    Heureusement aussi que certains formulaires (puisqu'on parlait de UserForms) permettent une navigation 'souple' permettant à l'utilisateur d'aller là où LUI le veut, et pas là où LE DEVELOPPEUR le veut. Et là également, il sera bon de s'assurer que tout sera correctement rempli avant de valider la saisie globale, et pas chaque caractère tapé.

    Citation Envoyé par ucfoutu Voir le message
    A chacun sa philosophie, c'est certain.
    J'irai plutôt dans le sens indiqué au début : C'est l'utilisateur qui fait foi, et pas le développeur. Et si l'utilisatur veut être libre jusqu'au bout, alors le développeur s'arrangera pour valider une fois la saisie terminée. Sinon, c'est que le développeur veut CONTRAINDRE l'utilisateur.

  20. #60
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Excuse-moi, Maxence Hubiche, mais :
    1) l'utilisateur final se moque éperduement de ce qui est codé "derrière" !
    Que l'effet dont il dispose provienne de l'application de ceci ou de celà n'est pas son affaire (DateTimePicker ou autre... il ignore totalement ce que c'est...). Il se trouve tout simplement face à une attente de saisie et à un rejet immédiat (et sans message) dans les cas Microsoft exposés...
    2) Non, je n'ai en ce qui me concerne aucune difficulté à contrôler (pendant la saisie elle-même) la cohérence de'une date tout en en imposant le format de saisie (et sans DateTimePicker ni Calendar)

    3) je voudrais voir comment tu t'y prends, toi, en contrôlant la saisie d'une date à l'exit ...(selon la manière dont tu feras ce contrôle, nous arriverons peut-être à la découverte de certaines particularités de VB )

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/05/2008, 07h18
  2. [MySQL] Pourquoi dois-je utiliser des "quotes penchées" dans mes requêtes?
    Par v4np13 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/02/2008, 23h23
  3. Afficher quote/guillemet dans un input
    Par EggY14 dans le forum Langage
    Réponses: 8
    Dernier message: 15/09/2006, 12h59

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