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 :

Saisie format spécial dans un TextBox [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 59
    Par défaut Saisie format spécial dans un TextBox
    Bonsoir le forum

    J'ai découvert un fichier très intéressant qui me permet de très très belles orientations quant à la saisie NUMERIQUE, dynamique dans un TextBox. Le code donné ci-dessous, permet la saisie du N° SIRET d'une société
    Mon souhait : Arriver à transposer le code afin de pouvoir réaliser une saisie ALPHANUMERIQUE. Je bute grave sur la boucle :
    For i = 1 To Len(t)
    If IsNumeric(Mid(t, i, 1)) Then x = x & Mid(t, i, 1)
    Next
    que je n'arrive pas à "chunter" ou transformer (désolé mais la programmation pure n'est pas mon fort)
    Merci à celui ou celle qui voudra bien se "pencher" sur le code.
    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
    Option Explicit
     
    Private Sub TextBox1_Change()
    Dim t$, i, x$
    t = TextBox1
    For i = 1 To Len(t)
        If IsNumeric(Mid(t, i, 1)) Then x = x & Mid(t, i, 1)
    Next
    x = Left(x, 14)
    i = 1
    While Mid(x, i, 1) <> ""
        If i = 4 Then x = Left(x, 3) & " " & Mid(x, 4): i = i + 1
        If i = 8 Then x = Left(x, 7) & " " & Mid(x, 8): i = i + 1
        If i = 12 Then x = Left(x, 11) & " " & Mid(x, 12): i = i + 1
        i = i + 1
    Wend
    TextBox1 = x
    End Sub
     
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Len(TextBox1) < 17 Then Cancel = True
    End Sub
    Merci à vous Ericcool02

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Ericcool02 Voir le message
    Mon souhait : Arriver à transposer le code afin de pouvoir réaliser une saisie ALPHANUMERIQUE.
    La saisie alphanumérique, c'est ce que fait une TextBox en natif.
    Donc, sans plus d'informations, la seule solution que je peux te donner est de supprimer cette Sub pour laisser la TextBox faire ce qu'elle sait faire.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Perso, je teste après saisie, mais pas pendant. Ca oblige d'écouter l'évènement Change tu textbox, et il faut prévoir tout ce que l'utilisateur va réaliser comme opérations durant la saisie:
    • retour en arrière;
    • sélection puis suppression d'une partie de la saisie;
    • Copier-coller;
    • espaces permis, pas permis?
    • caractère _ permis, pas permis?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre éclairé
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 59
    Par défaut
    Bonjour le forum
    Bonjour Menhir, bonjour Pierre Fauconnier

    Merci à vous d'avoir pris de votre temps pour regarder mon post.

    J'ai retenu ce fichier qui me permet de saisir d'autre formats spéciaux en retenant"l'ossature ou l'architecture" du code proposé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    While Mid(x, i, 1) <> ""
    If i = 4 Then x = Left(x, 3) & " " & Mid(x, 4): i = i + 1 '      ==> Je peux en lieu et place de l'espace, mettre "*" par exemple
    If i = 5 Then x = Left(x, 4) & "/" & Mid(x, 5): i = i + 1 '      ==> Idem si je veux remplacer "/" par "+" 
    If i = 6 Then x = Left(x, 5) & " " & Mid(x, 6): i = i + 1  '                       ""    ""
    If i = 10 Then x = Left(x, 9) & " " & Mid(x, 10): i = i + 1 '                       ""     ""
    If i = 13 Then x = Left(x, 12) & " " & Mid(x, 13): i = i + 1  '                       ""     ""
    Je peux donc refaire depuis ce modèle, un format spécial pour téléphone ou ....ce que je veux ....mais en restant en format numérique suite à cette boucle - Je ne parviens à la "shunter" et dire que je veux de l'alphanumérique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To Len(t)
        If IsNumeric(Mid(t, i, 1)) Then x = x & Mid(t, i, 1)
    Next
    Ce que je désirerais, c'est garder à l'identique la partie (ou je peux remplacer la ou les ponctuations) mais en faisant en sorte que la saisie dans le TextBox puisse être Alphanumérique.

    Encore merci et bonne journée.

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Quel est le problème si tu supprimes simplement cette boucle ?

  6. #6
    Membre éclairé
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 59
    Par défaut
    Si je supprime cette bouche, il n'y a plus d'affichage possible dans le TextBox. Il me faudrait (je ne trouve pas) une fonction de ce style "If IsAlphanumeric" qui n'existe pas ..... J

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Essaye de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    t = TextBox1
    For i = 1 To Len(t)
        If IsNumeric(Mid(t, i, 1)) Then x = x & Mid(t, i, 1)
    Next
    Par :

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je ne suis pas (du tout) convaincu qu'il suffise de "patcher" une solution qui ne correspond pas à tes attentes à coup de "essaie ceci" ou "supprime cela" pour que tu trouves satisfaction.

    Tout réside dans l'expression du besoin:
    • Qu'est-ce qu'une saisie "alphanumérique" ( comment JE définis une saisie alphanumérique)?
    • Est-il important de vérifier à la saisie de chaque caractère?
    • Puis-je me contenter d'une vérification après saisie?
    • ...
    • ...



    Sans cela, dans 50 messages, on n'aura pas avancé beaucoup si tu ne réponds pas d'abord à ces questions. Programmer (= développer une solution fiable, pérenne, évolutive, répondant au besoin) ne consiste pas à prendre une solution sur le net puis à "l'aménager", plutôt mal que bien, à un besoin mal défini à coup d'essais-erreurs.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre éclairé
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 59
    Par défaut
    Si je désire "patcher" ce code qui me satisfait en lui-même :
    A l'origine, ce code est destiné à entrer un N° SIRET sde société en dynamique.
    Ce qui a de bien, c'est que j'arrive à le transformer pour entrer des n° spéciaux (voir exemple).
    Ce que je désirerais, c'est que je puisse entrer des données alphanumérique
    Pour entrer en dynamique un N° de SIRET
    Ex*: 123 456 789 12345

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    hile Mid(x, i, 1) <> ""W
        If i = 4 Then x = Left(x, 3) & " " & Mid(x, 4): i = i + 1
        If i = 8 Then x = Left(x, 7) & " " & Mid(x, 8): i = i + 1
        If i = 12 Then x = Left(x, 11) & " " & Mid(x, 12): i = i + 1
        i = i + 1
    Code revu pour entrer un n° de téléphone étranger
    Ex*: 123 / 456 78 91
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    While Mid(x, i, 1) <> ""
        If i = 4 Then x = Left(x, 3) & " " & Mid(x, 4): i = i + 1
        If i = 5 Then x = Left(x, 4) & "/" & Mid(x, 5): i = i + 1
        If i = 6 Then x = Left(x, 5) & " " & Mid(x, 6): i = i + 1
        If i = 10 Then x = Left(x, 9) & " " & Mid(x, 10): i = i + 1
        If i = 13 Then x = Left(x, 12) & " " & Mid(x, 13): i = i + 1
    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] Saisie format monétaire dans un tableau via un textbox
    Par Mr l'Ashanti dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/09/2019, 17h51
  2. Réponses: 1
    Dernier message: 10/08/2008, 12h52
  3. format date dans un textbox
    Par GTbenj dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/06/2008, 14h33
  4. saisie de texte dans une textbox
    Par hugo7 dans le forum VB.NET
    Réponses: 9
    Dernier message: 18/02/2008, 20h42
  5. Probléme de format heure dans le textbox
    Par jijie dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/02/2008, 18h20

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