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

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

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.

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