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 :

Appliquer un format de cellule en fonction de la valeur [VBA] [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2018
    Messages : 50
    Par défaut Appliquer un format de cellule en fonction de la valeur [VBA]
    Bonjour à tous,
    j'essaye de pouvoir appliquer un format de cellule (affiche ou non la décimale du nombre) en fonction de sa valeur à l'aide d'un bouton.
    Voici mon code en VBA lié au bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Dedicated_format()
        If (Round(Selection.Value, 1) = Round(Selection.Value, 0)) Then
            Selection.NumberFormat = "0"
        Else
            Selection.NumberFormat = "0.#"
        End If
    End Sub
    Cela fonctionne très bien si j'applique cette macro à une cellule mais le problème se pose lorsque je sélectionne plusieurs cellules à modifier.
    Pourriez vous m'aider?
    Merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    pour boucler sur les cellules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Dedicated_format()
        Dim c As Range
        For Each c In Selection
            If (Round(c.Value, 1) = Round(c.Value, 0)) Then
                c.NumberFormat = "0"
            Else
                c.NumberFormat = "0.#"
            End If
        Next c
    End Sub
    eric

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 138
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 138
    Par défaut
    Bonjour,
    Citation Envoyé par Yellow-Sky Voir le message
    Cela fonctionne très bien si j'applique cette macro à une cellule mais le problème se pose lorsque je sélectionne plusieurs cellules à modifier.
    Il suffit de l'appliquer à toutes les cellules de la sélection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Dedicated_format()
    Dim cel As Range
        For Each cel In Selection
            If (Round(cel.Value, 1) = Round(cel.Value, 0)) Then
                cel.NumberFormat = "0"
            Else
                cel.NumberFormat = "0.#"
            End If
        Next cel
    End Sub
    Cependant je n'en vois guère l'intérêt car excel fait cela tout seul

    edit: salut eriiic je suis un peu en retard

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2018
    Messages : 50
    Par défaut
    Comme Excel fait-il cela tout seul?

    L'idée ici est de ne pas afficher la décimale 0.
    Exemple 17.0 => 17
    12.1 => 12.1

    S'il y a une solution plus simple, je suis preneur...

  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
    Juste pour le plaisir, une petite amélioration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Dedicated_format()
        Dim c As Range
        For Each c In Selection
            c.NumberFormat = "0" & IIf(Round(c.Value, 1) = Round(c.Value, 0), "", ".#")
        Next c
    End Sub
    Citation Envoyé par Yellow-Sky Voir le message
    Comme Excel fait-il cela tout seul?
    L'idée ici est de ne pas afficher la décimale 0.
    Normalement, le # dans le format devrait empêcher l'affichage d'un éventuel 0.
    Mais ça n'empêchera pas l'affichage du point décimal.

  6. #6
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2018
    Messages : 50
    Par défaut
    En effet dans le format personnalisé le . décimal reste là mais avec le code VBA, le point décimal n'apparait plus... vu que j'applique le format approprié.

  7. #7
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2018
    Messages : 50
    Par défaut
    Résolu... je me suis fait avoir car
    Round utilise le "bankers rounding" alors que WorksheetFunction.Round utilise l'arrondi que je considérais comme "normal"
    ENcore merci à tous.

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

Discussions similaires

  1. [XL-2010] Formater des cellules en fonction des données d'une feuille (VBA)
    Par Marjo38 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 28/06/2016, 23h07
  2. Réponses: 4
    Dernier message: 26/11/2015, 12h17
  3. [XL-2007] Format Cellule en fonction d'une valeur dans une autre cellule
    Par crissud dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 20/11/2013, 12h46
  4. Fusion de cellules en fonction de leur valeur
    Par Eusebe dans le forum BIRT
    Réponses: 9
    Dernier message: 29/04/2010, 17h56
  5. Réponses: 7
    Dernier message: 13/10/2007, 23h31

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