Nombre de chiffres après la virgule selon la valeur

Bonjour à tous,

Je débute en VBA et je tiens a m'excuser par avance si mes erreurs sont "bête".

J'ai un tableau dont les cellules sont complétées en liaison avec d'autres tableaux sur d'autres feuilles du même classeur.

Voici un print screen de ce tableau

image

Je souhaiterais imposer la mise en forme suivante aux nombres contenus dans l'intervalle D7:D24 et F7:F24. Idéalement, il faudrait que cela se fasse en arrière-plan ou bien que la mise à jour se fasse à la consultation de la feuille, car selon les résultats obtenus sur les autres feuilles du classeur, les valeurs compilées dans ce tableau évolueront.

La mise en forme est la suivante :

Si X>=0.1 alors format du type 0.0 (exemple, en cellule D7, il faudrait que ça affiche 6.8 ou bien en cellule D11, 35.6)

Si 0.1<X<= 0.01 alors format du type 0.00 (exemple, en cellule D16, il faudrait que ça affiche 0.05)

Si 0X<0.01 alors format du type 0.000 'exemple, en cellule F19, il faudrait que ça affiche 0.003)

J'ai commencé le code suivant, mais cela ne fonctionne pas. Peut être m'y suis-je tout simplement mal pris ou bien il ya une petite erreur, mais je ne vois pas quoi.

Pourriez-vous s'il vous plait m'aider?

Private Sub Worksheet_Activate()
Dim cel As Range

For Each cel In Range("D7:D24,F7:F24")
    Select Case cel
        Case Is >= 0.1: NumberFormat = "#,##0.0"
        Case Is < 0.1 >= 0.01: NumberFormat = "#,##0.00"
        Case Is < 0.01: NumberFormat = "#,##0.000"
    End Select
Next cel

End Sub

À cela s'ajoute le fait que j'ai déjà dans cette feuille une macro en "Private Sub Worksheet_Activate()" et les deux ne font pas bon ménage quand je les mets l'une à la suite de l'autre . Du coup je suppose qu'il faut que je les fusionne. Si oui, pourriez-vous m'indiquer comment, car je n'ai jamais fait ça pour le moment.

Voici la première macro, elle a pour but de cacher des lignes dans le tableau so la valeur est a 0 sur certaines cellules contenues avec une exeption si jamais la valeur en F53 d'une autre feuille que celle ou est cette macro est a 0 (merci à Dan pour son aide https://forum.excel-pratique.com/excel/afficher-masquer-ligne-si-valeur-a-0-146626).

Private Sub Worksheet_Activate()
Dim cel As Range

If Sheets("Caloric Value").Range("F53") = 0 Then Cells.EntireRow.Hidden = False: Exit Sub

For Each cel In Range("D9,D12:D13,D17:D24")
    Select Case cel
        Case Is = 0: cel.EntireRow.Hidden = True
        Case Is > 0: cel.EntireRow.Hidden = False
    End Select
Next cel

End Sub

Merci par avance

Bastien

Bonjour Bastien, bonjour le forum,

Peut-être comme ça :

Private Sub Worksheet_Activate()
Dim PL1 As Range
Dim CEL1 As Range
Dim PL2 As Range
Dim CEL2 As Range

Set PL1 = Range("D7:D24,F7:F24")
Set PL2 = Range("D9,D12:D13,D17:D24")
For Each CEL1 In PL1
    Select Case CEL1.Value
        Case Is >= 0.1: CEL1.NumberFormat = "#,##0.0"
        Case Is < 0.1 >= 0.01: CEL1.NumberFormat = "#,##0.00"
        Case Is < 0.01: CEL1.NumberFormat = "#,##0.000"
    End Select
Next CEL1
If Sheets("Caloric Value").Range("F53") = 0 Then Cells.EntireRow.Hidden = False: Exit Sub
For Each CEL2 In PL2
    Select Case cel
        Case Is = 0: CEL2.EntireRow.Hidden = True
        Case Is > 0: CEL2.EntireRow.Hidden = False
    End Select
Next CEL2
End Sub

Bonjour a tous,

J'ai tester la macro que vous suggeriez

J'ai simulé une formule, voici le tableau avant application de la macro

image

Après application de la macro

Etrangement, toutes les lignes du range PL2 ont été masquée alors que les lignes 17,18,19 et 20 n'auraient pas du l'etre puisqu'elle ne sont pas a 0

J'ai l'impression que la mise en forme des cellules fonctionne partiellement . Il semblerait que la mise en forme pour les valeurs supérieures ou égales à 0,1 soit fonctionelle car par exemple, en D8, D10, D11, la valeur brute est de O,749 63,402 et de 35,579.

image

En revanche, pour les valeurs comprise entre 0,1 et 0,01 ou entre 0,01 et 0,001, la mise en forme ne semble pas se faire, par exemple en D16 et F16, la valeur affiché devrait etre 0,05 et 0,02.

J'espère ne pas m'etre trompé quand je vous ai donné les valeurs intervalles de valeur dans mes explications (mais je ne pense pas).

Help please, parce que la, je vois pas ce qui cloche

Merci par avance

Bastien

Bonjour à tous les 2,

Peut-être que ça marchera avec un antislash ? Hésitez pas à faire des essais (espaces, #, antislash, underscore)

Case Is < 0.01: CEL1.NumberFormat = "#,##0.000\"

'Sinon :

Select Case CEL2 'la petite faute de frappe qui bloque le masquage des lignes

Cdlt,

Bonjour à tous,

pour le 1er Select je verrai bien ça :

    Select Case CEL1.Value
        Case Is >= 0.1: CEL1.NumberFormat = "#,##0.0"
        Case Is < 0.01: CEL1.NumberFormat = "#,##0.000"
        Case Else: CEL1.NumberFormat = "#,##0.00"
    End Select

Merci beaucoup a vous 3

ça marche nikel

En effet, une fois corrigée, la petite faute de frappe, le probleme de masquage des cellules a été corrigé

Nikel la solution pour la mise en forme des chiffres.

voici la macro finale

Private Sub Worksheet_Activate()
Dim PL1 As Range
Dim CEL1 As Range
Dim PL2 As Range
Dim CEL2 As Range

Set PL1 = Range("D7:D24,F7:F24")
Set PL2 = Range("D9,D12:D13,D17:D24")
For Each CEL1 In PL1
    Select Case CEL1.Value
        Case Is >= 0.1: CEL1.NumberFormat = "#,##0.0"
        Case Is < 0.01: CEL1.NumberFormat = "#,##0.000"
        Case Else: CEL1.NumberFormat = "#,##0.00"
    End Select
Next CEL1
If Sheets("Caloric Value").Range("F53") = 0 Then Cells.EntireRow.Hidden = False: Exit Sub
For Each CEL2 In PL2
    Select Case CEL2
        Case Is = 0: CEL2.EntireRow.Hidden = True
        Case Is > 0: CEL2.EntireRow.Hidden = False
    End Select
Next CEL2
End Sub
Rechercher des sujets similaires à "nombre chiffres virgule valeur"