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. #1
    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 TextBox Entier et Demi - Si saisie virgule alors affichage virgule 5
    Bonjour,

    Dans un TextBox (Userform), je dois saisir des quantités soit entières, soit demi.
    Il s'agit en fait de durées, avec un minimum d'une demi-heure.

    Le principe :
    > empêcher la saisie d'un point en première place
    > si saisie d'un point : on ajoute ".5" si pas déjà de point
    > si virgule ==> on la transforme en point
    > empêcher le collage et la saisie de valeurs alphabétiques (y compris le signe "-")
    > si on veut supprimer le dernier chiffre et que l'on obtient un point à droite ==> suppression du point (ex : supprimer le 5 dans 1234.5 donne 1234)
    > empêcher la saisie d'autre chose après le ".5"

    J'ai donc fait ce code, mais il me semble excessivement complexe pour cette petite finalité.
    L'un d'entre vous aurait l'amabilité d'y jeter un œil?
    Merci d'avance.

    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
    Option Explicit
     
    Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
      Dim i&
        For i = 1 To Len(TextBox1.Value)
            If InStr("1234567890.", Mid(TextBox1.Value, i, 1)) = 0 Then
                TextBox1.Value = ""
                MsgBox "Saisie invalide"
                Cancel = True
                Exit For
            End If
        Next i
    End Sub
     
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      Dim bFlag As Boolean
     
        With TextBox1
            'si pas encore de point
            If Len(.Text) - Len(Replace(.Text, ".", "")) = 0 Then
                'selon si la touche Maj est appuyée
                Select Case Shift
                    Case 0 'Maj non appuyée
                        Select Case KeyCode
                            'bFlag est True si SelStart > 0
                            Case 110: bFlag = (.SelStart > 0) 'point clavier numérique
                            Case 188: KeyCode = 110: bFlag = (.SelStart > 0) 'virgule
                        End Select
                    Case 1 'Maj appuyée
                        If KeyCode = 190 Then bFlag = (.SelStart > 0) 'point clavier alpha
                End Select
                'si bFlag = True alors : on a un seul point ET on vient de le saisir ET il n'est pas en première position
                If bFlag Then
                    'donc on affiche .5
                    .Text = .Text & ".5"
                    KeyCode = 0
                End If
            'sinon, si déjà un point
            Else
                'Donne l'accès uniquement aux touches : Retour arrière, Suppr, flèche gauche, flèche droite, TAB, Entrée
                If KeyCode <> 8 And KeyCode <> 46 And KeyCode <> 37 And KeyCode <> 39 And KeyCode <> 9 And KeyCode <> 13 Then KeyCode = 0
            End If
        End With
    End Sub
     
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        If InStr("1234567890.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    End Sub
     
    Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If Right(TextBox1.Text, 1) = "." Then TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 1)
    End Sub
    Cordialement,
    Franck

  2. #2
    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
    Bonjour Frank,

    Une petite simplification :
    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 TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        With TextBox1
            'si pas encore de point
            If InStr(1, .Text, ".") = 0 Then
                If (Shift = 0 And (KeyCode = 110 Or KeyCode = 188)) Or (Shift = 1 And KeyCode = 190) Then
                    If .SelStart > 0 Then
                        'donc on affiche .5
                        .Text = .Text & ".5"
                    End If
                    KeyCode = 0
                End If
            'sinon, si déjà un point
            Else
                'Donne l'accès uniquement aux touches : Retour arrière, Suppr, flèche gauche, flèche droite, TAB, Entrée
                If KeyCode <> 8 And KeyCode <> 46 And KeyCode <> 37 And KeyCode <> 39 And KeyCode <> 9 And KeyCode <> 13 Then KeyCode = 0
            End If
        End With
    End Sub
    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

  3. #3
    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
    bonjour franck
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Le principe :
    > empêcher la saisie d'un point en première place
    > si saisie d'un point : on ajoute ".5" si pas déjà de point
    > si virgule ==> on la transforme en point
    > empêcher le collage et la saisie de valeurs alphabétiques (y compris le signe "-")
    >  si on veut supprimer le dernier chiffre et que l'on obtient un point à droite ==> suppression du point (ex : supprimer le 5 dans 1234.5 donne 1234)
    > empêcher la saisie d'autre chose après le ".5"
    pour commencer voila pour ce qui est de taper les touche pour inscrire tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        If Right(TextBox1, 2) = ".5" Then KeyAscii = 0: Exit Sub   'bloquer la terminaison du texte a ".5"
       If InStr(TextBox1, ".") > 0 Then KeyAscii = 53 'apres le point tu peux taper n'importe quoi se sera toujours "5"
       If KeyAscii < 48 Or KeyAscii > 57 Then 'si on tape autre chose que de 0 a 9
       'si ce autre chose(keyascii)=44/virgule) alors c'est un point sinon rien
       If KeyAscii = 44 Then KeyAscii = IIf(InStr(TextBox1, ".") < 1, 46, 0) Else KeyAscii = 0 ' rien que les nombres de 0 a 9 et le point
     End If
    End Sub
    en l'etat avec ce code
    • on bloque tout y compris le point sauf les chiffres de 0 a 9
    • une fois le point inscrit on ne peut plus le taper
    • apres le point tu peux taper n'importe quel chiffre se sera toujours 5


    je suis en train de te préparer le "5" automatique apres le "."
    malheureusement du est obligé de gérer ca dans un autre evenement car c'est une question de .value du textbox l'ors du keypress ou keyup qui est différent
    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

  4. #4
    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 à tous

    Salut Franck
    Mon petit doigt me laisse penser que tu vas aimer cette petite gymnastique rigolote (et faite pour toi) :
    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
    Private Sub TextBox1_Change()
      Static toto As String
      Dim c As String
      c = TextBox1.Text
      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 Then
       TextBox1.Text = c
       toto = TextBox1.Text
      Else
        TextBox1.Text = toto
      End If
      Application.EnableEvents = True
    End Sub
    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.

  5. #5
    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 à tous,

    @ Patrice, merci, c'est déjà ça.

    @Patrice et Patrick,
    Merci à vous deux.
    Patrick, je vais tester, mais lorsque je pensais simplification, c'était plutôt ne se servir que d'un unique événement.

    Je vais tout de même essayer vos propositions.

    @Jacques,
    Merci, c'est dans la lignée de mon souhait.
    Je vais également tester cela et reviens après.
    Cordialement,
    Franck

  6. #6
    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
    Ah oui (j'avais oublié cette histoire de virgule) -->>
    Fastoche -->>
    suffit dans mon code de remplacer alors la ligne :

    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c = Replace(TextBox1.Text, ",", ".")
    Amitiés
    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. #7
    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
    C'est, en effet, assez rigolo cette "pseudo-récursivité" sur l'événement Change().

    Ma première question sera toute simple: pourquoi utiliser Application.EnableEvents ?

    Sinon, l'utilisation de Len(CStr(Val(c))) est ici parfaite !
    Cordialement,
    Franck

  8. #8
    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
    Attends --->> je viens de voir que tu ne veux également rien pouvoir frapper après un .5 --->>

    fastoche également --->>

    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Len(CStr(Val(c))) = Len(c) And Val(c) > 0 Then
    par
    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

    PS : pourquoi inhiber enableevents ? pour ne pas le relancer 2 fois (en modifiant textbox.text, le change interviendrait à nouveau pour rien, sinon)
    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.

  9. #9
    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
    PS : pourquoi inhiber enableevents ? pour ne pas le relancer 2 fois (en modifiant textbox.text, le change interviendrait à nouveau pour rien, sinon)
    Application.EnableEvents ne désinhibe pas l'événement Change() d'un Textbox d'userform.
    Ici, la modification de TextBox.Text relance l'événement Change().
    Mais cela fonctionne bien.
    Bon, je sais, de toutes manières, comment inhiber l'événement.

    J'aurais toutefois une question subsidiaire...
    Désolé, j'aurais pu y penser avant.

    Lors d'une suppression, j'aurais voulu que, si l'on supprime le ".", s'il est toujours suivi d'un 5, que le 5 s'efface également.
    Possible sans utiliser la propriété Tag du TextBox?
    Cordialement,
    Franck

  10. #10
    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 j'ai parler de deux evenements carje part du principe que l'on doit pouvoir modifier ce qui est avant le "." soit ajouter un chiffre soit le supprimer

    avec les touche "retour en arriere,suppr,touche numerique

    je sais que ca te plait pas mais teste ca
    la seule chose que je n'ai pas résolu c'est la touche suppr pour un seltart 2 caracteres avant la fin ".5" compris ou si il n'y a pas ".5"
    sinon j'ai tout et meme plus car j'inclu les touche retour en arriere et suppr avec les contraintes que cela impose

    perso le code n'a rien de compliqué jeux avec keyascii et keycode

    teste au moins
    j'ai mis beaucoup de commentaires quand tu les enleve il reste plus grand chose
    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
    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
        'bloquer la terminaison du texte a ".5"si le seltart est = au len comme ca on peut toujours revenir au sur ce qui est avant le point en positionnant le curseur
        If Right(TextBox1, 2) = ".5" And TextBox1.SelStart = Len(TextBox1) Then KeyAscii = 0: Exit Sub
        'si on tape autre chose que de 0 a 9
        If KeyAscii < 48 Or KeyAscii > 57 Then
            'si ce autre chose(keyascii)=44/virgule) alors c'est un point sinon rien
            If KeyAscii = 44 Then KeyAscii = IIf(InStr(TextBox1, ".") < 1, 46, 0) Else KeyAscii = 0    ' rien que les nombres de 0 a 9 et le point
        End If
     
        If Left(TextBox1.Value, 1) = "." Then KeyAscii = 0    'le point ne peut pas etre le premier caractere tapé
    End Sub
    Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = 188 Then TextBox1 = TextBox1 & "5"    ' le ".5" automatique lorque la touche "," transformé en "." est tapée
        If KeyCode = 8 Then
        If Right(TextBox1, 1) = "." Then TextBox1 = Replace(TextBox1, ".", "") 'on supprime le point aussi si c'est le dernier caractere
        'si on place le curseur juste avant le point et que l'on tape la touche suppr on suprime le dernier caractere qui est le 5
        If TextBox1.SelStart + 1 = Len(TextBox1) Then TextBox1 = Left(TextBox1, TextBox1.SelStart)
        End If
        If KeyCode = 46 Then
           ' c 'est la que j'ai un soucis si je n'ai pas de "." ca supprime quand meme deux caractere avec la touche suppr
            If TextBox1.SelStart + 1 = Len(TextBox1) Then TextBox1 = Left(TextBox1, TextBox1.SelStart)
        End If
    End Sub
    demonstration:
    Nom : demo2.gif
Affichages : 804
Taille : 215,1 Ko
    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

  11. #11
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour à tous,

    pijaku, j'ai trouvé ce lien, si tu ne l'as pas déjà vu, qui pourrait peut être t'intéresser.
    je n'ai pas trop eu le temps de regarder, et il faut que je me mette sérieusement à l'apprentissage des useform, une partie vba que je n'ai pas encore travaillé …

    http://didier-gonard.developpez.com/...e-dans-texbox/

    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  12. #12
    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
    Hé ! Tu deviens gourmand, hein, Franck ...
    OK je m'y mets et reviens en moins d'une minute
    A plus ...
    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.

  13. #13
    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
    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 ?
    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.

  14. #14
    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
    @Ryu,
    Je le connais par coeur ce lien.
    Merci quand même, c'est gentil.

    @Patrick :
    ne t'inquiète pas, je vais tester toutes les propositions.
    Pour gérer la suppression du point, ce n'est pas très compliqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If KeyCode = 46 And .SelStart = Len(.Text) - 2 Then
          .Text = Mid(.Text, 1, Len(.Text) - 2)
    @Jacques,
    Oui, je sais, suis gourmand!
    Mais c'est les fêtes ;-)
    Cordialement,
    Franck

  15. #15
    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
    J'aurais toutefois une question subsidiaire...
    Désolé, j'aurais pu y penser avant.

    Lors d'une suppression, j'aurais voulu que, si l'on supprime le ".", s'il est toujours suivi d'un 5, que le 5 s'efface également.
    Possible sans utiliser la propriété Tag du TextBox?
    Ahhhh!!!! ben voila ..... alors test #post 10

    c'est justement la ou le bas blaisse dans un seul evenement il te sera difficile gerer ces contraintes

    je l'ai expliquer plusieurs fois dans mes contribution sur des textfox formatés avec masque de saisie ou pas

    le keyup te donne la sortie definitive les keypress et keydown te donne la valeur sans la touche tapé

    et dans l'evenement change se serait le serpent qui se mort la queue evenement a repetition et en plus tu n'aurais pas tout ce que tu veux

    je vais quand meme travailler sur l'evenement change pour voir j'usqu'ou on peut aller
    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

  16. #16
    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
    Mais c'est les fêtes ;-)
    Et le papa Noël est déjà passé (mon message juste au-dessus) (il a un traineau rapide, celui-là) ...
    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. #17
    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
    hihihihi!!!
    toi aussi tu te plante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If KeyCode = 46 And .SelStart = Len(.Text) - 2 Then
          .Text = Mid(.Text, 1, Len(.Text) - 2)
    teste avec un nombre sans decimale hihihihi
    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

  18. #18
    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
    Coucou Patrick :

    c'est justement la ou le bas blaisse dans un seul evenement il te sera difficile gerer ces contraintes
    sauf à Noël, hein ... et nous sommes en pleine période, comme tu le constates ...
    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.

  19. #19
    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
    a part la touche 45 sur le seltart-2 avec ".5" ou pas dans mon code aucunne erreur n'est permises ni aucune restrictions

    ce qui dans le seul evenement change est impossible sauf peut etre usine a gaz

    parti de la il faudrait revoir peu etre la notion de "compliqué"
    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

  20. #20
    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
    autant pour moi jacques ca a l'air de fonctionner +1

    reste quand meme a revoir la notion de "compliqué"
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 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