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 - de VBA à l'affichage Excel [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut Format Numérique - de VBA à l'affichage Excel
    Bonjour le forum,

    Dans le cadre de mon projet, j'ai besoin d'avoir des données chiffrées utilisables. L'utilisateur à l'aide d'une InputBox saisit le montant lié au contrat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub T_Add_TBM_Change()
        If T_Add_TBM.Text <> "" Then
            T_Add_TBTTC.Visible = True
            T_Add_LBTTC.Visible = True
     
            Do
                TTC = InputBox("Veuillez saisir le montant TTC associé - Syntaxe : 23,23")
            Loop While Not IsNumeric(TTC)
            T_Add_TBTTC.Text = TTC
        End If
    End Sub
    Vous pourrez voir dans le code que je me suis assuré que la variable TTC soit bien un nombre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                .Cells(LR, 23) = Format(T_Add_TBTTC.Value, " #,##0.00")
    Le problème survient ici, ou du moins lors de l'affichage Excel. En effet, dans la cellule cette dernière est inscrite en tant que Texte.

    Sauriez-vous m'expliquer d'où vient le problème ? Me serai-je trompé dans la syntaxe ?

    Bonne journée à vous,

    Révèr

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est tout à fait normal
    La fonction Format a pour but de convertir une valeur numérique en String (chaîne de caractères) donc du texte
    Si tu écris directement la valeur numérique dans une cellule elle sera numérique (Attention de veiller à ce que la variable soit bien de type numérique).

    Maintenant si tu souhaites que la cellule ait un format numérique particulier, il y a lieu d'utiliser la propriété NumberFormat et y mettre comme valeur, le format souhaité
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B5").NumberFormat = "#,##0.00"
    C'est exactement la même chose que de formater manuellement le format d'une cellule.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Bonjour Philippe,

    Je voyais beaucoup d'exemples de manipulation des formats numériques avec "Format()" c'est pour ça que j'ai dû me laisser tenter.

    Ma variable est bel et bien numérique, j'ai créé une boucle qui s'effectue tant que la valeur n'est pas numérique. (Bien évidemment, j'ai testé avec un VarType juste avant de créer la boucle pour ne pas me trouver dans une situation délicate )

    En effet ça fonctionne bien mieux comme ça ! Je retiens cette information

    Merci beaucoup pour ton aide !

  4. #4
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Je reviens vers toi puisque j'ai de nouveau un petit problème.

    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    C'est tout à fait normal
    La fonction Format a pour but de convertir une valeur numérique en String (chaîne de caractères) donc du texte
    Si tu écris directement la valeur numérique dans une cellule elle sera numérique (Attention de veiller à ce que la variable soit bien de type numérique).

    Maintenant si tu souhaites que la cellule ait un format numérique particulier, il y a lieu d'utiliser la propriété NumberFormat et y mettre comme valeur, le format souhaité
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B5").NumberFormat = "#,##0.00"
    C'est exactement la même chose que de formater manuellement le format d'une cellule.
    En effet, lorsque je saisis une valeur décimale, j'ai toujours cette erreur de formatage sur Excel. Aucun souci lorsque je la saisis en tant que nombre entier, mais dès lors que je passe en nombre à virgule le problème se présente de nouveau.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il est inutile de reprendre toute une discussion en posant une question, cela pollue le fil. Une phrase suffit ou tout simplement un lien vers la discussion quand celle-ci est ancienne
    Il serai en revanche plus utile que tu nous affiches le code que tu as utilisé pour le formatage et pour l'écriture dans la cellule incriminée.

    Cependant, je t'encourage à utiliser les tableaux structurés, comme je crois on te l'a déjà suggéré, et de préformater les cellules dans le format souhaité et ainsi il suffira de simplement écrire la valeur pour visualiser le bon format.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Désolé pour la citation, je ferai attention à l'avenir !

    J'ai utilisé les tableaux structurés, ou du moins... Je pense l'avoir fait ?

    Je te partage les 2 procédures utilisant cette variable TTC.

    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 T_Add_TBM_Change()
        Dim TTC As Double
     
        If T_Add_TBM.Text <> "" Then
            T_Add_TBTTC.Visible = True
            T_Add_LBTTC.Visible = True
     
            Do
                'TTC = Application.InputBox(prompt:="Veuillez saisir le montant TTC associé - Syntaxe : 23,23", Type:=2)
                TTC = InputBox("Veuillez saisir le montant TTC associé - Syntaxe : 23,23")
            Loop While Not IsNumeric(TTC)
            T_Add_TBTTC.Text = TTC
        End If
    End Sub
    Dans ce cas-ci, la boucle s'effectue sans aucun souci. La valeur est bien numérique puisque je sors de la boucle.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Private Sub T_Add_CBOK_Click()
        Dim LR As Integer, test As Integer
     
        Set Wb = Workbooks(OB4.Caption & Frame1.Caption)
        Set WbO = Wb.Sheets(T_Add_TBAC.Text)
        Set t = WbO.ListObjects("MyTable" & T_Add_TBAC.Text)
     
        If vbYes = MsgBox("Confirmez-vous la saisie des données", vbYesNo) Then
            t.ListRows.Add
            LR = t.ListColumns(1).DataBodyRange.Rows.Count
            With t.DataBodyRange
                .Cells(LR, 1) = T_Add_CBSite.Value
                If T_Add_CBSite.Value = "BIC" Then
                    .Cells(LR, 2) = T_Add_CBBIC.Value
                End If
                .Cells(LR, 3) = Format(Now(), "dd/mm/yyyy")
                .Cells(LR, 4) = T_Add_TBINV.Text
     
                'Do
                    'test = Application.InputBox(prompt:="Veuillez saisir l'année de la prestation - " & T_Add_TBAC.Value & " ou " & T_Add_TBAC.Value - 1, Type:=2)
                'Loop Until test = T_Add_TBAC.Value Or test = T_Add_TBAC.Value - 1
     
                .Cells(LR, 11) = test
                .Cells(LR, 15) = T_Add_TBSAP.Text
                .Cells(LR, 16) = T_Add_TBCC.Text
                .Cells(LR, 23) = T_Add_TBTTC.Value
                .Cells(LR, 23).NumberFormat = "#,##0.00"
                .Cells(LR, 29) = T_Add_CBP4.Value
                .Cells(LR, 30) = T_Add_CBP5.Value
                .Cells(LR, 31) = T_Add_CBBG.Value
                .Cells(LR, 18) = T_Add_TBSB.Text
     
                If T_Add_OBCR.Value = True Then
                    .Cells(LR, 5) = T_Add_TBPOCR.Text
                    .Cells(LR, 12) = "C" & test
                    .Cells(LR, 13) = .Cells(LR, 12) & .Cells(LR, 5)
                Else
                    .Cells(LR, 6) = T_Add_TBPOCR.Text
                    .Cells(LR, 12) = "P" & test
                    .Cells(LR, 13) = .Cells(LR, 12)
                End If
                .Cells(LR, 7) = T_Add_TBLib.Text
                .Cells(LR, 9) = T_Add_TBSup.Text
                .Cells(LR, 10) = T_Add_TBM.Value
            End With
        Else
            LR = t.ListColumns(1).DataBodyRange.Rows.Count
            t.ListRows(LR).Delete
        End If
    End Sub
    Et voici la seconde procédure où je procède à l'affichage des résultats dans une nouvelle ligne du tableau structuré.

    L'ajout de toutes les variables se fait sans aucun souci, sauf pour la variable T_Add_TBTTC qui ne prend donc pas le .NumberFormat demandé

    (testé avec .Value ET .Text - même problème)

    La partie "Else" me permet juste de supprimer la dernière ligne lors de mes tests, m'évitant ainsi de créer une multitude de nouvelles lignes dans le tableau.

    Par ailleurs, si ma manipulation du TS est mal effectuée, pourrais-tu me guider sur les points à améliorer ?

    Merci pour ton aide !

    Révèr

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans ce cas-ci, la boucle s'effectue sans aucun souci. La valeur est bien numérique puisque je sors de la boucle
    Le test de sortie de boucle est fait sur la variable TTC mais juste après tu écris T_Add_TBTTC.Text = TTC. Je suppose qu'il s'agit d'un contrôle TextBox ? et un TextBox est de type alphanumérique donc la valeur numérique est repassée automatiquement en String


    Question : Pourquoi utiliser un InputBox alors que tu utilises un UserForm ?

    J'ajouterai que pour lever toute ambiguïté il est important d'ajouter la propriété Value de l'objet Range lors d'opération de lecture/écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(LR, 23).Value = T_Add_TBTTC.Value
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    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 révèr Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Do
                TTC = InputBox("Veuillez saisir le montant TTC associé - Syntaxe : 23,23")
            Loop While Not IsNumeric(TTC)
    Vous pourrez voir dans le code que je me suis assuré que la variable TTC soit bien un nombre.
    Il y a bien plus simple que de faire une boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TTC = Application.InputBox(Prompt:="Veuillez saisir le montant TTC associé - Syntaxe : 23,23", Type:=1)
    Il existe deux Inputbox : celle de VBA et celle d'Excel.
    La première est la plus utilisée parce que c'est celle reconnue par défaut par VBA.
    La seconde présente l'avantage d'avoir un paramètre Type qui permet de contrôler la nature du contenu saisie.
    https://docs.microsoft.com/fr-fr/off...ation.inputbox

    Pour ton cas, il suffit donc ce mettre ce paramètre à 2 pour obliger l'utilisateur à saisir un nombre.

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

Discussions similaires

  1. [Access 97]Problème format numérique export Excel
    Par waici dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 03/04/2008, 09h52
  2. VB6+Excel Copier/coller format numérique
    Par juli3nh dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/07/2007, 10h06
  3. Affichage Format numérique dans zone de liste
    Par lbar012001 dans le forum IHM
    Réponses: 19
    Dernier message: 13/03/2007, 14h58
  4. [SQL] affichage format numérique
    Par pinocchio dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/10/2006, 12h01
  5. Réponses: 4
    Dernier message: 09/06/2006, 09h33

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