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 :

Imposer format de type 1111-2222-3333 dans une textbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Photographe
    Inscrit en
    Décembre 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2018
    Messages : 10
    Par défaut Imposer format de type 1111-2222-3333 dans une textbox
    Bonjour,

    Je sais que des sujets similaires ont déjà été abordés, mais je n'ai pas trouvé de solution exacte à mon cas.
    Je souhaite formater à la saisie dans une textbox en séparant tous les 4 chiffres (espace ou -, /). De manière à lorsque l'on rentre des données, Cela "passe" aux 4 chiffres suivant automatiquement.
    Pour l'instant j'utilise ce code qui fonctionne, sauf si une correction est apportée (ça décale le nombre de caractère et ajoute trop de -).

    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
       If Len(TextBox9.Text) = 4 _
            Or Len(TextBox9.Text) = 9 _
            Or Len(TextBox9.Text) = 14 _
            Or Len(TextBox9.Text) = 19 _
            Or Len(TextBox9.Text) = 24 _
            Or Len(TextBox9.Text) = 29 _
            Or Len(TextBox9.Text) = 34 _
            Or Len(TextBox9.Text) = 39 _
            Or Len(TextBox9.Text) = 44 _
            Or Len(TextBox9.Text) = 49 _
            Or Len(TextBox9.Text) = 54 _
            Or Len(TextBox9.Text) = 59 _
            Or Len(TextBox9.Text) = 64 _
            Or Len(TextBox9.Text) = 69 _
            Or Len(TextBox9.Text) = 74 _
            Or Len(TextBox9.Text) = 79 _
            Or Len(TextBox9.Text) = 84 _
            Or Len(TextBox9.Text) = 89 Then
            TextBox9.Text = TextBox9.Text & "-"
            TextBox9.SelStart = Len(TextBox9.Text)
        End If
    Bref c'est un peu du bricolage et j'ai besoin de quelque chose de plus fiable pour traiter les données par après.
    J'ai essayer avec ce type de formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.Value = Format(TextBox1.Value, "#### #### ####")
    Mais cela n'a jamais fonctionné correctement. Notamment l'écriture a gauche que je n'ai pas réussi à forcer. Cela se comportait de la sorte : 123 4567 au lieu de 1234 567
    Désolé si cela est assez basique, j'en suis à mes débuts en VBA et je galère pas mal sur ce genre de petits soucis.

    Merci de m'avoir lu ,

    Quentin

  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
    Ne serait-il pas plus simple de faire une box par groupe de 4 chiffres et de le recomposer ensuite par code en mettant le "-" séparateur ?

  3. #3
    Membre régulier
    Homme Profil pro
    Photographe
    Inscrit en
    Décembre 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2018
    Messages : 10
    Par défaut
    J'y ai pensé, mais le nombre de groupe de 4 Chiffres n'est pas défini et peu aller jusqu'à 20, ce qui rendrait le formulaire un peu lourd visuellement

    Ce code marche pas mal, à l’exception qu'il groupe à droite et je préférerais qu'il groupe à gauche.
    ex : 1234 567 et non 123 4567.
    Quelqu'un aurait une idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TextBox9_Change()
    Dim X As String
    If Len(Me.TextBox9) < 4 Then Exit Sub
    X = Application.Rept("#### ", Application.RoundUp(Len(Me.TextBox9) / 4, 0))
    X = Right(X, Len(X) - 1)
    Me.TextBox9 = Format(Me.TextBox9, X)
     
    End Sub

  4. #4
    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
    inspire-toi de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TextBox9_Change()
      Dim X As String
      X = Replace(TextBox9.Text, " ", "")
      If Len(X) Mod 4 = 0 Then
        TextBox9.SelText = " "
      End If
    End Sub
    et je te laisse découvrir les inconvénients de ce genre de mécanisme et décider d'utiliser alors un évènement autre que Change (je suggère Keydown ou keyup) en adaptant (on n'a rien sans un effort personnel minimum pour ce genre de futilité quasi ludique)

  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
    Citation Envoyé par Quentin789 Voir le message
    J'y ai pensé, mais le nombre de groupe de 4 Chiffres n'est pas défini et peu aller jusqu'à 20, ce qui rendrait le formulaire un peu lourd visuellement
    A ce niveau-là, il faudrait peut-être aller plus loin et se demander si utiliser un formulaire est vraiment une bonne idée.
    Taper ces 20 références les unes sous les autres dans un tableau d'une simple feuille de calcul serait certainement plus simple à gérer et plus ergonomique.
    Sans compter que la validation de données permettrait en deux clic d'imposer la règle de 4 chiffres par cellule sans la moindre ligne de code.

    Il ne faut pas oublier que les outils dont on dispose dans une feuille de calcul sont 100 fois plus puissants que ceux disponibles pour un UserForm.

  6. #6
    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 Menhir Voir le message
    [...]Il ne faut pas oublier que les outils dont on dispose dans une feuille de calcul sont 100 fois plus puissants que ceux disponibles pour un UserForm.


    On oublie trop souvent qu'une feuille Excel est aussi faite pour y saisir des données, et que la validation des cellules offre nativement des possibilités assez riches pour le contrôle de la saisie. Le VBA se limite alors à transférer ces données dans un tableau structuré, ce qui se fait en quelques lignes de code, et peut être réalisé avec l'enregistreur de macros (voir mon tuto à ce sujet)
    "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...
    ---------------

  7. #7
    Membre régulier
    Homme Profil pro
    Photographe
    Inscrit en
    Décembre 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2018
    Messages : 10
    Par défaut
    Merci pour vos réponses

    Finalement je m'en suis sorti avec un encodage par bouton comme ça pas d'erreur possible. Pour le moment ça à l'air de le faire, juste compliquer en cas de modification ultérieure.

    Bonne après midi !

  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
    Salut.

    Adopter la solution de Menhir (Hello) me semble une bonne idée. C'est souvent celle utilisée sur les sites Web lorsque le séquençage de la saisie revêt une certaine importance. Sinon, je ne saurais trop conseiller de vérifier après coup plutôt que durant la saisie. C'est déployer beaucoup d'efforts pour un truc qui pourra probablement être déjoué assez facilement (retours en arrière, copier-coller, ...).

    Je rejoins donc Unparia sur l'aspect futile et ludique de ce genre de "sport".



    Citation Envoyé par Quentin789 Voir le message
    [...]le nombre de groupe de 4 Chiffres n'est pas défini et peu aller jusqu'à 20[...]
    Tu envisages sérieusement de demander à des utilisateurs de saisir des valeurs constituées de 80 chiffres? J'espère que tu sais courir vite...
    "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...
    ---------------

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

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