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 :

Format numérique pour une zone texte


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut Format numérique pour une zone texte
    Bonjour,

    J'ai une zone texte issue d'un enregistrement, cette zone ne contient que des chiffres, par exemple "00123456"

    J'aimerai transformer cette zone en format numérique avec suppression des zéros à gauche et séparateur de millier, dans cet exemple "123.456"

    Je pense pas que ca soit compliqué mais je débute en VB, merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 663
    Points : 34 368
    Points
    34 368
    Par défaut
    bonjour,
    tu peux regarder l'aide en ligne à propos de la fonction format

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Merci,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(expression[, format])
    Le problème c'est que pour format il parle de format numérique défini par l'utilisateur sans en donner la syntaxe.

    Je cherche encore

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Tiens, ce n'est en effet pas compliqué du tout, mais moi, j'ai voulu compliquer la 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
    Private Sub Command1_Click()
      Dim chaine As String, chaine1 As String
      chaine = "001231234256"
      chaine1 = CStr(Val(chaine))
      If Len(chaine1) > 3 Then
        chaine = ""
        reste = Left(chaine1, Len(chaine1) Mod 3)
        chaine1 = Mid(chaine1, Len(reste) + 1)
        For i = 1 To Len(chaine1) Step 3
           chaine = "." & Right(chaine1, 3) & chaine
          chaine1 = Left(chaine1, Len(chaine1) - 3)
        Next
        If Left(chaine, 1) = "." Then chaine = Mid(chaine, 2)
        If Len(reste) > 0 Then
          chaine = reste & "." & chaine
        End If
      Else
        chaine = chaine1
      End If
      MsgBox chaine
    End Sub
    Il y a évidemment beaucoup plus simple à faire, mais voilà ... j'ai voulu te montrer comment on traite et te laisser réfléchir à du plus simple sur ces bases

    Il est maintenant clair que si tu faisais comme tout le monde (en choisissant l'espace comme séparateur) ce serait quand même plus simple :

    genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Command2_Click()
      Dim chaine As String
      chaine = "001231234256"
      chaine = Format(chaine, "#,000")
      MsgBox chaine
    End Sub

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Merci,

    C'est clair que tu as compliqué, mais je vais pas avoir à réfléchir longtemps car ta 2ème solution avec l'espace me conviens parfaitement

    Sinon comment connaitre la facon de coder les format ? en l'occurence "#,000"

    Merci beaucoup

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Tous simplement en utilisant l'aide.

    Starec

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    J'ai pas trouvé, pas grave, merci

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par Eric93 Voir le message
    Merci,

    C'est clair que tu as compliqué, mais je vais pas avoir à réfléchir longtemps car ta 2ème solution avec l'espace me conviens parfaitement

    Merci beaucoup
    Allons bon ...

    J'espérais plus d'opiniatreté, mais elle n'est pas là !
    J'espérais que l'on me dise qu'il suffirait alors de remplacer les espaces par des "." ....
    Ce qui m'aurait donné l'occasion de parler des formatages de VB !!

    Bon... Nous allons quand même en parler ... tout seul ....

    Dans ce formatage, contrairement à ce que l'on pense, VB n'utilise pas l'espace et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Replace(Format(chaine, "#,000"), " ", ".")
    ne changerait absolument rien, puisqu'il n'y a pas d'espaces ...

    En réalité, VB formate en utilisant le caractère 160 ...

    et alors ?

    Alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Command1_Click()
      Dim chaine As String
      chaine = "001231234256"
      chaine = Replace(Format(chaine, "#,000"), Chr(160), ".")
      MsgBox chaine
    End Sub
    et te voilà servi, Eric, ... avec tes points ...

    Patapé ... je sors ...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    J'ai pris la peine de lire quand même, merci beaucoup pour ces infos.

    En fait je ne voulais pas absolument un point, l'espace me conviens

  10. #10
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par Eric93 Voir le message
    J'ai pas trouvé, pas grave, merci
    Je trouve que tu n'y as pas mis beaucoup d'ardeur...

    J'ai ouvert le VBE, j'ai tapé format, puis F1, puis "Voir aussi".
    Dans la liste proposée, il y a "Formats numériques définis par l'utilisateur (fonction Format)".
    Tout y est.

  11. #11
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonsoir,

    Juste quelques précisions d’un Mac User.

    Tout ce qu’a dit ucfoutu est valable pour les versions Windows à partir d’Excel 2000.

    Citation Envoyé par ucfoutu Voir le message
    En réalité, VB formate en utilisant le caractère 160
    Il faut juste se méfier des caractères au-delà de 127. En effet ils diffèrent selon qu’on utilise Mac OS ou Windows.

    Le code ASCII au sens strict, est codé sur 7 bits et ne permet de définir que les caractères 0 à 127. Au delà (128 à 255), ils dépendent de la plate-forme, à moins de travailler en Unicode.

    En l’occurrence, sur Mac, ce n’est pas le caractère 160 qui est utilisé comme séparateur de milliers, mais le caractère 32 (l’espace standard).

    En outre la fonction Replace n’existe que si la version de VBA repose sur VB6. Or les versions Mac, et Excel 97 sont basées sur VB5.

    Pour avoir quelque chose qui fonctionne avec toutes les versions d’Excel, il faut adapter ainsi le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function Remplace(Chaine$, Ancien$, Nouveau$)
            #If Mac Then
                Remplace = Application.WorksheetFunction.Substitute(Chaine, Ancien, Nouveau)
            #ElseIf VBA6 Then
                Remplace = Replace(Chaine, Ancien, Nouveau)
            #Else
                Remplace = Application.WorksheetFunction.Substitute(Chaine, Ancien, Nouveau)
            #End If
    End Function
    dans un module standard, et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Command1_Click()
    Dim Chaine As String, OS As String
        OS = Mid(Application.OperatingSystem, 1, 3)
        Chaine = "001231234256"
        Chaine = Format(Chaine, "#,000")
        Chaine = Remplace(Chaine, Chr(IIf(OS = "Win", 160, 32)), ".")
        MsgBox Chaine
    End Sub
    dans le module associé au UserForm

    OK, moi aussi, je sors,

    Cordialement,

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonsoir Bigalo,

    Je t'aprécie beaucoup (tu es un vrai de vrai )

    J'espère que tout celà ne partira maintenant pas aux oubliettes (ce serait vraiment dommage, car il est très rare que ce genre de détail soit abordé en ce qui concerne VB )

  13. #13
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Re,

    Merci pour les compliments

    Depuis peu, un site m’a été offert ici, sur developpez.com.

    Il n’est pas encore fonctionnel, il faut d’abord que je maîtrise les outils, pas forcément conçus pour être utilisés avec un Mac.

    Un peu de patience, et j’essaierai d’y reprendre un certain nombre de choses dont celle-ci

    Cela fait longtemps que j’utilise Excel et ses macros, longtemps avec l’ancien langage, les macros XL4 ou XLM, et maintenant VBA. C’est vrai que nous ne sommes pas nombreux à nous préoccuper de la compatibilité entre versions Win et Mac .

    Très cordialement,

    PS - C’est où le pays de la liberté d'esprit ?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Effrectivement, tout étais dans l'aide, mais je n'avais pas trouvé.

    Merci beaucoup

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/06/2007, 16h29
  2. requete pour une zone de texte
    Par torNAdE dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/07/2006, 14h21
  3. Réponses: 3
    Dernier message: 01/06/2006, 10h49
  4. Valeur numérique dans une zone de texte
    Par KEROZEN dans le forum IHM
    Réponses: 3
    Dernier message: 30/05/2006, 09h43
  5. Pb de format pour une zone de texte
    Par Vincent623 dans le forum Access
    Réponses: 2
    Dernier message: 24/09/2005, 13h47

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