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 :

TextBox Entier et Demi - Si saisie virgule alors affichage virgule 5


Sujet :

Macros et VBA Excel

  1. #21
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    reste a revoir la notion de "compliqué"
    C'est à toi, que ce conseil doit être donné, Patrick.
    A moins que tu ne trouves "compliqué" ce qui, pour d'autres (à commencer par la machine), est d'une très grande simplicité ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  2. #22
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Po po po po po...
    N'allez pas trop vite en besogne!
    Je ne suis pas rapide avec mon traîneau sans la neige...

    @Jacques :
    Super!
    Tout fonctionne.
    Me suis même permis deux modifs :
    1- la mise sous une fonction de verif (si plusieurs textbox à vérifier...)
    2- Un ajout pour le cas ou l'on voudrais saisir un second point juste pour embêter le monde.
    Cela donne :
    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
    Option Explicit
     
    Private Sub TextBox1_Change()
      TextBox1.Text = VerifTextBox(TextBox1.Text)
    End Sub
     
    Private Function VerifTextBox(Texte) As String
      Static toto As String
      Dim c As String
     
        c = Replace(Texte, ",", ".")
        If InStr(c, ".") = 0 And InStr(toto, ".") > 0 Then
            VerifTextBox = Int(Val(toto)): toto = VerifTextBox: Exit Function
        End If
        If c = "" Then toto = "": Exit Function
        If Right(c, 1) = "." Then
            If Not toto Like "*.5" Then
                c = c & "5"
            ElseIf c Like "*.5." Then 'ajout d'un second point
                c = Mid(c, 1, Len(c) - 1)
            Else
                c = Int(Val(toto))
            End If
        End If
        If Len(CStr(Val(c))) = Len(c) And Val(c) > 0 And Not c Like ("*.##*") Then
            VerifTextBox = c
            toto = Texte
        Else
            VerifTextBox = toto
        End If
    End Function
    @Patrick :
    Laisse moi un peu de temps pour essayer ta solution.
    Celle de Jacques fonctionne très bien, je le confirme.

    EDIT : pour en revenir sur la notion de "complexe" (et non "compliqué").
    Aucun des codes donnés ici n'est compliqué.
    Le mien (le premier donné dans le sujet), je le considère comme "complexe" car il utilise 4 événements.
    Beaucoup trop pour juste obtenir un "simple 5 après la saisie d'un point" et les quelques contraintes supplémentaires que je me suis imposé.
    Ces contraintes supplémentaires auraient pu également être mises sur le compte de l'utilisateur. Il ne fait pas attention, tant pis pour lui!
    Cordialement,
    Franck

  3. #23
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Patrick,

    Ton code comporte deux gros défauts.
    1- on ne peut pas se servir du point du clavier numérique (ce qui est handicapant lorsque l'on n'a que des chiffres à saisir),
    2- On peut saisir autant de chiffres que l'on veux après la virgule.***


    *** Pour tester cela :
    1- inscrit un nombre, (ex : 1234)
    2- appuies sur la virgule ==> affichage : 1234.5
    [jusqu'ici tout va bien]
    3- appuies, à nouveau sur la virgule ==> affichage 1234.55
    4- tu peux maintenant saisir tous les chiffres que tu veux...

    EDIT : j'ajoute un gros bug : erreur 5 sur If Mid(TextBox1.Value, TextBox1.SelStart) dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'on ne peut pas revenir apres le point sur ce qui est inscrit c'est a dire".5" exemple on ne peut pas taper un chiffre  en positionnant le curseur avant le "5"
    'par contre si tu veux ajouter un chiffre avant le point tu peux
        If Len(TextBox1.Value) > 0 Then
            If Mid(TextBox1.Value, TextBox1.SelStart) = ".5" Then KeyAscii = 0: Exit Sub
        End If
    Pour le reproduire :
    1- taper un chiffre
    2- placer le curseur à gauche de ce chiffre
    3- taper un chiffre...
    Cordialement,
    Franck

  4. #24
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    beep beep !!!!!!!
    ah je vais pas le lacher celui la

    mon cher jacques tape le nombre que tu veux puis tape deux fois sur la virgule d'affilé ou separer par un/des chffres


    exemple essaie de taper
    123,456,789
    ou 123,,




    Nom : diabolo satanas eclat rire.gif
Affichages : 1679
Taille : 70,5 Ko

    heu.... aut'chose?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #25
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    beep beep !!!!!!!
    ah je vais pas le lacher celui la

    mon cher jacques tape le nombre que tu veux puis tape deux fois sur la virgule d'affilé ou separer par un/des chffres


    exemple essaie de taper
    123,456,789
    ou 123,,
    Ben oui!
    Avec le code de Jacques ==> aucun problème ! tout est ok!
    Par contre, c'est avec ton code que tu as testé. Et là, ça ne va pas du tout...

    Même un copié/collé alphabétique s'inscrit dans ton textbox. Pas dans celui de Jacques.
    Cordialement,
    Franck

  6. #26
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Qu'est-ce que tu "racontes", Patrick ?
    Avec MON code (il est, je te le rappelle, en message N° 13) : impossible de taper deux fois la virgule (ni le point, d'ailleurs). Et encore moins de frapper autre chose que ce qui a été demandé !

    Alors ? Tu ne vas pas lâcher quoi et qui ? ça, alors ... (je commence à deviner ce que TU devrais lâcher, toi ...)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #27
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par unparia Voir le message
    Qu'est-ce que tu "racontes", Patrick ? impossible de taper deux fois la virgule (ni le point, d'ailleurs).
    Il a testé son code, pas le tien.
    Cordialement,
    Franck

  8. #28
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par unparia Voir le message
    houala, Franck .. (j'en sue encore malgré le vent très fort ... : )
    M'a pas coûté cher, c'taffaire --->>
    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
    Private Sub TextBox1_Change()
      Static toto As String
      Dim c As String
      c = Replace(TextBox1.Text, ",", ".")
      If InStr(c, ".") = 0 And InStr(toto, ".") > 0 Then
          TextBox1.Text = Int(Val(toto)): toto = TextBox1.Text: Exit Sub
      End If
      If c = "" Then toto = "": Exit Sub
      If Right(c, 1) = "." Then
        If Not toto Like "*.5" Then
          c = c & "5"
        Else
          c = Int(Val(toto))
        End If
      End If
      Application.EnableEvents = False
      If Len(CStr(Val(c))) = Len(c) And Val(c) > 0 And Not c Like ("*.##*") Then
       TextBox1.Text = c
       toto = TextBox1.Text
      Else
        TextBox1.Text = toto
      End If
      Application.EnableEvents = True
    End Sub
    Aut'chose ?
    On ne peut plus supprimer le premier chiffre s'il est suivi d'un zéro.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  9. #29
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    chez moi avec le codes de jacques si je tape 2 fois la virgule j'ai une erreur 13 incompatibilité de type parce que int sur un texte avec 2 virgules declenche l'erreur

    j'ai palié au depart de l'evenement en faisant sauter le dernier ","

    ca fonctionne
    Nom : demo2.gif
Affichages : 333
Taille : 174,3 Ko

    parcontre la suppression complete doit se faire en deux fois si il y a decimale
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #30
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Patrice740
    On le peut en utilisant la touche backspace.
    Mais si tu tiens à ce qu'on puisse également le faire à l'aide de la touche SUPPR y compris dans ce cas-là, je ferai également cela à mon retour de la pêche
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  11. #31
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Allez, Patrick, montre-le donc, mon soit-disant code, tel que tu l'as écrit !
    (un copié/collé de ce que tu as réellement mis sur ta machine et "testé", hein ...)
    Je te rappelle qu'il ne doit pas être "accompagné" de TES évènements à toi (keypress ou autres) qui le pollueraient, hein ...
    Et tu vas avoir honte de tes petites images plus haut.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  12. #32
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour Patrice740
    Il y a un autre problème, aussi à cause du Val(), on ne peut pas saisir 0.5
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  13. #33
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Même un copié/collé alphabétique s'inscrit dans ton textbox. Pas dans celui de Jacques.
    je ne m'en était pas occupé un oubli de ma part
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #34
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Il y a un autre problème, aussi à cause du Val(), on ne peut pas saisir 0.5
    ah oui Patrice c'est vrai j'avais pas tester ca
    ca me parait bien compromis sa methode utilisant val
    sauf pirouette en mode string

    comme quoi des fois

    cela dit la bascule de deux variable est seduisante
    mais perso je préfere les evenements qui sont plus explicites en soit avec les constantes keyascii ou keycode
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #35
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour Patrice,

    La suppression du 1er chiffre, si suivi d'un zéro, n'a pas grand intérêt.
    Dans ce cas, il suffit de :
    > pouvoir le remplacer (en le sélectionnant le code fonctionne)
    > tout supprimer
    > autre traitement, mais prévoir quoi faire si plein de 0 (zéros)

    Tout simplement, ici mis en commentaires :
    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
      Static toto As String
      Dim c As String
     
        c = Replace(Texte, ",", ".")
        If InStr(c, ".") = 0 And InStr(toto, ".") > 0 Then
            VerifTextBox = Int(Val(toto)): toto = VerifTextBox: Exit Function
        End If
        If c = "" Then toto = "": Exit Function
        If Right(c, 1) = "." Then
            If Not toto Like "*.5" Then
                c = c & "5"
            ElseIf c Like "*.5." Then
                c = Mid(c, 1, Len(c) - 1)
            Else
                c = Int(Val(toto))
            End If
        End If
        If Len(CStr(Val(c))) = Len(c) And Val(c) > 0 And Not c Like ("*.##*") Then
            VerifTextBox = c
            toto = Texte
        'ElseIf Left(c, 1) = "0" Then
            'ici traiter la suppression du premier chiffre
            'si 0 est en seconde position
        Else
            VerifTextBox = toto
        End If
    Cordialement,
    Franck

  16. #36
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Il y a un autre problème, aussi à cause du Val(), on ne peut pas saisir 0.5
    J'avais simplement compris que la demande concernait des nombres >= 1
    Mais si c'est cela qui vous arrête (vraiment ...) --->>
    Fastoche également ---
    remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Len(CStr(Val(c))) = Len(c) And Val(c) > 0  And Not c Like ("*.##*") Then
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Len(CStr(Val(c))) = Len(c) And c Like "[0-9]*" And Not c Like ("*.##*") Then
    Vraiment ... !!
    Aut'chose ?

    Je vous préviens tout de suite : la logique de ce code est telle, qu'il est extrêmement facile de l'adapter sans le bouleverser (contrairement à d'autres approches)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  17. #37
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Salut Franck
    Et même avant d'aller à la pêche
    (je l'ai dit : la logique même de ce code permet toutes les adaptations que l'on veut, sans bouleversement) :
    Regarde : il suffit de modifier la valeur de la variable c ainsi :
    c = CStr(Val(Replace(TextBox1.Text, ",", ".")))
    Ce qui donne (pour récapituler le tout) :
    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
    Private Sub TextBox1_Change()
      Static toto As String
      Dim c As String
      c = CStr(Val(Replace(TextBox1.Text, ",", ".")))
     
      If InStr(c, ".") = 0 And InStr(toto, ".") > 0 Then
          TextBox1.Text = Int(Val(toto)): toto = TextBox1.Text: Exit Sub
      End If
      If c = "" Then toto = "": Exit Sub
      If Right(c, 1) = "." Then
        If Not toto Like "*.5" Then
          c = c & "5"
        Else
          c = Int(Val(toto))
        End If
      End If
      Application.EnableEvents = False
      If Len(CStr(Val(c))) = Len(c) And c Like "[0-9]*" And Not c Like ("*.##*") Then
       TextBox1.Text = c
       toto = TextBox1.Text
      Else
        TextBox1.Text = toto
      End If
      Application.EnableEvents = True
    End Sub
    et Patrice est encore mieux servi que ce qu'il demandait -->> s'il supprime le 1 de 1032, il obtient directement 32 et non "032"

    C'est toute la différence entre la maintenance/évolution d'un code soit-disant complexe et celle d'un code qui, lui, est construit de telle sorte que chaque nouvelle demande pose un nouveau problème ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  18. #38
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    @jacques
    tape"0," on obtiens "0.5"
    puis tape la touche back(on reviend a "0"
    puis tape "1"
    y aurait il pas un moyen pour que ce 1 remplace le zero car en l'etat le 1 est inhibé on est donc bloqué si on ne fait pas un back sur le zero

    code testé avec ta derniere mise a jour bien entendu

    re probleme résolu comme ceci
    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
    Private Sub TextBox1_Change()
      Static toto As String
      Dim c As String
      c = Replace(TextBox1.Text, ",", ".")
      If InStr(c, ".") = 0 And InStr(toto, ".") > 0 Then
          TextBox1.Text = Int(Val(toto)): toto = TextBox1.Text: Exit Sub
      End If
      TextBox2 = c
    TextBox3 = toto
      If c = "" Then toto = "": Exit Sub
      If Right(c, 1) = "." Then
        If Not toto Like "*.5" Then
          c = c & "5"
        Else
          c = Int(Val(toto))
        End If
      End If
      Application.EnableEvents = False
      If Len(CStr(Val(c))) = Len(c) And c Like "[0-9]*" And Not c Like ("*.##*") Then
       TextBox1.Text = c
       If Val(toto) = 0 And Len(toto) <> 0 And Val(c) = 0 Then TextBox1 = ""
      toto = TextBox1.Text
      Else
        TextBox1.Text = toto
      End If
      Application.EnableEvents = True
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  19. #39
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Non Jacques.
    Une telle modification (c = CStr(Val(Replace(TextBox1.Text, ",", ".")))) empêche la saisie de la virgule.
    Je préfères traiter ce cas "à part" dans la seconde partie avec un ElseIf :

    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
    Option Explicit
     
    Private Sub TextBox1_Change()
      TextBox1.Text = VerifTextBox(TextBox1.Text)
    End Sub
     
    Private Function VerifTextBox(Texte) As String
      Static toto As String
      Dim c As String
     
        c = Replace(Texte, ",", ".")
        If InStr(c, ".") = 0 And InStr(toto, ".") > 0 Then
            VerifTextBox = Int(Val(toto))
            toto = VerifTextBox
            Exit Function
        End If
        If c = "" Then toto = "": Exit Function
        If Right(c, 1) = "." Then
            If Not toto Like "*.5" Then
                c = c & "5"
            ElseIf c Like "*.5." Then       ' MODIF
                c = Mid(c, 1, Len(c) - 1)
            Else
                c = Int(Val(toto))
            End If
        End If
        If Len(CStr(Val(c))) = Len(c) And c Like "[0-9]*" And Not c Like ("*.##*") Then
            VerifTextBox = c
            toto = VerifTextBox
        ElseIf Left(c, 1) = "0" Then       ' MODIF
            VerifTextBox = CStr(Val(c))
            toto = VerifTextBox
        Else
            VerifTextBox = toto
        End If
    End Function
    Cordialement,
    Franck

  20. #40
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    @jacques
    tape"0," on obtiens "0.5"
    puis tape la touche back(on reviend a "0"
    puis tape "1"
    y aurait il pas un moyen pour que ce 1 remplace le zero car en l'etat le 1 est inhibé on est donc bloqué si on ne fait pas un back sur le zero

    code testé avec ta derniere mise a jour bien entendu
    Patrick,
    Je n'ai pas ce comportement.
    Quand je tapes 0, j'obtiens 0, pas 0.5.
    Si j'effaces le .5 de 0.5, j'obtiens bien 0.
    Mais quand je saisi 1, le 0 est remplacé par 1.
    Cf ma dernière modification du code de Jacques.
    Cordialement,
    Franck

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

Discussions similaires

  1. VBA - Limiter la saisie d'une seule virgule ou point dans une TextBox
    Par natab dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/08/2011, 13h00
  2. Réponses: 2
    Dernier message: 02/06/2010, 13h12
  3. [XL-2000] textbox : garder le focus si saisie erronée ?
    Par zanimox dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 03/06/2009, 15h22
  4. calculer une valeur dans un textbox au moment de la saisie
    Par Msysteme dans le forum Windows Forms
    Réponses: 9
    Dernier message: 16/04/2009, 18h15

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