[VBA] [formule perso] Affichage unités singulier / pluriel

Nikless

XLDnaute Junior
Bonjour le forum

Je souhaite faire des comparaisons de taux en pourcentage. La différence se calcule en points.
En fonction de la valeur renvoyée par la formule, je veux afficher l'unité au singulier ou au pluriel.
J'ai défini une formule personnalisée qui ne me donne pas entière satisfaction.

Je souhaite :
Objectif 1 : Afficher l'unité au singulier ou pluriel ("s) suivant la valeur de la cellule --> OK
Objectif 2 : Définir le format du nombre +0,00;(0,00) --> KO : le signe (6) vient se superposer aux parenthèses
Objectif 3 : Optimisation du code, si possible

Voici le code :
Code:
Public Function Syntaxe2(L As Long, Trm As String) As String


a = L

Select Case a
Case Is > 1
Syntaxe2 = Format(a, "+# ##0.00") & " " & Trm & "s"

Case Is < -1
Syntaxe2 = Format(a, "(# ##0.00)") & " " & Trm & "s"

Case Is < 0 And a >= -1
Syntaxe2 = Format(a, "(# ##0.00)") & " " & Trm

Case Else
Syntaxe2 = Format(a, "+# ##0.00") & " " & Trm
End Select

End Function

Merci par avance, pour votre aide.
 

Pièces jointes

  • Format nombre et syntaxe.xlsm
    23.3 KB · Affichages: 42
  • Format nombre et syntaxe.xlsm
    23.3 KB · Affichages: 42

Nikless

XLDnaute Junior
Re : [VBA] [formule perso] Affichage unités singulier / pluriel

Merci PierreJean. Cela fonctionne bien pour les décimales en utilisant Double en lieu et place de Long.

Reste la question de la superposition du "-" et des parenthèses.
 

pierrejean

XLDnaute Barbatruc
Re : [VBA] [formule perso] Affichage unités singulier / pluriel

Re

Code:
Public Function Syntaxe2(Rng As Double, Trm As String) As String
a = Rng
If a > 1 Then Syntaxe2 = "+" & Format(a, "#,##0.00") & " " & Trm & "s"
If a >= 0 And a <= 1 Then Syntaxe2 = "+" & Format(a, "#,##0.00") & " " & Trm
If a < 0 And a >= -1 Then Syntaxe2 = Format(a, "#,##0.00") & " " & Trm
If a < -1 Then Syntaxe2 = Format(a, "#,##0.00") & " " & Trm & "s"
End Function

préférer également: =syntaxe2((B11*100-A11*100);"pt") a =syntaxe2((B11-A11)*100;"pt")
 

tototiti2008

XLDnaute Barbatruc
Re : [VBA] [formule perso] Affichage unités singulier / pluriel

Bonjour Nikless, Bonjour PierreJean :),

un essai sans macros (Mise en forme conditionnelle)
 

Pièces jointes

  • Format nombre et syntaxe.xlsm
    19.9 KB · Affichages: 46
  • Format nombre et syntaxe.xlsm
    19.9 KB · Affichages: 39

Nikless

XLDnaute Junior
Re : [VBA] [formule perso] Affichage unités singulier / pluriel

Re
Merci pour cette approche qui fonctionne mais ne répond pas tout à fait à mes desiderata...
Je souhaiterais que les formats pour les nombres négatifs soient (#,00.00) et non le standard avec le "-".

2 questions par curiosité :
- pourquoi privilégiez-vous le If..Then par rapport au Select Case ?
- quels avantages à syntaxe2((B11*100-A11*100);"pt") par rapport à cela =syntaxe2((B11-A11)*100;"pt")

Je pense enlever le "*100" de la barre de formule et l'insérer dans le code pour plus de réactivité.
 

pierrejean

XLDnaute Barbatruc
Re : [VBA] [formule perso] Affichage unités singulier / pluriel

Re

Salut Tototiti

En supposant avoir compris cette fois

Code:
Public Function Syntaxe2(Rng As Double, Trm As String) As String
a = Rng
If a > 1 Then Syntaxe2 = "+" & Format(a, "#,##0.00") & " " & Trm & "s"
If a >= 0 And a <= 1 Then Syntaxe2 = "+" & Format(a, "#,##0.00") & " " & Trm
If a < 0 And a >= -1 Then Syntaxe2 = Format(-a, "(#,##0.00)") & " " & Trm
If a < -1 Then Syntaxe2 = Format(-a, "(#,##0.00)") & " " & Trm & "s"
End Function

Je préfère IF Then qui permet de bien différencier les cas possibles mais je n’empêche personne d’utiliser un select case qui fonctionne
Par ailleurs dans le cas ou les chiffres sont très inférieurs a 0 on a intérêt a effectuer les multiplications d'abord sur les intermediaires plutôt que sur les résultats .J'admet qu'ici ce n'est pas evident
 

Modeste geedee

XLDnaute Barbatruc
Re : [VBA] [formule perso] Affichage unités singulier / pluriel

Bonsour®

:rolleyes:
une proposition avec formule et sans VBA
=TEXTE(100*(B16-A16);"[>0]""+ ""0,00"" pt"";[<0]""-( ""0,00"") pt"";0"" pt""")&SI(ABS(100*(B16-A16))>1;"s";"")
pour un cadrage à droite :
format de cellule :
* @
Capture.jpg
Capturea.JPG

:) PierreJean
 

Pièces jointes

  • Capture.jpg
    Capture.jpg
    48.7 KB · Affichages: 134
  • Capturea.JPG
    Capturea.JPG
    64 KB · Affichages: 103
Dernière édition:

Nikless

XLDnaute Junior
Re : [VBA] [formule perso] Affichage unités singulier / pluriel

Merci à tous les deux

PierreJean : c'est tout à fait ça.

Tototiti : merci pour la MFC.
Si je puis me permettre, il faut ajouter une 2e MFC pour traiter le cas >=-1 ET <=1.

Reste à faire l'arbitrage entre la formule personnelle et la double MFC.

Pour effectuer la synthèse des deux : est-il possible d'appliquer la MFC par VBA ?
 

tototiti2008

XLDnaute Barbatruc
Re : [VBA] [formule perso] Affichage unités singulier / pluriel

Bonjour Modeste GD, :)
Re,

Si je puis me permettre, il faut ajouter une 2e MFC pour traiter le cas >=-1 ET <=1.
Elle y est déjà
Pour effectuer la synthèse des deux : est-il possible d'appliquer la MFC par VBA ?

Oui, enregistre une macro et refait les MFC

Edit : Oups, on dirait que les formats de nombres dans les MFC passent pas bien en VBA:confused:
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : [VBA] [formule perso] Affichage unités singulier / pluriel

Re,

ça a l'air de passer comme ça

Code:
    Range("C11:C14").Select
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
        Formula1:="=-1", Formula2:="=1"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).NumberFormat = "# ##0,00"" pt"";(# ##0,00)"" pt"""
    Selection.FormatConditions(1).StopIfTrue = False
    Range("C11:C14").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=OU($C11<-1;$C11>1)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).NumberFormat = "# ##0,00"" pts"";(# ##0,00)"" pts"""
    Selection.FormatConditions(1).StopIfTrue = False
 

Discussions similaires

  • Résolu(e)
Microsoft 365 pb formule vba
Réponses
15
Affichages
775

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 458
dernier inscrit
Vulgaris workshop