Arrondi forcé Fonction Excel

Résolu/Fermé
Sirrol13 Messages postés 2 Date d'inscription lundi 30 novembre 2020 Statut Membre Dernière intervention 30 novembre 2020 - 30 nov. 2020 à 17:29
 Utilisateur anonyme - 30 nov. 2020 à 18:43
Bonjour, à tous, j'ai crée une formule VBA qui calcule la moyenne des cellules dont la couleur de police est noire.

Le code est le suivant :

Function MoyenneSiCouleur(Plage As Range, NumeroDeCouleur As Integer) As Long
Dim SommeSiCouleur As Double
Dim CountSiCouleur As Double
SommeSiCouleur = 0#
CountSiCouleur = 0#
Application.Volatile True
Dim Cellule As Range
For Each Cellule In Plage
If Cellule.Font.ColorIndex = NumeroDeCouleur Then
SommeSiCouleur = SommeSiCouleur + Cellule.Value
CountSiCouleur = CountSiCouleur + 1
End If
Next
MoyenneSiCouleur = SommeSiCouleur / CountSiCouleur
End Function

Mon problème est le suivant : le code arrondi la moyenne à l'entier, or je travaille avec des pourcentages et l'arrondi fait que le résultat est systématiquement 0..

J'ai mis le format de la cellule de résultat en % avec 4 chiffres significatifs, essayé des formules "ARRONDI" dans VBA, rien n'y fait..

Merci !

Configuration: Windows / Chrome 87.0.4280.66
A voir également:

4 réponses

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
30 nov. 2020 à 17:43
Bonjour,
'entier long
Function MoyenneSiCouleur(Plage As Range, NumeroDeCouleur As Integer) As Long
'nombre decimal
Function MoyenneSiCouleur(Plage As Range, NumeroDeCouleur As Integer) As Single
ou
Function MoyenneSiCouleur(Plage As Range, NumeroDeCouleur As Integer) As Double
0
yg_be Messages postés 23333 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 Ambassadeur 1 551
30 nov. 2020 à 17:43
bonjour,
peux-tu utiliser les balises de code quand tu partages du code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

pourquoi as-tu choisis
Long
comme type pour la valeur retournée par la fonction?
0
Utilisateur anonyme
Modifié le 30 nov. 2020 à 17:46
Bonjour

pour tes prochains post, merci de lire attentivement, ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Je ne fais quasiment pas de VBA, et là j'ai pas office sous la main.

Je pars donc d'une supposition se basant sur un point exact en C# (sait on jamais).
Donc en C# si tu divises un nombre entier par un nombre entier sa donne le quotient de la division euclidienne (c'est pas un arrondi).
Par exemple 7 / 2 => 3 car la division euclidienne est : quotient = 3, reste = 1.
Ou encore 20/3 => 6 (si ça avait été arrondi cela aurait été 7).
Toujours en C# pour obtenir le résultat sous forme d'un nombre décimal (double par exemple), il faut faire en sorte que l'un des membres de la division devienne un double: (7 * 1.0) / 2 => 3.5

Je ne sais pas si c'est valable en VBA, mais à tout hasard.


0
Utilisateur anonyme
30 nov. 2020 à 17:46
Ha ben, les copains ont trouvé ton erreur je crois.....
0
yg_be Messages postés 23333 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551
Modifié le 30 nov. 2020 à 17:52
bonjour Whismeril,
c'est valable en VBA, mais un des membres est déclaré comme double:
Dim SommeSiCouleur As Double
' ...
SommeSiCouleur = SommeSiCouleur + Cellule.Value


ce serait plus prudent de s'assurer que le second soit aussi traité comme un double:
SommeSiCouleur = SommeSiCouleur + cdbl(Cellule.Value)


ici, c'est la variable où on stocke le résultat final, MoyenneSiCouleur, qui est déclarée comme Long.
0
Utilisateur anonyme > yg_be Messages postés 23333 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024
30 nov. 2020 à 18:43
Salut, et oui, j'avais pas fait attention...
0
Sirrol13 Messages postés 2 Date d'inscription lundi 30 novembre 2020 Statut Membre Dernière intervention 30 novembre 2020
30 nov. 2020 à 18:02
C'est résolu, effectivement problème avec la nature de la fonction ! Merci à tous !
0