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 :

Conversion de format d'une textbox à une Cellule [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2018
    Messages : 10
    Par défaut Conversion de format d'une textbox à une Cellule
    Bonjour,

    Je sais que ce sujet existe partout, mais franchement j'ai tout essayé et là je deviens carrément chèvre BEHHHHH

    Voila le soucis: dans un userform j'ai un certain nombre de textbox dont le contenu à la validation doit être formaté en monétaire pour pouvoir ensuite être utilisé dans des formules, et quoi que je fasse y a toujours un truc qui déconne :

    soit il me le garde en texte quand le chiffre dépasse le millier, soit c'est quand il y a des décimales, soit .....

    Bref si quelqu'un pouvait m'aider avant que je me mette à brouter de l'herbe....

    Voici un extrait du code :
    je prend ici la Textbox_salaire, mais j'en ai 5 ou 6 comme ça

    donc ca c'est une première mise en forme quant on quitte la textbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Private Sub TextBox_Salaire_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    With TextBox_Salaire
        .Value = Format(TextBox_Salaire, "#'##0.00 €")
        If .Value = "" Then
            .Value = "Décimales avec une virgule : 12,00"
            .ForeColor = RGB(128, 128, 128)
        End If
    End With
    End Sub
    et Voici la seconde mise en forme à la validation du bouton enregistrer
    Je vous préviens c'est très moche : tout ce que j'ai trouvé c'est de multiplier les changements de formats et les replace et ça marche..... presque :

    - ok pour les nombres avec des milliers
    - ok pour les nombres avec des décimales et des milliers
    - ok pour les nombre avec des dizaines ou des centaines SANS décimales

    - BUG pour les nombres avec des dizaines ou des centaines ET AVEC des décimales (PS, ça marche quand j'écris un nombre avec ",00" mais pas avec par exemple ",03")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        .Cells(L1 + 12, 1) = TextBox_Salaire.Value
        .Cells(L1 + 12, 1).NumberFormat = "#'##0.00 €"
        .Cells(L1 + 12, 1) = Replace(.Cells(L1 + 12, 1), ",", ".")
        .Cells(L1 + 12, 1) = Replace(.Cells(L1 + 12, 1), "'", "")
        .Cells(L1 + 12, 1).FormulaR1C1 = .Cells(L1 + 12, 1).Value
        .Cells(L1 + 12, 1).NumberFormat = "#,##0.00 €"

    Pitié que quelqu'un m'aide, m'apporte au moins une trace de piste de solution, je veux rester humaine moi

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

    Tu ne dois pas transformer ta saisie avec format, et tu ne peux inclure un espace car ta valeur ne sera plus numérique. Tu dois supprimer les espaces de ta saisie et t'assurer que le séparateur décimal a été correctement saisi.

    Pour connaître le séparateur décimal système, j'utilise le code suivant: IIf(InStr(1, Format("1.2"), ".") > 0, ".", ","), inclus dans une fonction générique de mon module Tools. Lorsque le séparateur décimal est connu, je remplace successivement . et , par le séparateur système.

    Dès lors, pour avoir une chance d'avoir une valeur numérique, il faut réaliser les trois remplacements, ici avec un TextBox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = Replace(Replace(Replace(TextBox1.Value, " ", ""), ".", DecSep), ",", DecSep)

    Voici un code de bouton de commande qui récupère les valeurs de deux textbox et qui les multiplie si elles sont numériques. On remarquera que a et b ne sont pas typées puisque l'on n'est pas certain de récupérer des valeurs numériques.

    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
    Private Sub CommandButton1_Click()
      Dim a, b
      Dim DecSep As String
     
      DecSep = getDecimalSeparator()
      a = Replace(Replace(Replace(TextBox1.Value, " ", ""), ".", DecSep), ",", DecSep)
      b = Replace(Replace(Replace(TextBox2.Value, " ", ""), ".", DecSep), ",", DecSep)
      If IsNumeric(a) And IsNumeric(b) Then
        MsgBox a * b
      Else
        MsgBox "Erreur de saisie"
      End If
    End Sub
     
    Function getDecimalSeparator() As String
      getDecimalSeparator = IIf(InStr(1, Format("1.2"), ".") > 0, ".", ",")
    End Function
    "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...
    ---------------

  3. #3
    Membre habitué
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2018
    Messages : 10
    Par défaut apres les tests
    Salut,

    merci pour ta réponse rapide et complète,

    je rentre ça dans mon classeur et je teste.....


    Edit :

    Bon beh ça marche toujours pas voici ce que j'ai fait, toujours avec la textbox_salaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim Décimale$
     
        Décimale = IIf(InStr(1, Format("1.2"), ".") > 0, ".", ",")
     
        TextBox_Salaire = Replace(Replace(Replace(TextBox_Salaire, " ", ""), ".", Décimale), ",", Décimale)
     
        .Cells(L1 + 10, 1) = TextBox_Salaire.Value
     
        .Cells(L1 + 10, 1).NumberFormat = "#,##0.00 $"
    Ca fonctionne tant que j'ai des nombre entiers, mais dès qu'il y a des décimales, Excel le garde en format texte....

    PS : Une fois la macro finie, quant j'entre dans la cellule manuellement (F2) et que j'en sort, le nombre se met au bon format.
    EN passant par l'enregistreur de macro sa donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = "2046.03"
    ET ça m'affiche : 2 026,03 €

    j'ai donc essayé de rajouter à la fin (j'ai même essayé en passant par une variable) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sa = TextBox_Salaire.Value
    .Cells(L1 + 10, 1).FormulaR1C1 = Sa
    Sa ne marche pas non plus.... mais si jamais sa peut donner des pistes à quelqun

  4. #4
    Membre habitué
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2018
    Messages : 10
    Par défaut J'AI TROUVE
    Ok c'est bon j'ai trouvé :

    Merci PierreFauconnier, tu m'as donné l'indice qui me manquait :

    En fait c'est bien une histoire de séparateur de décimale ; dans le code que tu m'as donné Didier (je me permets de tutoyer) tu me conseille de remplacer les points les virgules etc .... par le séparateur système....

    J'ai vérifié : Windows utilise par défaut (en tout cas en France) la virgule comme séparateur système

    Apres avoir fait tourner la macro, la cellule cible me renvoyait comme résultat : 2046,03 .... sans pour autant le prendre en compte dans les formules


    Hors quand je tape F2, dans cette même cellule avec l'enregistreur de macro, le code me renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selection.formulaR1C1="2046.03"
    Avec un point, le code me renvoie bien la valeur de la cellule mais formatée avec une point...

    Bien entendu j'ai vérifié dans les option de mon classeur: et le séparateur pris en compte est la virgule.........

    En clair, VBA formate d'office les données numérique avec un POINT comme séparateur de décimale, quel que soit le paramétrage du classeur ou du système windows.


    Et maintenant la solution : il suffit juste de donner la valeur "." à la variable Décimale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Décimale$
     
        Décimale = "."
     
        TextBox_Salaire = Replace(Replace(Replace(TextBox_Salaire, " ", ""), ".", Décimale), ",", Décimale)
     
        .Cells(L1 + 10, 1) = TextBox_Salaire.Value
     
        .Cells(L1 + 10, 1).NumberFormat = "#,##0.00 $"
    ET CA MARCHE....


    YOUPIIIII, Fini de brouter de l'herbe, je vais aller me faire une pizza au formage de chèvre....

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

Discussions similaires

  1. [XL-2013] Textbox prenant le même format sur une cellule excel
    Par yassine0 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/03/2019, 15h21
  2. Conversion du format d'une plage de cellules Excel
    Par tarbala dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 12/06/2009, 23h47
  3. [VBA-E]changer le format d'une cellule dans un spreadsheet
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 13/02/2006, 11h12
  4. Comment forcer le format d'une cellule?
    Par cha_cha dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/11/2005, 14h31
  5. Display Format d'une cellule d'une DBGrid
    Par Wilco dans le forum Bases de données
    Réponses: 5
    Dernier message: 21/10/2004, 13h00

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