Arrondi forcé Fonction Excel

Résolu
Sirrol13 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
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 17270 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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
 
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
 
Ha ben, les copains ont trouvé ton erreur je crois.....
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Salut, et oui, j'avais pas fait attention...
0
Sirrol13 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
C'est résolu, effectivement problème avec la nature de la fonction ! Merci à tous !
0