[Basic] Afficher élégamment un nombre d'éléments

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

[Basic] Afficher élégamment un nombre d'éléments

Message par bm92 »

Bonjour,

Dans bien des situations, un programmeur doit afficher un texte indiquant un nombre d'éléments.
Supposons qu'on désire afficher un nombre de fautes dans un exercice. Première idée, très répandue :

Code : Tout sélectionner

Dim n As Long
n = 3 ' par exemple
MsgBox("Nombre de fautes dans l'exercice : " & n)
Solution correcte, mais le texte, sec, est typique d'un outil informatique.
Essayons d'être un peu plus humain. Deuxième idée courante:

Code : Tout sélectionner

MsgBox("Il y a " & n & " fautes dans l'exercice")
C'est correct pour deux fautes ou plus, mais le pluriel est incorrect pour une faute ou aucune.
Raffinons un peu :

Code : Tout sélectionner

MsgBox("Il y a " & n & " faute(s) dans l'exercice")
C'est plus lourd à lire, et suppose un pluriel simple. Supposez qu'on compte des chevaux...


La petite fonction Zero1Plus résoud ce problème irritant.
Elle comporte 4 arguments et renvoie une chaîne de caractères adaptée au nombre.
Liste des arguments:
  1. nbr est un nombre entier positif ou nul
  2. texte0 est le message correspondant à la valeur 0
  3. texte1 est le message correspondant à la valeur 1
  4. texte2 est le message pour une valeur supérieure ou égale à 2. Dans ce texte, le symbole %% désigne l'endroit où on veut insérer le nombre.
Un exemple d'utilisation:

Code : Tout sélectionner

Sub Main
Dim s As String, n As Long

n = 3 ' essayez d'autres valeur
s = Zero1Plus(n, "Il n'y a aucun cheval dans le pré", _
    "Il y a un cheval dans le pré", _
    "Il y a %% chevaux dans le pré")

MsgBox(s)
End Sub


Function Zero1Plus(nbr As Long, texte0 As String, texte1 As String, texte2 As String) As String
if nbr = 0  then
  Zero1Plus = texte0
elseif nbr = 1  then
  Zero1Plus = texte1
elseif nbr >= 2  then
  Zero1Plus = join(split(texte2, "%%", 2), nbr)
else
  Zero1Plus = "Erreur ! Le nombre est négatif : " & nbr
end if
End Function
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial