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

  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
    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
    Re. Non ça ne fonctionne pas. De plus la variable t est déjà attribuée à TextBox1.
    Lors du test : Seule 3 lettres s'inscrivent dans le TextBox et le curseur se déplace vers la droite puis plus rien.

  9. #9
    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...
    ---------------

  10. #10
    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

  11. #11
    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
    Re. Non ça ne fonctionne pas. De plus la variable t est déjà attribuée à TextBox1.
    Etant donné que la variable "t" n'est utilisée que pour renseigner la variable "x", elle devient inutile si "x" est renseigné directement.

    Lors du test : Seule 3 lettres s'inscrivent dans le TextBox et le curseur se déplace vers la droite puis plus rien.
    Si tu nous disais une fois pour toutes ce que tu veux que cette procédure fasse.

  12. #12
    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
    Lorsque, a ta demande, j'ai remplacé t = TextBox1 par x= TextBox1, j'ai testé la procédure : 3 lettres se sont inscrites dans le TextBox puis le curseur s'est déplacé vers la droite et s'est bloqué.

    A 14H33, j'ai expliqué clairement ce que je voulais que la TextBox fasse lors de la saisie.

    Je sais qu'il ne faut pas mettre de fichier mais je place quand même pour faciliter la tâche. Fichier certifié 100% sain.

    Bonne soirée ------ Le fichier : Création n° spéciaux pour saisie auto dans TextBox.xlsm

  13. #13
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je sais qu'il ne faut pas mettre de fichier mais je place quand même pour faciliter la tâche. Fichier certifié 100% sain.
    Désolé, mais aucune "certification" n'ébranlera ce que j'expose dans ma signature

    A 14H33, j'ai expliqué clairement ce que je voulais que la TextBox fasse lors de la saisie.
    Tu en es apparemment convaincu, mais cette "clarté" n'est pas vraiment totale.
    Que cherches-tu à faire, très exactement ?
    s'agirait-il de saisir le contenu d'une textbox selon un format déterminé et appliqué dynamiquement au fur et à mesure de la saisie ?--->> réponse OUI ou réponse NON

    Si (et seulement si) la réponse est "OUI" : --->>
    1) je partage ce que d'autres ont exprimé en ce qui concerne une intervention in fine (et non en cours de saisie), tant en ce qui concerne la validité de la saisie que son formatage éventuel
    2) je sais néanmoins par expérience qu'une intervention en cours de saisie est dans certains cas souhaitable car elle offre notamment à l'utilisateur une visibilité bien meilleure de ce qu'il saisit. C'est notamment le cas (entre autres) de certaines saisies de nomenclature.

    Je suis donc d'accord (si ta réponse est affirmative et pour autant qu'il ne s'agit pas de saisie de dates ou heures) pour t'aider à réaliser ce que tu souhaites.
    Fais-moi signe si tel est bien le cas.

  14. #14
    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 le fil
    Bonjour unparia

    Oui c'est cela que je désire.
    1/ Saisie à la sortie. J'aurais pour le présent cas fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton1_Click()
    [A1] = TextBox1.Text
    End Sub
     
    Private Sub TextBox1_AfterUpdate()
                                                                     'Propriété du TextBox1 à MaxLength = 10
    TextBox1.Value = Format(TextBox1.Value, "0## / ### ## ##")
    End Sub
    2/Oui
    3/ Garder le corps du code (Si possible):
    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
    POUR Saisies Alphanumérique (Minuscules et Majuscules pour les lettres...Lol) car présentement, je ne peux que saisir des valeurs numériques.
    Le signe :

    Merci de ta contribution.
    @+ Ericcool02

  15. #15
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    J'ai commencé mes approches de solutions. Voici mes premières réflexions :
    Il est possible de créer un outil générique en évitant toutefois de sombrer dans la construction d'une "usine à gaz", aux conditions suivantes :

    1) la saisie à formater ne contient, AVANT FORMATAGE, que de chiffres et/ou des lettres non accentuées
    2) si présence de lettres, elles doivent alors être toutes de la même casse (toutes minuscules ou toutes majuscules)
    3) les caractères suivants :
    \ ! * [ ? @ #
    ne doivent pas être utilisés comme séparateurs dans le formatage

    Si l'on considère la nature habituelle des chaînes à traiter ainsi, je ne pense pas que ces impératifs constituent une véritable gêne.

    Quelques exemples de résultats ? --->>
    (13)65 E/09-44 (l'utilisateur n'ayant frappé que 1365E0944)
    BE334 TOR33-444 (l'utilisateur n'ayant frappé BE334TOR33444)
    (étant précisé que tant le formatage que le contrôle de conformité sont effectués tout au long de la saisie)

    Cela te satisferait-il ?
    Si oui, je continue ce développement d'un outil générique qui devrait finalement être assez léger et pratique tant au niveau du développeur qu'à celui de l'utilisateur.

  16. #16
    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 le fil
    Bonjour unparia

    Je prends bonne note des différents impératifs et cela me convient. Bonne continuation et d'avance merci.
    @+ Ericcool02

  17. #17
    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
    Merci beaucoup, vous êtes trop fort.
    @+ Ericcool02

+ 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, 18h51
  2. Réponses: 1
    Dernier message: 10/08/2008, 13h52
  3. format date dans un textbox
    Par GTbenj dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/06/2008, 15h33
  4. saisie de texte dans une textbox
    Par hugo7 dans le forum VB.NET
    Réponses: 9
    Dernier message: 18/02/2008, 21h42
  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, 19h20

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