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 :

Problème Format Affichage Textbox "0# ## ## ## ##"


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Par défaut Problème Format Affichage Textbox "0# ## ## ## ##"
    Bonjour,

    Dans mon je souhaite afficher un N° de tél à renvoyer dans mon tableau je lui dis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TxtTel1_Change()
        TxtTel1.Value = Format(TxtTel1.Value, "## ## ## ## ##")
    End Sub
    Il Affiche n'affiche pas le "0" devant ce que je comprends:
    Nom : Format 1.jpg
Affichages : 1408
Taille : 5,9 Ko

    Quand je dis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TxtTel1_Change()
        TxtTel1.Value = Format(TxtTel1.Value, "0# ## ## ## ##")
    End Sub
    Il saisie de droite à gauche et complète avec des "0" sur la gauche, ca me dérange:
    Nom : Format 1.5.jpg
Affichages : 1419
Taille : 6,2 Ko

    une fois la saisie finie, j'ai ce que je veux:
    Nom : Format 2.jpg
Affichages : 1841
Taille : 6,4 Ko

    J'ai alors essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TxtTel1_Change()
      If Len(TxtTel1) = 10 Then
        TxtTel1.Value = Format(TxtTel1.Value, "0# ## ## ## ##")
      End If
    End Sub
    Le résultat est parfait.
    Nom : Format 2.jpg
Affichages : 1841
Taille : 6,4 Ko
    Le problème, qui est aussi valable pour les autres solutions au dessus, est que si je me trompe et veux effacer avec "backspace", à partir du moment ou je supprime le 4ème caractère, il me replace de "0" à gauche
    Nom : Format 3.jpg
Affichages : 1415
Taille : 6,2 Ko
    pour finir comme ça quand je vais au bout:
    Nom : Format 4.jpg
Affichages : 1415
Taille : 6,2 Ko

    Une idée peut être?
    Merci

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 591
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 591
    Par défaut
    BOnjour

    Les # représentent des chiffres facultatifs donc normal

    Il faut "00 00 00 00 00"

  3. #3
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Par défaut
    Citation Envoyé par 78chris Voir le message
    Il faut "00 00 00 00 00"
    Ca change pas malheureusement, J'ai toujours le même problème quand je reviens en arrière, il me complète à gauche avec des "0"
    Nom : Format 3.jpg
Affichages : 1410
Taille : 6,2 Ko

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    le formatage commence toujours a droite si chiffre manquant les zero se place forcement devant
    il faut les ajouter les zeros a la chaine du textbox avant de formater
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test1()
    chaine = "03034"
    MsgBox "formatage sans les zero en plus apres  " & Format(chaine, " @@ @@ @@ @@ @@ ")
    MsgBox "formatage avec les zero apres " & Format(Mid(chaine & "0000000000", 1, 10), " @@ @@ @@ @@ @@ ")
    End Sub
    c'est du string alors les zero eventuellement devant restent




    [/CODE]maintenant si le contexte est dynamique (au taper de touche)alors la c'est une autre histoire format ne suffit pas il faut intercepter dans le change ou keypress,ou keydown etc.....
    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. #5
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Par défaut
    Merci Patrick mais ca ne marche pas...!
    si je mets " @@ @@ @@ @@ @@ ", Je peux effacer mais je reviens pas en début de txtbox. Puis quand je resaisi, je n'ai plus les espaces
    si je mets "@@ @@ @@ @@ @@", je ne peux pas tout effacer.

    Je comprends pas, pourtant Excel a un format spécial N° de Tel, on devrait y avoir accès non?

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    je crois que tu parle de traitement dynamique
    pour ce resuktat et pouvoir revenir en arriere ou modifier c'est un peu plus complexe que ca


    sinon oui le format telephone fonctionne avec une chainne il faut separer les tranches en double guillemet
    et pour les zero apres tu n'a cas travailler a l'envers de l'envers c'est rigolo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Macro1()
        Dim chaine$
        chaine = StrReverse(Format(StrReverse(23561), "0#"" ""##"" ""##"" ""##"" ""##"))
        Debug.Print chaine
    End Sub
    mais pour du dynamique entierement controlé du 1er au dernier chiffre tapé ,c'est une autre paire de manchene crois pas que c'est si facile
    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

  7. #7
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Par défaut
    Ok merci,
    Je ne vais pas alourdir inutilement mon projet. L'utilisateur appuiera sur la touche ECHAP pour vider la cellule.
    Là ça marche, je trouvais ça un peu moins ludique, c'est tout.
    J'avais aussi essayé avec Keypress avec un truc du genre
    Si Key.... = 8(backspace)
    Textbox= ""
    Mais en vain, tu saurais me dire pourquoi?

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Peut être une piste sur KeyPress en formatant au fur et à mesure de la saisie et dans ce cas, elle se fait de gauche à droite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
        Select Case Len(TextBox1.Value)
     
            Case 2: TextBox1.Value = Format(TextBox1.Value, "00") & " "
            Case 5: TextBox1.Value = Format(TextBox1.Value, "00 00") & " "
            Case 8: TextBox1.Value = Format(TextBox1.Value, "00 00 00") & " "
            Case 11: TextBox1.Value = Format(TextBox1.Value, "00 00 00 00") & " "
            Case 14: TextBox1.Value = Format(TextBox1.Value, "00 00 00 00 00")
     
        End Select
     
    End Sub

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    @theze
    dans ce contexte formater est supperflu

    on ajoute simplement l'espace au len(2,5,8,11)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        If Not Chr(KeyAscii) Like "[0-9]" Then KeyAscii = 0 'on ne peut taper que des chiffre dans le textbox
        With TextBox2
            .Text = Mid(.Text & Chr(KeyAscii), 1, 14)' le caractere n'est pas pris en compte l'ors du keypress on y remedie et on bride en meme temps a 14 caracteres espaces compris 
            If "2 5 8" Like "*" & Len(.Text) & "*" Or Len(.Text) = 11 Then .Text = .Text & " "' l'espace 
        End With
        KeyAscii = 0'comme on a forcé la mise a jour du caractere tapé dans le keypress on annule la touche sinon le chiffre va etre tapé deux fois 
    End Sub

    l'avantage du keypress dans cette histoire c'est qu'il ne prend pas en compte la touche keycode (8)(back) on peut donc revenir en arrierre sans que l'espace soit ajouté au len indiqué ci dessus
    on peut bien evidement faire la meme chose avec keydown avec cette fois si gestion de la touche keycode(8 ou 46)(back ou suppr)

    a retenir
    le caractere forcé dans l'evenement(le len est a jour avant le up) sans declencher une 2d fois l'evenement change puisque touche annulée donc un seul caractere tapé


    si on veut manipuler la touche (suppr) dans le keypress et en milieu de chaine il suffit simplement de le faire avant et apres la mise a jour forcée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        If Not Chr(KeyAscii) Like "[0-9]" Then KeyAscii = 0
        With TextBox2
            If "2 5 8" Like "*" & Len(.Text) & "*" Or Len(.Text) = 11 Then .Text = .Text & " "
            .Text = Mid(.Text & Chr(KeyAscii), 1, 14)
            If "2 5 8" Like "*" & Len(.Text) & "*" Or Len(.Text) = 11 Then .Text = .Text & " "
        End With
        KeyAscii = 0
    End Sub
    je vais regarder ta version qui pourrait palier a une autre manipulation
    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. #10
    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.

    Le plus simple serait de laisser la personne saisir le numéro sans gérer les évènements ni la saisie en temps réel, et de vérifier a posteriori si la saisie est cohérente par rapport à ce qu'on attend (sur l'Exit ou autre).

    Les codes donnés ici ne prévoient pas tous les cas de figure et vont créer des crises de nerf chez tes utilisateurs en cas d'erreur de saisie et de tentatives de correction

    Il est à mon avis préférable, et de loin, de vérifier après coup que de foutre l'utilisateur dans la panade avec du code qui est censé l'aider mais qui en fait le fout dedans.
    "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...
    ---------------

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Les codes donnés ici ne prévoient pas tous les cas de figure et vont créer des crises de nerf chez tes utilisateurs
    Oui bien sûr mais les codes donnés ici sont des pistes, c'est à Floyd-44 de vérifier la cohérence des valeurs entrées ! La question porte sur le formatage dans le TextBox pas de savoir si ce ne sont que des chiffres et non des lettres, si ce sont exclusivement des n° Français donc, à 5 groupes de 2 chiffres ou des n° d'autres pays ! Le formatage est là principalement pour faciliter la saisie je pense ?

  12. #12
    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 Theze

    Citation Envoyé par Theze Voir le message
    [...]Le formatage est là principalement pour faciliter la saisie je pense ?
    Ben... Justement


    Avec le code que tu donnes, voici ce que j'obtiens dans le textbox en y saisissant 0123456789

    Nom : 20180824_4.png
Affichages : 1429
Taille : 11,9 Ko


    Quant à celui de Patrick, si j'efface un chiffre saisi, par exemple 3 dans 0123 45... pour le saisir à nouveau, j'obtiens ceci et après le 8, je ne sais plus saisir...

    Nom : 2018-08-24_210538.png
Affichages : 1377
Taille : 2,5 Ko

    C'est vrai que ça facilite la saisie...

    Bor***. Testez un minimum vos codes avant de les poster svp. (et ce n'est pas une attaque personnelle, mais y a un minimum, quand même )


    Je n'ai même pas parlé ici du fait que, sauf à être franco-français, ca va poser un sérieux problème pour la saisie d'un numéro étranger. Dans une économie de plus en plus mondialisée, je pense qu'imaginer un n° de tél uniquement au format français est un peu étroit comme angle de vue
    "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...
    ---------------

  13. #13
    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
    Citation Envoyé par Floyd-44 Voir le message
    Merci[...]
    Je comprends pas, pourtant Excel a un format spécial N° de Tel, on devrait y avoir accès non?
    Attention aux formats régionaux d'Excel... C'est une vraie mer*** (je pense notamment, mais pas que, aux codes postaux français...)

    A ne jamais utiliser!

    De plus, ce dont tu parles est un format (foireux) de cellule, mais ne joue absolument pas côté VBA.
    "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...
    ---------------

  14. #14
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Par défaut
    Bonjour
    Merci, j'ai opté pour la solution simple ....
    Ne rien faire...

  15. #15
    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
    Citation Envoyé par Floyd-44 Voir le message
    Bonjour
    Merci, j'ai opté pour la solution simple ....
    Ne rien faire...
    Sage décision
    "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...
    ---------------

Discussions similaires

  1. [XL-2002] probléme format import textbox
    Par mickisa dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/08/2009, 13h30

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